gpt4 book ai didi

verilog - 如何使用 Verilog 任务将值输出到寄存器?

转载 作者:行者123 更新时间:2023-12-01 08:38:45 26 4
gpt4 key购买 nike

我对 Verilog 任务的理解是它们的行为类似于子程序,并且能够接受输入和输出参数。使用 $display,我可以沿途查看寄存器变量的值。出于某种原因,我的输出寄存器似乎没有覆盖参数。这是一个例子:

`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

为什么调用copy任务时,寄存器data_reg没有被覆盖?

最佳答案

您忘记为 reg data_reg 设置宽度,所以它是 1 位宽,而您碰巧给它分配了一个偶数,所以它是零。

关于verilog - 如何使用 Verilog 任务将值输出到寄存器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com