2015-02-25 2 views
0

В Verilog я знаю, что мы не можем передавать «события» между модулями. Howe в System Verilog? Я хотел бы, событие «TRIG» зацепив источник запуска блоков «eventGen» и потребляемые блоком «eventConsume» Некоторые, как я получаю ошибку компиляцииВ SystemVerilog события могут быть определены в портах

Код:

module propagateEvents; 

reg clk; 
event trig; 

initial 
begin 
    clk = 1'b0; 
end 

always #10 clk = ~clk; 

eventGen eventGen (trig, clk); 
eventConsume eventConsume (trig, clk); 

endmodule 

module eventGen(trigGen, clk); 

input clk; 
event trigGen; 

reg count[3:0]; 

initial 
    count = 0; 

always @(posedge clk) 
begin 
    count = count + 1'b1; 
    if (count == 'h8) 
     ->trigGen; 
end 

endmodule 

module eventConsume(trigConsume, clk); 

input clk; 
event trigConsume; 

always @(trigConsume) 
begin 
    $display("Trigger caught"); 
end 
endmodule 
+0

Я получаю ошибку как «error- [RILIP] Регистрация в низком свя входного порта propagateEvents.sv, 21 „trigGen“ Non-сеть переменная„trigGen“не может быть входом или INOUT порт. error- [RILIP] Зарегистрируй в низком свя входного порта propagateEvents.sv, 40 "trigConsume" Non-сеть переменная 'trigConsume' не может быть входом или INOUT порт. – Mike

ответ

1

Вы должны дать порт направление; ех. inout event. Рабочий пример here. SystemVerilog также может использовать ref event.

Отметьте, что event не синтезируется. Также reg count[3:0] должен быть reg [3:0] count.

module eventGen(output event trigGen, input clk); 
reg [3:0] count; 
initial count = 0; 
always @(posedge clk) 
begin 
    count = count + 1'b1; 
    if (count == 'h8) 
     ->trigGen; 
end 
endmodule 

module eventConsume(input event trigConsume, input clk); 
always @(trigConsume) 
begin 
    $display("Trigger caught"); 
end 
endmodule 
+1

нет необходимости использовать 'ref' port. Переменная события, используемая при назначении другому событию, передает дескриптор события, которое само по себе является ссылкой. Просто сделайте порт «output» на 'eventGen' и' input' на 'eventConsume' –

+0

Можем ли мы присвоить тип данных события другому типу данных события. У меня есть два или более события, например eventA, eventB, eventC. Я хотел бы, чтобы «trigConsume» был eventA | eventB | eventC; другими словами, назначить trgConsume = eventA | eventB | eventC действует семантически? – Mike

+0

'always @ (eventA или eventB или enventC) -> trigConsume;' или 'always @ (eventA) -> trigConsume; always @ (eventB) -> trigConsume; always @ (eventC) -> trigConsume; '. Выполнение 'trigConsume = eventA', будет равно ему в eventA, но' trigConsume = eventB', переопределит псевдоним. 'EVENTA = trigConsume; eventB = trigConsume; 'будет все равно. См. [IEEE Std 1800-2012] (http://standards.ieee.org/getieee/1800/download/1800-2012.pdf) раздел 6.17. _Event data type_ – Greg

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