verilog中task的使用
使用task简化testbench的编写,
首先是定义task功能,这段代码中fifo_dout是在testbench中声明的全局变量,所以可以直接使用,
//模拟FIFO的读操作
//传入参数:FIFO读出的数据
task fifo_rd_data;input [7:0] data;begin@(posedge fifo_rden); fifo_dout <= data;end
endtask
task还可以进行嵌套,用在另外一个task中,
task sim_reply_3;begin#200;@(posedge clk); fifo_empty <= 1'b0;fifo_rd_data(8'h55); fifo_rd_data(8'haa);fifo_rd_data(8'h27); //帧IDfifo_rd_data(8'h03); fifo_rd_data(8'h00);fifo_rd_data(8'h01); fifo_rd_data(8'h02); fifo_rd_data(8'h03); fifo_rd_data(8'h04);fifo_rd_data(8'h01); fifo_rd_data(8'h02); fifo_rd_data(8'h03); fifo_rd_data(8'h04);fifo_rd_data(8'h01); fifo_rd_data(8'h02); fifo_rd_data(8'h03); fifo_rd_data(8'h04);fifo_rd_data(8'h48);fifo_empty <= 1'b1;#200;end
endtask
在testbench中调用task,进行功能验证,
///////////////////////////////////////
//验证命令解析
initial beginfifo_empty <= 1'b1;fifo_dout <= 'b0;@(posedge rst_n);sim_reply_1(); //探测组件周期数据sim_reply_2(); //激光编码注入/查询回复sim_reply_3(); //所有注入码型查询回复end