微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 刚刚开始用task,请指教有没有错误(已经解决,设全局变量)

刚刚开始用task,请指教有没有错误(已经解决,设全局变量)

时间:10-02 整理:3721RD 点击:

task AHB_master_assignment
(
         input  integer delay1,
         input  integer delay2,
         input  [7:0]    idata,
         input             ivld,
         output [7:0]  o_data,
         output          o_vld
);
begin
@(posedge clk)
#delay1
    o_data = idata;                  
//command
    o_vld  = ivld;
#delay2
@(posedge clk)
#delay1
    o_data = 8'b0;
    o_vld  = 1'b0;
end
endtask

////////////////////////////////////////////////////////////////////////////////
//  调用task, cmd_data和cmd_data_vld是我希望的输出,clk是系统时钟
////////////////////////////////////////////////////////////////////////////////
AHB_master_assignment(1,10,8'b10101010,1'b1,cmd_data,cmd_data_vld);

刚刚学习用task,请问有错么?



   仿真了一下,发现 cmd_data,cmd_data_vld的值一直是0
请问,哪里出错了呢?



   呵呵,贻笑大方了,逻辑错误,呵呵,应该设为全局变量

请注意task的verilog官方说明,task中的output是在task执行结束的时刻赋值。也就是说output只返回task 运行结束时点的值。你要想实现task对一个变量(记住是reg类型)赋值并要想实时反映你的赋值信息,那就要在task体外面对这个变量进行声明。
reg a;
task con_a;
@(posedge clk) a =1;
#100;
@(posedge clk) a=0;
endtask

请注意task的verilog官方说明,task中的output是在task执行结束的时刻赋值。也就是说output只返回task 运行结束时点的值。你要想实现task对一个变量(记住是reg类型)赋值并要想实时反映你的赋值信息,那就要在task体外面对这个变量进行声明。
reg a;
task con_a;
@(posedge clk) a =1;
#100;
@(posedge clk) a=0;
endtask

长见识了!一直没有这么深入的了解这个task



    老大,应该早点说,呵呵呵,我花费了n久找错误,然后找到了,然后你回复了哦,呵呵

我也受益。THX

受教了!

非常有用,非常感谢!

受教了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top