3
我對Verilog任務的理解是,它們像子例程一樣工作,並能夠接受輸入和輸出參數。使用$display
,我可以一路窺探我的寄存器變量的值。出於某種原因,我的輸出寄存器似乎不會覆蓋參數。這裏有一個例子:如何使用Verilog任務將值輸出到寄存器?
`timescale 1 ps/1 ps
`default_nettype none
module testbench;
reg clk;
reg data_reg = 8'h00;
always begin // 100MHz clock
clk = 1'b1;
#(5000);
clk = 1'b0;
#(5000);
end
task copy(input reg [7:0] din, output reg [7:0] dout);
begin
$display("copy: before: din=%h, dout=%h",din,dout);
@(negedge clk);
dout = din;
@(negedge clk);
$display("copy: after: din=%h, dout=%h",din,dout);
end
endtask
initial
begin
$display("data_reg=%h",data_reg);
copy(8'hBC, data_reg);
$display("data_reg=%h",data_reg);
copy(8'h00, data_reg);
$display("data_reg=%h",data_reg);
$display("done");
$finish;
end
endmodule
這裏是icarus-verilog simulator的輸出:
data_reg=0
copy: before: din=bc, dout=xx
copy: after: din=bc, dout=bc
data_reg=0
copy: before: din=00, dout=bc
copy: after: din=00, dout=00
data_reg=0
done
爲什麼不登記data_reg
被覆蓋時,copy
任務叫什麼名字?
感謝您的支持!這將解釋爲什麼'$ display'只輸出一個數字而不是兩個數字。 –