高手指点verilog中task的调用问题
时间:10-02
整理:3721RD
点击:
设计的本意是定义一个task来产生一个上升沿。verilog代码段如下。
`timescale 1ns/10ps
module testben;
reg clk.
....
initial begin
#0 clk=0;
end
//task 定义如下
task posdge_gen;
output posdge_gen_o;
begin
posdge_gen_o =0;
#50;
posdge_gen_o =1;
#50;
end
endtask
//task 调用如下
initial begin
....
posdge_gen(clk);
....
end
endmodule
执行的结果是clk并没有产生一个上升沿。不知是task调用时参数不能如此传递还是其他什么原因。请高手指点,谢谢
`timescale 1ns/10ps
module testben;
reg clk.
....
initial begin
#0 clk=0;
end
//task 定义如下
task posdge_gen;
output posdge_gen_o;
begin
posdge_gen_o =0;
#50;
posdge_gen_o =1;
#50;
end
endtask
//task 调用如下
initial begin
....
posdge_gen(clk);
....
end
endmodule
执行的结果是clk并没有产生一个上升沿。不知是task调用时参数不能如此传递还是其他什么原因。请高手指点,谢谢
找到原因了,原来task是在之行结束后才返回结果,所以,除非操作全局变量,否则动态返回不能实现了。,verilog这一点真是不太爽。
自己没搞清楚verilog语言特性还闲verilog不爽吗?
你可以用systemc, systemv, c++等等。
