verilog 中的任务

发布于 2024-07-16 06:11:14 字数 463 浏览 7 评论 0原文

我正在尝试编写一个给出变量 paddr 不同值的任务:

module paddr1 ;
task paddr1;
input [10:0]paddr;
input clock;

 @(posedge clock)
begin
paddr=10
#100; 
paddr=20; 
#100; 
paddr=30; 
#100;  
paddr=40;
#100;   
paddr=50;
#100;   
paddr=60;
#100;  
paddr=70;
#100; 
paddr=80;
#100;

end
endtask
endmodule

我尝试从测试台调用此任务并写道: paddr1(paddr,时钟);

编译通过 但是当我尝试运行模拟时,我收到错误消息: 未解决对“paddr1”的引用。 谢谢您的回答 该任务位于与测试台不同的文件中

谢谢 亚尼夫

I am trying to write a task that gives a variable paddr diffrent values:

module paddr1 ;
task paddr1;
input [10:0]paddr;
input clock;

 @(posedge clock)
begin
paddr=10
#100; 
paddr=20; 
#100; 
paddr=30; 
#100;  
paddr=40;
#100;   
paddr=50;
#100;   
paddr=60;
#100;  
paddr=70;
#100; 
paddr=80;
#100;

end
endtask
endmodule

I tried to call this task from test bench and wrote:
paddr1 (paddr,clock);

It passes compilation
But when I'm trying to run simulation I get an eror massage:
Unresolved reference to 'paddr1'.
Thank you for your answer
the task is in a diffrent file then the test bench

Thank you
Yaniv

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

め七分饶幸 2024-07-23 06:11:14

您的模块中有一个任务。 那么,您是否在测试台中实例化了该模块? 如果您这样做了,那么您将需要查看模块内部以调用该任务:

module tb();

  paddr1 U0; // instantiate module with the task in it...

  initial begin
     U0.paddr1(paddr,clock);
  end

endmodule

但是您遇到了更严重的问题。 在 verilog 中,参数按值传递给任务。 这意味着“clock”的值在任务调用的生命周期内将是固定的。 你的任务永远不会找到时钟的边缘,并且将永远等待。 此外,您正在分配任务输入,这没有用。

You've a task inside a module. So, did you instantiate the module in the testbench? If you did, then you'll need to peek inside the module to call the task:

module tb();

  paddr1 U0; // instantiate module with the task in it...

  initial begin
     U0.paddr1(paddr,clock);
  end

endmodule

You've far more serious problems though. In verilog, arguments are passed to tasks by value. This means that the value of 'clock' will be fixed for the lifetime of the call to the task. Your task will never find a posedge of clock, and will wait forever. Also, you're assigning to a task input, which is not useful.

孤独陪着我 2024-07-23 06:11:14

我猜你想要一个 initial 块而不是任务。 将 paddr 和时钟连接为模块的端口,然后在 initial begin 块内修改 paddr。

当然,您仍然需要在某个地方实例化 paddr1 才能有用。

I'm guessing you want an initial block instead of a task. Wire up paddr and clock as ports to the module, then inside an initial begin block you modify paddr.

Of course you will still need to instantiate paddr1 somewhere to be useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文