VHDL

Jan. 19th, 2012 06:06 pm
kincajou: (Default)
[personal profile] kincajou
Как в VHDL тестбенче сформировать непериодическую (но не случайную, а вполне определённую) последовательность импульсов?..

Метод "в лоб"

TestPin <= '0' after 65ns;
TestPin <= '1' after 100ns;
TestPin <= '0' after 135ns;

не работает - на выходе сразу получается последняя заданная константа (в данном случае - нуль)
[x]

Date: 2012-01-19 02:20 pm (UTC)
From: [identity profile] kotkotofeich.livejournal.com
Как помнится цикл надо писать потому что в блоке все строчки выполняются синхронно.

-> цикл + задержку через генератор случайных чисел (пардон за терминологию, я на такие темы думаю только по аглицки)

Date: 2012-01-19 02:25 pm (UTC)
From: [identity profile] kincajou.livejournal.com
разве синхронно? Как же тогда работает это:
wait for 10 ns;
PSeg <= "011";
wait for 20 ns;
PSeg <= "000";

?

Я не могу воспользоваться ЭТИМ подходом, потому что в одном и том же блоке.. ээ.. впрочем, может и не в одном. Короче, надо сформировать последовательность битов, пропихнуть их в некую машинку - но сама машинка тоже в разные моменты времени получает разные константы. И чтоб в этом не зарыться, я думал сначала описать битовую последовательность, а ниже её саму машинку. Ан нет, не получается... в VHDL я, скажем так, не слишком силён. Но надо.

Date: 2012-01-19 02:28 pm (UTC)
From: [identity profile] kotkotofeich.livejournal.com
Могу быть неправ - давно не брал в руки шашки и потерял квалификацию, но на такую проблему натыкался и помнится решал так. Звиняйте что сильнее помочь не могу.

Date: 2012-01-19 05:19 pm (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Короче, надо сформировать последовательность битов

Если вам нужно, например, три сигнала, то можно поступить так (как вариант):

signal s1,s2,s3 : std_logic;

...

s1 <= '0';
wait for 10 ns;
s1 <= '1';
wait for 50 ns;
s1 < = '0';

s2 <= '1';
wait for 10 ns;
s2 <= '0';
wait for 50 ns;
s2 < = '1';

s3 <= '0';
wait for 10 ns;
s3 <= '1';
wait for 50 ns;
s3 < = '0';

Или, например, вот так:

signal Bit_field : std_logic_vector(2 downto 0);
signal s1,s2,s3 : std_logic;

...

Bit_field <= "000";
wait for 20 ns;
Bit_field <= "010";
wait for 10 ns;
Bit_field <= "110";

s1 <= Bit_field(0);
s2 <= Bit_field(1);
s3 <= Bit_field(2);

Date: 2012-01-19 05:24 pm (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Только забыл сказать - сигналы должны формироваться в разных процессах. Оператор wait тормозит выполнение процесса на указанное время.

Date: 2012-01-19 05:20 pm (UTC)
From: [identity profile] andrey-yurin.livejournal.com
Ну или, например, так:

G: process

begin

G0 <= '1' after 5 ns,

'0' after 10 ns,

'1' after 15 ns,

'0' after 20 ns;

G1 <= '1' after 5 ns,

'0' after 15 ns;

wait;

end process G;

Date: 2012-01-19 05:22 pm (UTC)
From: [identity profile] kincajou.livejournal.com
опробую завтра

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25 262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 20th, 2025 04:35 am
Powered by Dreamwidth Studios