Verilog中的task块的使用非常值得仔细思考。
task可以加入时序控制逻辑,可以没有输入也可以没有输出,甚至可以没有输入输出。task的使用也非常灵活,可以连续调用,也可以互相调用。在task 后加上[automatic]后可以并行调用,系统可以自动生成相应的变量,非常方便。
之前在GPIO模块中我们使用了reg_bus作为系统与模块通讯的桥梁。在对GPIO进行测试的时候,我们需要模仿系统与模块的通讯行为,但是GPIO模块挂载的附加功能越多,我们需要进行的访问动作也越多。这种需要重复进行且大部分动作相同的行动就可以利用task进行统一,对于设计本身也是非常方便的。下面我举例一个task,根据不同配置可以分别模仿对特定寄存器的写入、读出。
task write (input reg [7:0] reg_ad_i, input reg [31:0] reg_wd_i);
reg reg_ck_i, reg_cs_i, reg_we_i, reg_re_i;
reg [3:0