schewermut 0 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба Пишу на VHDL не много, опыта мало, столкнулся с такой вот проблемой. Написал на VHDL программу регистра сдвига, кажись все правильно, выполняется без ошибок, но при временном моделировании после сдвига влево на выходе оказывается единица но по логике должен быть ноль, я не знаю почему и что мне делать . Код: library IEEE; USE IEEE.std_logic_1164.all; --тело регистра ЗСB entity ZSB is port( BR, BL: in std_logic; --сигналы управление сдвигами D_ALB_Q: in std_logic_vector (3 downto 0); SB0, SB3: inout std_logic; --сигналы переноса Q_ZSB: out std_logic_vector(3 downto 0) ); --результат end; --архитектура регистра architecture move_reg of ZSB is begin process(BL, BR) begin if (BL = '0' and BR = '0') then --передача данных Q_ZSB <= D_ALB_Q; SB3 <= '0'; SB0 <= '0'; elsif (BL = '0' and BR = '1') then --сдвиг вправо Q_ZSB(3) <= SB3; for i in 2 downto 0 loop Q_ZSB(i) <= D_ALB_Q(i+1); end loop; SB0 <= D_ALB_Q(0); elsif (BL = '1' and BR = '0') then --сдвиг влево SB3 <= D_ALB_Q(3); for i in 3 downto 1 loop Q_ZSB(i) <= D_ALB_Q(i-1); end loop; Q_ZSB(0) <= SB0; end if; end process; end; скрин временного моделирования: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба Смотрел на код минут с 10,.. так и не смог понять, что же такое у Вас получилось. Но уж точно: сдвиговый регистр описывается по иному. Если Вы работаете с Xilinx ISE, то почитайте XST.pdf, в нём есть раздел Shift Registers HDL Coding Techniques. Обратите внимание на то, что в приведённом примере используется C'Event - что позволяет синтезировать триггер. Тогда у Вас получиться нормальный сдвиговый регистр. C'Event and C = '1' эквивалентно rising_edge©. Сейчас же у Вас (если я правильно понял) получилось нечто асинхронное, поведение которого при временном моделировании (у Вас же картинка временного моделирования ?) определяются задержками логических элементов и разводки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
schewermut 0 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба Смотрел на код минут с 10,.. так и не смог понять, что же такое у Вас получилось. Но уж точно: сдвиговый регистр описывается по иному. Работаю c Cyclone II. используя C'Event and C = '1', все работает правильно. но в том то и дело мне нужен асинхронный регистр сдвига, я описываю логику схемы (отображена которая ниже) там регистр "ЗСВ". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_su 1 8 ноября, 2009 Опубликовано 8 ноября, 2009 (изменено) · Жалоба Добрый день. Совершенно верно заметил Boris_TS: "...поведение которого при временном моделировании (у Вас же картинка временного моделирования ?) определяются задержками логических элементов и разводки". "Нежелательные" значения(переходные процессы) на выходах асинхронной схемы будут появляться неизбежно и зависеть будут от того, в какие ячейки попадут элементы и как проведутся связи. P.S. Я так понимаю, что результат сдвига у Вас потом поступает в НОЗП, который работает по CLK. Вот там "дребезг" на выходах 3СВ и уберется. Изменено 8 ноября, 2009 пользователем Andrew Su Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
schewermut 0 8 ноября, 2009 Опубликовано 8 ноября, 2009 · Жалоба P.S. Я так понимаю, что результат сдвига у Вас потом поступает в НОЗП, который работает по CLK. Вот там "дребезг" на выходах 3СВ и уберется. Да, все правильно. Результат потом в НОЗП, работает он по CLK. Спасибо Andrew Su и Boris_TS! Соберу все до кучи посмотрю как оно будет себя вести. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба Пишу на VHDL не много, опыта мало, столкнулся с такой вот проблемой. Написал на VHDL программу регистра сдвига, кажись все правильно, выполняется без ошибок, но при временном моделировании после сдвига влево на выходе оказывается единица но по логике должен быть ноль, я не знаю почему и что мне делать . Код: library IEEE; USE IEEE.std_logic_1164.all; --тело регистра ЗСB entity ZSB is port( BR, BL: in std_logic; --сигналы управление сдвигами D_ALB_Q: in std_logic_vector (3 downto 0); SB0, SB3: inout std_logic; --сигналы переноса Q_ZSB: out std_logic_vector(3 downto 0) ); --результат end; --архитектура регистра architecture move_reg of ZSB is begin process(BL, BR) begin if (BL = '0' and BR = '0') then --передача данных Q_ZSB <= D_ALB_Q; SB3 <= '0'; SB0 <= '0'; elsif (BL = '0' and BR = '1') then --сдвиг вправо Q_ZSB(3) <= SB3; for i in 2 downto 0 loop Q_ZSB(i) <= D_ALB_Q(i+1); end loop; SB0 <= D_ALB_Q(0); elsif (BL = '1' and BR = '0') then --сдвиг влево SB3 <= D_ALB_Q(3); for i in 3 downto 1 loop Q_ZSB(i) <= D_ALB_Q(i-1); end loop; Q_ZSB(0) <= SB0; end if; end process; end; скрин временного моделирования: посмотрите здесь может поможет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться