【发布时间】:2015-09-18 18:39:18
【问题描述】:
我有一个用于 FIFO 的 Verilog 测试平台,我认为使用任务来执行推送和弹出会比我现在所做的更有效。目前,我使用一系列repeat (ticks) @ (negedge clk) 语句来推送、弹出或推送和弹出一个长的初始开始/结束块。
这使得代码丑陋且难以阅读。我宁愿有一个任务,push_task(ticks),我可以打电话。像这样的 -
initial begin
task_push(5);
task_pop(2);
task_push(10);
...
end
问题是,如果我这样写我的push_task -
task push_task;
input [31:0] ticks;
repeat (ticks) begin
push <= 1'b1;
push_data <= $random % (2**DATA_WIDTH);
@ (negedge clk);
push <= 1'b0;
end
end
endtask
我有一个类似的pop_task,然后我可以推送或弹出,但不能同时进行。如何让两者同时执行或按顺序执行,具体取决于我想要做什么?
一个明显的方法是创建第三个任务,两者兼而有之。另一种方法是有一个具有三个输入、滴答声、推送和弹出的单一任务,并根据任务的输入是否被断言来断言推送和弹出.
有没有人有另一种(更好的?)方法来做到这一点?我可以在网上找到大量关于任务的语法是什么以及如何编写它们的信息。没有太多关于正确使用它们的方法是什么。
【问题讨论】:
标签: verilog