我來自Verilog-95背景,我試圖弄清楚什麼Verilog-95箍我不必跳過了。SystemVerilog是否代表觸發器具有異步設置和復位功能,而無需添加無法合成的代碼?
寫與異步設置觸發器和用Verilog-95復位的顯而易見的方法是:
always @(posedge clk or negedge resetb or negedge setb) begin
if (!resetb) q <= 0;
else if (!setb) q <= 1;
else q <= d;
end
這個工作在合成。但是,如果我們曾經聲明過resetb和setb,然後在解除置位setb之前取消置位resetb,那麼這在模擬中不起作用,因爲這兩個信號都沒有posedge觸發器。我們需要增加(這取決於你的綜合工具)以下,以獲得模擬匹配合成:
// synopsys translate_off
always @(resetb or setb)
if (resetb && !setb) force q = 1;
else release q;
// synopsys translate_on
是否有SystemVerilog的構造,將讓你這樣做沒有這個額外的垃圾?更好的是,在Verilog-95中有沒有一種簡單的方法呢?
這是怎麼改變行爲呢?如果我們斷言resetb和setb,然後取消置位setb,那麼posedge setb不會甚至觸發模擬,並且模擬不會與綜合相匹配,不是? always_ff是否改變always塊的語義?我的印象是,它只是檢查,以防止你做某些壞事。當然,使用always_ff通常是很好的建議,但這似乎與問題正交。 – dan