2013-03-13 2 views
-1

я заинтересован, чтобы написать модуль Verilog, который одновременно будет обновлять несколько выходов -то вроде следующего кода, делает 3 операции одновременно (CLK 10):Неблокирующие одновременно присвоения проводов и регистров в Verilog

module mymodule (a,b,c,d,e); 
input a; 
input b; 
output c; 
output d; 
output e; 

wire b; 
wire a; 
wire c; 
wire d; 

reg e; 

initial begin 
c <= #10 (a+b); 
d <= #10 a; 
e <= #10 b; 
end 

endmodule 

Этот код является законным?

+0

Что вы пытаетесь сделать с помощью '# 10', добавить задержку к непрерывному назначению? – Morgan

+0

@Morgan - мне нужно ВСЕ 3 операции assinment для c, d и e выполняться на одних и тех же часах (часы 10) – Yakov

+0

Вам понадобятся часы, которые будут входными, а затем введите триггеры. – Morgan

ответ

3

Как TODO в правопреемника один выходной переменных после 10 TimeUnits или часы:

В конструкции уровня:

испытательный стенд
reg c,d,e; 
initial begin 
    #10; 
    c = a+b; 
    d = a; 
    e = b; 
end 

Для RTL (синтеза) сначала нужно испытательный стенд с часами.
Я бы генерировать часы, как это в моем testharness:

reg clk ; //Rising edge every 10 timesteps 
initial begin 
    clk = 0; 
    #5; 
    forever begin 
    #5 ; 
    clk = ~clk; 
    end 
end 

построить счетчик, который отсчитывает 10, и как только он достигает 10 Включает флип-флоп, чтобы загрузить новые значения.

wire enable = (counter == 4'b10); 
always @(posedge clk or negedge rst_n) begin 
    if (~rst_n) begin 
    c <= 1'b0; 
    d <= 1'b0; 
    e <= 1'b0; 
    end 
    else if (enable) begin 
    c <= (a+b); 
    d <= a; 
    e <= b; 
    end 
    end 
endmodule 

Дополнительные Verilog Советы
Выходы неявно провода нет необходимости переопределять их.

Неблокирующие присвоения <= предназначены для использования всегда @(posedge clk) при выводе триггеров.

reg s или logic типы могут быть назначены внутри always или initial блоков. wire s используются с assign или для подключения портов.

+0

. Доведения должны быть приурочены к clk 10. – Yakov

+0

Спасибо за обновление. Но выходы должны обновляться не только на одних и тех же часах, но на часах SPECIFIC (например, clk # 10) – Yakov

+0

- ОК. Я понял, что это задержка. Можете ли вы рассказать мне, как использовать вход clk - выполнить задание, когда clk равно 10? – Yakov

Смежные вопросы