При имитации с векторным Waveform File (ФВ), Quartus-II фактически моделирует поведение синтезированного списка соединений (проверено здесь с Quartus-II 13.1). Если вы не выполнили шаг «Анализ & Синтез», Quartus просит это сделать. Вы должны всегда выполните этот шаг вручную, когда вы измените файлы VHDL перед повторным имитацией VWF. Синтезированный список соединений списывается как код Verilog, который будет вводить симулятор ModelSim. Вы можете найти его в файле simulation/qsim/microproj.vo
.
Пока Quartus сообщает о предупреждениях (или ошибках), поведение синтезированного дизайна может отличаться от описания VHDL. И это здесь, как указано ниже. Чтобы напрямую моделировать поведение вашего описания VHDL, вам нужно написать тестовый стенд.
Следующий испытательный стенд будет хорошим стартером. Он назначает те же входные значения, что и в вашем файле VWF за первые 200 нс. Вам нужно будет расширить код в указанном месте, чтобы добавить больше переходов сигнала.
library ieee;
use ieee.std_logic_1164.all;
entity microproj_tb is
end entity microproj_tb;
architecture sim of microproj_tb is
-- component ports
signal clk : std_logic := '0';
signal Sin : std_logic;
signal Sout : std_logic;
signal cancela : std_logic;
signal timerOut : std_logic;
begin -- architecture sim
-- component instantiation
DUT: entity work.microproj
port map (
clk => clk,
Sin => Sin,
Sout => Sout,
cancela => cancela,
timerOut => timerOut);
-- clock generation
clk <= not clk after 10 ns;
-- waveform generation
WaveGen : process
begin
Sin <= '0';
Sout <= '0';
wait for 40 ns; -- simulation time = 40 ns
Sin <= '1';
wait for 70 ns; -- simulation time = 110 ns
Sin <= '0';
wait for 50 ns; -- simulation time = 160 ns
Sin <= '1';
-- Extend here to add more signal transistions
wait;
end process WaveGen;
end architecture sim;
Quartus Prime Lite Edition включает в себя установку ModelSim Altera Edition. Вы можете настроить и запустить симуляцию с помощью ModelSim непосредственно в настройках проекта Quartus. Результаты моделирования для первых 200 нс, используя мой испытательный стенд выглядит следующим образом:
Как вы видите, на выходе отличается от симуляции файла ФВ, так как дизайн VHDL сам моделируется в настоящее время.
В коде VHDL вы описали защелки для сигналов cancela
и Ncarros
а также сообщенных «Анализ & Синтеза» шаг:
Warning (10492): VHDL Process Statement warning at MicroProj.vhdl(26): signal "Ncarros" is read inside the Process Statement but isn't in the Process Statement's sensitivity list
Warning (10492): VHDL Process Statement warning at MicroProj.vhdl(27): signal "Ncarros" is read inside the Process Statement but isn't in the Process Statement's sensitivity list
Warning (10492): VHDL Process Statement warning at MicroProj.vhdl(48): signal "Ncarros" is read inside the Process Statement but isn't in the Process Statement's sensitivity list
Warning (10631): VHDL Process Statement warning at MicroProj.vhdl(21): inferring latch(es) for signal or variable "cancela", which holds its previous value in one or more paths through the process
Warning (10631): VHDL Process Statement warning at MicroProj.vhdl(21): inferring latch(es) for signal or variable "Ncarros", which holds its previous value in one or more paths through the process
Info (10041): Inferred latch for "Ncarros[0]" at MicroProj.vhdl(20)
Info (10041): Inferred latch for "Ncarros[1]" at MicroProj.vhdl(20)
Info (10041): Inferred latch for "Ncarros[2]" at MicroProj.vhdl(20)
...
Info (10041): Inferred latch for "Ncarros[31]" at MicroProj.vhdl(20)
Info (10041): Inferred latch for "cancela" at MicroProj.vhdl(20)
На Altera FPGA, защелки реализованы с использованием look- (LUT) и комбинационный канал обратной связи в логическом элементе (LE).Состояние такой защелки не определено после программирования FPGA. Моделирование синтезированного списка соединений показывает это как «X'es».
Я рекомендую все же зафиксировать защелки и превратить ваш код в полностью синхронный, ориентированный на часы дизайн. То есть назначьте новые значения cancela
и Ncarros
только при нарастающем фронте часов. Код кода VHDL:
process(clk)
begin
if rising_edge(clk) then
-- put all your assignments to cancela and Ncarros here
end if;
end process;
SO не подходит для вашего "вопроса". Для просмотра кода используйте http://codereview.stackexchange.com/. О, и вы не показываете нам тестовый стенд, который используете. – damage
Создание testbench, который соответствует событиям в вашем файле waveform на clk, Sin и Sout. Я получаю другой [результат] (http://i.stack.imgur.com/eTHE9.png). У вас, похоже, проблема с использованием инструмента или проблема с методом применения имитационного стимула. Также обратите внимание, что Ncarros не управляется часовым событием и вместо этого увеличивает каждый раз уникальное событие в элементе списка senstivity. – user1155120
Вы не являетесь [минимальным, полным и проверяемым примером] (http://stackoverflow.com/help/mcve), не предоставляя способ дублирования проблемы, отображаемой в вашем файле формы волны. – user1155120