npu3pak13 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Спасибо за помощь, воспользуюсь обязательно всеми советами, но сейчас хочется разобраться почему мой код не работает и как его запустить, чтобы понять где ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Спасибо за помощь, воспользуюсь обязательно всеми советами, но сейчас хочется разобраться почему мой код не работает и как его запустить, чтобы понять где ошибка. А скиньте код в виде текста ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_signed.all; use IEEE.std_logic_unsigned.all; entity \3REG\ is port( CLKT : in STD_LOGIC; RS : in STD_LOGIC; RST : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(0 to 3):= (others => '0') ); end \3REG\; architecture \3REG\ of \3REG\ is component \4DFF\ port ( CLK : in STD_LOGIC; D0,D1,D2,D3 : in STD_LOGIC; RS0,RS1,RS2,RS3 : in STD_LOGIC; Q0,Q1,Q2,Q3 : out STD_LOGIC ); end component; signal D0 : STD_LOGIC; signal QT0,QT1,QT2,QT3 : STD_LOGIC := '0'; begin U10 : \4DFF\ port map( CLK => CLKT, D0 => D0, D1 => QT0, D2 => QT1, D3 => QT2, Q0 => QT0, Q1 => QT1, Q2 => QT2, Q3 => QT3, RS0 => RST, RS1 => RST, RS2 => RST, RS3 => RST ); Q(3) <= QT3; Q(2) <= QT2; Q(1) <= QT1; Q(0) <= QT0; D0 <= RS or QT3; end \3REG\; и исправленный тригер library IEEE; use IEEE.STD_LOGIC_1164.all; entity \4DFF\ is port( D0,D1,D2,D3 : in STD_LOGIC; CLK : in STD_LOGIC; RS0,RS1,RS2,RS3 : in STD_LOGIC; Q0,Q1,Q2,Q3 : out STD_LOGIC := '0' ); end \4DFF\; architecture \4DFF\ of \4DFF\ is begin process( CLK,RS0,RS1,RS2,RS3 ) begin if ( RS0='1') then Q0 <= '0'; elsif ( rising_edge (CLK)) then Q0 <= D0; end if; if ( RS1='1') then Q1 <= '0'; elsif ( rising_edge (CLK)) then Q1 <= D1; end if; if ( RS2='1') then Q2 <= '0'; elsif ( rising_edge (CLK)) then Q2 <= D2; end if; if ( RS3='1') then Q3 <= '0'; elsif ( rising_edge (CLK) ) then Q3 <= D3; end if; end process; end \4DFF\; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Запустил на Modelsim 1. Пока не убрал слеши из названия модулей не работало. Теперь файлы регистра выглядит так: library ieee; use ieee.std_logic_1164.all; entity DFF_aclr is port ( D0,D1,D2,D3 : in STD_LOGIC; CLK : in STD_LOGIC; RS0,RS1,RS2,RS3 : in STD_LOGIC; Q0,Q1,Q2,Q3 : out STD_LOGIC := '0' ); end DFF_aclr; architecture DFF_aclr of DFF_aclr is begin process ( CLK, RS0, RS1, RS2, RS3 ) begin if (RS0='1') then Q0 <= '0'; elsif (rising_edge (CLK)) then Q0 <= D0; end if; if (RS1='1') then Q1 <= '0'; elsif (rising_edge (CLK)) then Q1 <= D1; end if; if (RS2='1') then Q2 <= '0'; elsif (rising_edge (CLK)) then Q2 <= D2; end if; if (RS3='1') then Q3 <= '0'; elsif (rising_edge (CLK)) then Q3 <= D3; end if; end process; end DFF_aclr; 2. Убрал ненужные библиотеки. Зачем Вы их подключали я не знаю. Но в принципе они не влияли никак. library IEEE; use IEEE.std_logic_1164.all; entity reg_aclr is port( CLKT : in STD_LOGIC; RS : in STD_LOGIC; RST : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(0 to 3):= (others => '0') ); end reg_aclr; architecture reg_aclr of reg_aclr is component DFF_aclr port ( CLK : in STD_LOGIC; D0,D1,D2,D3 : in STD_LOGIC; RS0,RS1,RS2,RS3 : in STD_LOGIC; Q0,Q1,Q2,Q3 : out STD_LOGIC ); end component; signal D0 : STD_LOGIC; signal QT0,QT1,QT2,QT3 : STD_LOGIC := '0'; begin U10 : DFF_aclr port map( CLK => CLKT, D0 => D0, D1 => QT0, D2 => QT1, D3 => QT2, Q0 => QT0, Q1 => QT1, Q2 => QT2, Q3 => QT3, RS0 => RST, RS1 => RST, RS2 => RST, RS3 => RST ); Q(3) <= QT3; Q(2) <= QT2; Q(1) <= QT1; Q(0) <= QT0; D0 <= RS or QT3; end reg_aclr; С таким тестбенчем все работает как и должно: LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY reg_aclr_vhd_tst IS END reg_aclr_vhd_tst; ARCHITECTURE reg_aclr_arch OF reg_aclr_vhd_tst IS -- constants -- signals SIGNAL CLKT : STD_LOGIC; SIGNAL Q : STD_LOGIC_VECTOR(0 TO 3); SIGNAL RS : STD_LOGIC := '0'; SIGNAL RST : STD_LOGIC := '0'; COMPONENT reg_aclr PORT ( CLKT : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR(0 TO 3); RS : IN STD_LOGIC; RST : IN STD_LOGIC ); END COMPONENT; --▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ --======================================================================== -- Формирование констант для вычисления периодв CLK от частоты работы --======================================================================== constant clk_freq : real := 100.0; -- MHz constant clk_prd : time := (1000.0/clk_freq) * 1.0 ns; -- Вычисление периода CLK BEGIN i1 : reg_aclr PORT MAP ( -- list connections between master ports and signals CLKT => CLKT, Q => Q, RS => RS, RST => RST ); --========================================== -- Задание тактовой частоты проекта --========================================== process begin CLKT <= '0'; wait for clk_prd/2; CLKT <= '1'; wait for clk_prd/2; end process; process begin wait for 15*clk_prd; RS <= '1'; wait for clk_prd; RS <= '0'; wait; end process; process begin wait for 50*clk_prd; RST <= '1'; wait for 3*clk_prd; RST <= '0'; wait; end process; END reg_aclr_arch; Вывод : я предполагаю, что некорректные имена вида \name\ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба А в чем проблема теперь? Подайте сброс, подайте ваш RS меньше чем на такт, на такт, два, четыре. Посмотрите, как именно у вас не работает. Подскажу, если подадите на один такт, работать будет, но, скорее всего, только один раз. А потом послушайте совета, сбрасывайте один из тригеров в '1' и используйте для перезапуска сигнал RST. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба use IEEE.std_logic_arith.all; use IEEE.std_logic_signed.all; use IEEE.std_logic_unsigned.all; Во-первых, эти библиотеки вам не нужны, если вы не используете математические функции. В-вторых, использование std_logic_signed и std_logic_unsigned в одном модуле несколько странно. В-третьих, не используйте их вообще. Используйте стандартную библиотеку numeric_std Пока не убрал слеши из названия модулей не работало.Там имя архитектуры совпадает с именем модуля. Почему-то. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба А я даже и не заметил :rolleyes: . Во всяком случае ни Quartus ни Modelsim не ругались на это. Да и навскидку не помню, чтобы так нельзя было делать. Хотя я даже не думаю про это. Ибо у меня они всегда называются одинаково: либо RTL либо Behavoral Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Там имя архитектуры совпадает с именем модуля. Почему-то. Я практически всегда так пишу, еще никто не ругался :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Всю жизнь думал, что имена entity и связанного с ним архитектурного тела должны быть разными. Ну и ладно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Вывод : я предполагаю, что некорректные имена вида \name\ Убрал слэши и стало ещё хуже, их то генерила сама прога, поэтому когда я их убрал - вся структура проекта рухнула Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Убрал слэши и стало ещё хуже, их то генерила сама прога, поэтому когда я их убрал - вся структура проекта рухнула Значит симулятор кривой, либо настройки где-то не те. Код работает правильно. Modelsim я доверяю больше чем ActiveHDL. То что я скинул работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба У вас же раньше все моделировалось. Иксы были, почти там, где надо. Там, где не надо, вероятно, вызывались рукописной задержкой присвоения на 1 ns. Покажите, что получается сейчас. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба С именами \name\ всё нормально. Это расширенные идентификаторы, появившиеся в VHDL'93. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба С именами \name\ всё нормально. Это расширенные идентификаторы, появившиеся в VHDL'93. А вот Modelsim ALTERA STARTER EDITION 10.1d не нравится. Сейчас специально проверил. Пишет что : Component instance "U10 : DFF_aclr" is not bound. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
npu3pak13 0 11 мая, 2018 Опубликовано 11 мая, 2018 · Жалоба Переписал проект library IEEE; use IEEE.STD_LOGIC_1164.all; entity REG30 is port( CLKR : in STD_LOGIC; RS0 : in STD_LOGIC; RST : in STD_LOGIC; Q : out STD_LOGIC_VECTOR(0 to 3) := (others => '0') ); end REG30; architecture RTL of REG30 is component DFF4 port ( CLK : in STD_LOGIC; D0,D1,D2,D3 : in STD_LOGIC; RS0,RS1,RS2,RS3 : in STD_LOGIC; Q0,Q1,Q2,Q3 : out STD_LOGIC ); end component; signal D0 : STD_LOGIC; signal QT0,QT1,QT2,QT3 : STD_LOGIC := '0'; begin U1 : DFF4 port map( CLK => CLKR, D0 => D0, D1 => QT0, D2 => QT1, D3 => QT2, Q0 => QT0, Q1 => QT1, Q2 => QT2, Q3 => QT3, RS0 => RS0, RS1 => RS0, RS2 => RS0, RS3 => RS0 ); Q(3) <= QT3; Q(2) <= QT2; Q(1) <= QT1; Q(0) <= QT0; D0 <= RST or QT3; end architecture; Тестбенч генерил методами синтезатора, не знаю как текст такой ввести, вот результат - тот же самый, тригеры не переключаются. На совпадение имён не обращайте внимания, заметил, поправил, ничего не изменилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться