oleg_1 0 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба есть две переменные a,b:std_logic_vector(7 downto 0) и один выходной сигнал с :std_logic_vector(7 downto 0) подскажите как по первому переднему фронту с <= a ; а затем в течении n-тактов c <= b ; и так по циклу я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е. я хочу передать один конрольный байт ,который я затем отлавливаю и повторение информационнго байта(например за 20 тактов) для этого я инициирую две переменные в процессе и их в первый такт выходной сигнал выдает конрольный байт а затем 19 тактов какой-то другой извиняюсь занеточнотси в наприсании Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба есть две переменные a,b:std_logic_vector(7 downto 0) и один выходной сигнал с :std_logic_vector(7 downto 0) подскажите как по первому переднему фронту с <= a ; а затем в течении n-тактов c <= b ; и так по циклу <{POST_SNAPBACK}> Заранее приношу свои извенения: еклмнвакуеткуотапошвытпгшуцкта олтмшгуккапшк утмолдтщпгк А теперь подумай что спросил, посмотри пособие по ВХДЛ на руском и/или стандарт и спроси еще раз, http://telesys.ru/wwwboards/vhdl/47/messages/12775.shtml Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба есть две переменные a,b:std_logic_vector(7 downto 0) и один выходной сигнал с :std_logic_vector(7 downto 0) подскажите как по первому переднему фронту с <= a ; а затем в течении n-тактов c <= b ; и так по циклу я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е. я хочу передать один конрольный байт ,который я затем отлавливаю и повторение информационнго байта(например за 20 тактов) для этого я инициирую две переменные в процессе и их в первый такт выходной сигнал выдает конрольный байт а затем 19 тактов какой-то другой <{POST_SNAPBACK}> Вариант: process variable cnt : positive; -- счетчик тактов begin wait until rising_edge(Clk); -- ждем фронта c <= a; -- выставляем первый байт wait until rising_edge(Clk); -- ждем фронта c <= b; -- выставляем второй байт -- далее ждем 19 тактов for i in 1 to 19 loop wait until rising_edge(Clk); -- ждем фронта end loop end procress; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба Вариант: process variable cnt : positive; -- счетчик тактов begin wait until rising_edge(Clk); -- ждем фронта c <= a; -- выставляем первый байт wait until rising_edge(Clk); -- ждем фронта c <= b; -- выставляем второй байт -- далее ждем 19 тактов for i in 1 to 19 loop wait until rising_edge(Clk); -- ждем фронта end loop end procress; <{POST_SNAPBACK}> осталост толькьо найдти такой синтезатор, который нормально соберет сие :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба осталост толькьо найдти такой синтезатор, который нормально соберет сие :) <{POST_SNAPBACK}> Автор темы пишет: мне для моделирования нужен генератор определенной последовательности Я так понял, что нужно сделать генератор в тестбенче, т. е. синтезировать не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 октября, 2005 Опубликовано 19 октября, 2005 · Жалоба опс :) не заметил :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg_1 0 20 октября, 2005 Опубликовано 20 октября, 2005 · Жалоба спасибо des00 и Andew_b я работаю сейчас в Xilinx Foundation F4.2i, Build 3.1.196 Там свой симулятор ( Logic Simulator) TestBench там отсутствует(можно только создавать как символы) , я думал создать символ с помощью VHDL кода и промоделировать в схеме(схема нарисована в схемном редакторе с отдельными блоками на vhdl) , код не синтезируется: wait until rising_edge(Clk); -- ждем фронта c <= a; -- выставляем первый байт wait until rising_edge(Clk); -- ждем фронта c <= b; -- выставляем второй байт -- далее ждем 19 тактов for i in 1 to 19 loop wait until rising_edge(Clk); -- ждем фронта end loop не поддерживается ( Error L17/C0 : #0 Error: Process in routine OUT_WORD line 17 in file 'C:/Xilinx/active/projects/MODEM/OUT_WORD.vhd' contains unsupported wait statements. (HDL-226) ) попробую по другому исхитриться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 15 20 октября, 2005 Опубликовано 20 октября, 2005 · Жалоба Ну тогда сделайте ПЗУ на 20 ячеек, на адрес подайте счетчик от 0 до 19 и гоняйте по кругу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 21 октября, 2005 Опубликовано 21 октября, 2005 · Жалоба есть две переменные a,b:std_logic_vector(7 downto 0) и один выходной сигнал с :std_logic_vector(7 downto 0) подскажите как по первому переднему фронту с <= a ; а затем в течении n-тактов c <= b ; и так по циклу я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е. я хочу передать один конрольный байт ,который я затем отлавливаю и повторение информационнго байта(например за 20 тактов) для этого я инициирую две переменные в процессе и их в первый такт выходной сигнал выдает конрольный байт а затем 19 тактов какой-то другой извиняюсь занеточнотси в наприсании <{POST_SNAPBACK}> Как вариант: architecture a_X of e_Y is constant N : positive := 19; signal S : std_logic_vector(0 to N); begin process(Res, Clk) begin if Res = '1' then C <= (others => '0'); S <= ('1', others => '0'); elsif rising_edge(Clk) then C <= B; if S(0) = '1' then C<= A; end if; S <= S(N) & S(0 to N-1); end if; end process; end a_X; Здесь сигнал С регистровый, можно сделать комбинаторный: architecture a_X of e_Y is constant N : positive := 19; signal S : std_logic_vector(0 to N); begin process(Res, Clk) begin if Res = '1' then S <= ('1', others => '0'); elsif rising_edge(Clk) then S <= S(N) & S(0 to N-1); end if; end process; C <= A when S(0) = '1' else B; end a_X; Удачи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg_1 0 24 октября, 2005 Опубликовано 24 октября, 2005 · Жалоба есть две переменные a,b:std_logic_vector(7 downto 0) и один выходной сигнал с :std_logic_vector(7 downto 0) подскажите как по первому переднему фронту с <= a ; а затем в течении n-тактов c <= b ; и так по циклу я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е. я хочу передать один конрольный байт ,который я затем отлавливаю и повторение информационнго байта(например за 20 тактов) для этого я инициирую две переменные в процессе и их в первый такт выходной сигнал выдает конрольный байт а затем 19 тактов какой-то другой извиняюсь занеточнотси в наприсании <{POST_SNAPBACK}> Как вариант: architecture a_X of e_Y is constant N : positive := 19; signal S : std_logic_vector(0 to N); begin process(Res, Clk) begin if Res = '1' then C <= (others => '0'); S <= ('1', others => '0'); elsif rising_edge(Clk) then C <= B; if S(0) = '1' then C<= A; end if; S <= S(N) & S(0 to N-1); end if; end process; end a_X; Здесь сигнал С регистровый, можно сделать комбинаторный: architecture a_X of e_Y is constant N : positive := 19; signal S : std_logic_vector(0 to N); begin process(Res, Clk) begin if Res = '1' then S <= ('1', others => '0'); elsif rising_edge(Clk) then S <= S(N) & S(0 to N-1); end if; end process; C <= A when S(0) = '1' else B; end a_X; Удачи спасибо oval ! код синтезировался ,если кому интересно : library IEEE; use IEEE.std_logic_1164.all; entity OUT_WORD is port ( Res: in Std_logic; Clk: in STD_LOGIC; C: out STD_LOGIC_VECTOR (0 to 7) ); end OUT_WORD; architecture OUT_WORD_arch of OUT_WORD is constant N : positive := 19; signal S : std_logic_vector(0 to N); begin process(Res, Clk) variable A : std_logic_vector(0 to 7); variable B : std_logic_vector(0 to 7); begin A(0 to 7):= "01011101"; B(0 to 7):= "11001100"; if Res = '1' then C <= (others => '0'); S <= ('1', others => '0'); elsif falling_edge(Clk) then C <= B; if S(0) = '1' then C<= A; end if; S <= S(N) & S(0 to N-1); end if; end process; end OUT_WORD_arch; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться