Перейти к содержанию
    

есть две переменные a,b:std_logic_vector(7 downto 0)

и один выходной сигнал с :std_logic_vector(7 downto 0)

подскажите как по первому переднему фронту с <= a ; а затем в течении

n-тактов c <= b ; и так по циклу

 

я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е.

 

я хочу передать один конрольный байт ,который я затем отлавливаю

и повторение информационнго байта(например за 20 тактов)

 

для этого я инициирую две переменные в процессе и их в первый такт

выходной сигнал выдает конрольный байт а затем 19 тактов какой-то

другой

 

 

извиняюсь занеточнотси в наприсании

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть две переменные a,b:std_logic_vector(7 downto 0)

и один выходной сигнал с :std_logic_vector(7 downto 0)

подскажите как по первому переднему фронту с <= a ; а затем в течении

n-тактов c <= b ; и так по циклу

 

Заранее приношу свои извенения:

еклмнвакуеткуотапошвытпгшуцкта олтмшгуккапшк утмолдтщпгк

 

А теперь подумай что спросил, посмотри пособие по ВХДЛ на руском и/или стандарт и спроси еще раз,

 

http://telesys.ru/wwwboards/vhdl/47/messages/12775.shtml

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть две переменные a,b:std_logic_vector(7 downto 0)

и один выходной сигнал с :std_logic_vector(7 downto 0)

подскажите как по первому переднему фронту с <= a ; а затем в течении

n-тактов c <= b ; и так по циклу

 

я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е.

 

я хочу передать один конрольный байт ,который я затем отлавливаю

и повторение информационнго байта(например за 20 тактов)

 

для этого я инициирую две переменные в процессе и их в первый такт

выходной сигнал выдает конрольный байт а затем 19 тактов какой-то

другой

Вариант:

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вариант:

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 и 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) )

попробую по другому исхитриться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну тогда сделайте ПЗУ на 20 ячеек, на адрес подайте счетчик от 0 до 19 и гоняйте по кругу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть две переменные a,b:std_logic_vector(7 downto 0)

и один выходной сигнал с :std_logic_vector(7 downto 0)

подскажите как по первому переднему фронту с <= a ; а затем в течении

n-тактов c <= b ; и так по циклу

 

я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е.

 

я хочу передать один конрольный байт ,который я затем отлавливаю

и повторение информационнго байта(например за 20 тактов)

 

для этого я инициирую две переменные в процессе и их в первый такт

выходной сигнал выдает конрольный байт а затем 19 тактов какой-то

другой

 

 

извиняюсь занеточнотси в наприсании

 

Как вариант:

 

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;

 

Удачи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть две переменные a,b:std_logic_vector(7 downto 0)

и один выходной сигнал с :std_logic_vector(7 downto 0)

подскажите как по первому переднему фронту с <= a ; а затем в течении

n-тактов c <= b ; и так по циклу

 

я имел в ввиду что мне для моделирования нужен генератор определенной последовательности т.е.

 

я хочу передать один конрольный байт ,который я затем отлавливаю

и повторение информационнго байта(например за 20 тактов)

 

для этого я инициирую две переменные в процессе и их в первый такт

выходной сигнал выдает конрольный байт а затем 19 тактов какой-то

другой

 

 

извиняюсь занеточнотси в наприсании

 

Как вариант:

 

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...