SystemVerilog中的傳參數給帶時延task
在SystemVerilog中,傳給task的參數相當於一個inout信號,在調用該task的時候就會把參數的值latch下來,如果參數是隨時間變化的,並且task中會走時間,那麼調用該task將不能達到我們的預期。
一、帶參數的task
1.1、對於task而言,默認的參數是input方向
task reg2pad_test(logic [31:0] pad_vector);
endtask : reg2pad_test
- 等價于
task reg2pad_test(input logic [31:0] pad_vector);
endtask : reg2pad_test
1.2、調用task
- 由於該task帶有一個input類型的參數,所以當調用該task的時候,會把該參數值copy下來
- 由於task中會走時間,當調用時間之後,參數pad_por的值發生變換,task內部程序是不知道的
- 因此,我們的驗證目的沒有達到
module top();
initial begin
wait($test$plusargs("digrf_iomux_test") && (`TESTBENCH_TOP.chip_done === 1'b1));
reg2pad_test(pad_por);
end
endmodule
1.3、reg2pad_test的實現
- function:對GPIO控制器的Register寫一個