Прежде всего, мне жаль беспокоить вас, ребята, с моим вопросом, но я не могу найти никакого смысла в том, что происходит с моей (ModelSim имитируемой) схемой.Quartus II: простой счетчик, но странное поведение
Вот мой код, просто, как может быть:
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
ENTITY Counter IS
PORT(
enable : in std_logic;
clk : in std_logic;
count : out integer range 0 to 255);
END Counter;
ARCHITECTURE LogicFunction OF Counter IS
signal count_i : integer range 0 to 255;
begin
cnt : process(clk, enable, count_i)
begin
count <= count_i;
if (enable = '0') then
count_i <= 0;
else
count_i <= count_i + 1;
end if;
end process;
end LogicFunction;
Моей проблема: когда я выполнить моделирование синхронизации с ModelSim, с тактовым сигналом, «включен» является первым «0», а затем «1 ', выход («count») остается на ноль все время. Я пробовал много разных вещей, например, «подсчитывать» как вектор, делая всевозможные приведения, но он все равно остается прежним.
Приращение "count_i < = count_i + 1;" Кажется, проблема: я попытался заменить ее чем-то вроде «count_i < = 55», а затем выход изменился (до «55» в предыдущем примере).
Я видел точно такой же прирост в коде на этой странице, например: http://surf-vhdl.com/how-to-connect-serial-adc-fpga/ Я создал проект, моделируется его и ... это работает! Я действительно не понимаю, что сделал парень, которого я не сделал, за исключением кучки «если», которые мне не нужны в моем коде.
Любая помощь будет принята с благодарностью, я потратил как 3 часов проб и ошибок ...
Thanx заранее!
использовать clk, Luke, использовать clk ... –
Только квалифицируйте свое назначение count_i, если вы создаете комбинаторный цикл. Как отмечает Брайан, оператор if в процессе должен принять одобренную форму, обозначающую последовательную логику с использованием края тактового сигнала, а также разрешения. Руководство Quartus II Том 1, «Дизайн и синтез», «Руководства по дизайну», «Рекомендуемые стили кодирования HDL», «Рекомендации по кодированию для регистров и защелок». Пример: «VHDL D-Type Flipflop (Register) с ena, aclr и aload Control Signals (часть 2 из 2)». Опустите нагрузку и очистите. – user1155120
Обратите внимание, что ваша ссылка surf-vhdl показывает 'elsif (rising_edge (i_clk)), затем if (r_counter_clock_ena = '1') then' (замечание условий в операторах if не требует скобок). – user1155120