Verilog数字系统设计教程第三部分练习七
时间:2023-11-26 18:37:01
提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档
目录
前言
高速排序组合逻辑,4个并行输入数
1.1 程序语句:
1.2 testbench语句:
1.3 仿真波形:
二、使用步骤
2.1 程序语句:
2.2 testbench语句:
2.3 仿真波形:
总结
前言
(1)掌握任务Verilog模块设计中的应用;
(2)学会在电平敏感列表中学习always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。
高速排序组合逻辑,4个并行输入数
1.1 程序语句:
module sort4_1(ra,rb,rc,rd,a,b,c,d); output [3:0]ra,rb,rc,rd; input [3:0]a,b,c,d; 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和vb从小到大排列 sort2(vb,vc); sort2(va,vb); sort2(vc,vd); sort2(vb,vc); {ra,rb,rc,rd} = {va,vb,vc,vd}; end task sort2; // 对x和y进行排列 inout [3:0]x,y; reg [3:0]temp; if(x > y) begin temp = x; x = y; y = temp; end endtask endmodule
1.2 testbench语句:
`timescale 1 ns/ 100 ps module sort4_2_vlg_tst(); reg [3:0] a,b,c,d; wire [3:0] ra,rb,rc,rd; sort4_1 i1 ( .a(a), .b(b), .c(c), .d(d), .ra(ra), .rb(rb), .rc(rc), .rd(rd) ); initial ///赋值语句 begin a=0;b=0;c=0;d=0; //赋初值 forever begin #100 a = {$random}; //每隔100ns,给a,b,c,d重新赋值 b = {$random}; c = {$random}; d = {$random}; end end initial begin #100000 $stop; ///终止程序 end endmodule