htp免费域名注册网站,推广包括哪些内容,html教程 pdf,网站建设推推蛙在Verilog中使用任务task 1#xff0c;任务目的2#xff0c;RTL代码#xff0c;交换3#xff0c;测试代码4#xff0c;波形显示 1#xff0c;任务目的 #xff08;1#xff09;掌握任务在verilog模块设计中的应用#xff1b; #xff08;2#xff09;学会在电平敏感… 在Verilog中使用任务task 1任务目的2RTL代码交换3测试代码4波形显示 1任务目的 1掌握任务在verilog模块设计中的应用 2学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句并生成复杂组合逻辑的高级方法。 当我们希望能够将一些信号进行运算并输出多个结果时采用函数结构就显得很不方便但是采用任务结构在这方面优势则十分突出。任务本身并不返回计算值但它通过类似c语言中的形参和实参的数据交换非常容易地实现运算结果的调用。 此外还常利用任务来包装模块设计中的许多复杂任务的过程将许多复杂的操作步骤用一个命名清晰易懂的任务隐藏起来大大提高程序的可读性。 2RTL代码交换
// 在verilog中 使用任务 task
module sort4(
ra, rb, rc, rd,
a, b, c, d
);input [3:0] a, b, c, d;
output reg [3:0] ra, rb, rc, rd;reg [3:0] va, vb, vc, vd;always(a or b or c or d) begin{va, vb, vc, vd} {a, b, c, d};sort2(va, vc); // va, vc 互换sort2(vb, vd); // vb, vd 互换sort2(va, vb); // va, vb 互换sort2(vc, vd); // vc, vd 互换sort2(vb, vc); // vb, vc 互换{ra, rb, rc, rd} {va, vb, vc, vd};
endtask sort2;
inout [3:0] x, y;
reg [3:0] tmp;if(x y) begintmp x; // x与y变量的内容互换要求顺序执行则采用阻塞赋值方式x y;y tmp;end
endtaskendmodule3测试代码 // 测试代码
module sort4_top;
reg [3:0] a, b, c, d;
wire [3:0] ra, rb, rc, rd;initial begina 0; b 0; c 0; d 0;repeat(50)
begin
#100 a {$random}%15;b {$random}%15;c {$random}%15;d {$random}%15;
end#100 $stop;
endsort4 u_sort4(
.a (a),
.b (b),
.c (c),
.d (d),
.ra (ra),
.rb (rb),
.rc (rc),
.rd (rd)
);endmodule4波形显示