[an error occurred while processing this directive]
For yes - модель задержки в Verilog (+)
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)
[an error occurred while processing this directive]

Отправлено Stewart Little 24 января 2001 г. 13:31

Пример из VHDL :
--------------------------------------------------------------------------------------------------------
LIBRARY ieee;
USE ieee.STD_logic_1164.all;
USE ieee.std_logic_arith.all;

ENTITY AT91R IS
PORT(
NRD: OUT std_logic :='0'
);
END AT91R;

ARCHITECTURE EBI OF AT91R IS

BEGIN

modeler : PROCESS
BEGIN
NRD <= '1' AFTER 100 ns;
WAIT FOR 30 ns;
NRD <= 'Z' AFTER 30 ns;
WAIT;
END PROCESS modeler;


END EBI;
--------------------------------------------------------------------------------------------------------
Симулируется (в ModelSim) как и задумано : через 60 нан от начала симуляции выход переходит в Z-состояние, и далее не изменяется. Т.е. последующая транзакция отменяет предыдущую.

Теперь как я пытался сделать примерно то же самое на Verilog'е :
--------------------------------------------------------------------------------------------------------
`timescale 1ns/1ns;
module tst;
reg a;
wire #10 b=a;
initial
begin: stim
a <= #10 1;
a <= #15 0;
a <= #20 1;
a <= #30 1'bz;
end

initial
begin: st2
a <= #25 0;
end
endmodule
--------------------------------------------------------------------------------------------------------
Если верно утверждение относительно отмены транзакций, то ожидается, что через 35 нан от начала симуляции выход перейдет в "0" и больше изменяться не будет.
Однако же получается, что через 35 нан выход переходит в "0", а еще через 5 нан - в "Z" (то есть a <= #30 1'bz; не отменяется).

А вот такой прием подсмотрен в верилоговской модели IDT'шной FIFO :
--------------------------------------------------------------------------------------------------------
//`timescale 1ns/1ns;
module tst;
reg a;
reg c;
wire b;
assign b = c? a: 0;
initial
begin: stim
c=1;
a <= #10 1;
a <= #15 0;
a <= #20 1;
a <= #50 1'bz;
// c = #10 0;
// a <= #25 0;
end

initial
begin: st2
// disable stim;
c = #35 0;
end
endmodule
--------------------------------------------------------------------------------------------------------
То есть вводится еще одна "переменная" - с. На мой взгляд такой подход несколько кривоват.

Что скажут опытные люди ?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru