endmodule //测试模块代码
`timescale 1ns/100ps `define clk_cycle 50 module tryfunctTop; reg [3:0]n,i; reg reset,clk; wire [31:0]result; initial begin clk=0; n=0; reset=1;
#100 reset=0; #100 reset=1;
for(i=0;i<=15;i=i+1) begin
#200 n=i; end
#100 $stop; end
always #`clk_cycle clk=~clk;
tryfunct m(.clk(clk),.n(n),.result(result),.reset(reset)); endmodule
五.综合仿真结果
练习题仿真结果
实验七 在Verilog HDL中使用任务(task)
一.实验目的:
1.掌握任务在Verilog模块设计中的应用。
2.学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等
语句,并生成复杂组合逻辑的高级方法。
二.实验设备:
安装Modelsim-6.2b的PC机。 三.实验内容:
利用电平敏感的always块和一个比较两变量大小排序的任务,设计出4个并行输入数的高速排序组合逻辑。
四.实验代码
module sort4(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); sort2(vb,vd); sort2(va,vb); sort2(vc,vd); sort2(vb,vc);
{ra,rb,rc,rd}={va,vb,vc,vd}; end task sort2;
inout [3:0]x,y; reg [3:0]tmp; if(x>y) begin tmp=x; x=y; y=tmp; end endtask endmodule
`timescale 1ns/100ps module task_Top; reg [3:0]a,b,c,d;
wire [3:0] ra,rb,rc,rd; initial begin a=0; b=0; c=0; d=0;
repeat(50) begin
#100 a={$random}; b={$random}; c={$random}; d={$random}; end
#100 $stop; end
sort4 sort4(.a(a),.b(b),.c(c),.d(d),.ra(ra),.rb(rb),.rc(rc),.rd(rd)); endmodule
五.综合仿真结果
练习题仿真结果