基于modelsim的十个Verilog入门试验程序(3)(顺序排列+二进制除法器)—程序+测试代码+波形+结果分析

该博客介绍了两个数字逻辑设计实验,包括顺序排列的VerilogHDL实现和二进制除法器的设计。实验一利用任务(task)功能对四个数进行排序,实验六通过位移运算完成二进制除法。测试波形验证了设计的正确性,展示了数字逻辑在解决计算问题中的应用。
摘要由CSDN通过智能技术生成

内容
实验一:7人表决器的设计
实验二:算数逻辑单元的设计
实验三:JK触发器的设计
实验四:环形计数器的设计
实验五:顺序排列的设计
实验六:二进制除法器的设计
实验七:数字显示频率计的设计
实验八:序列检测器的设计
实验九:数字秒表的设计
实验十:自助售票机的设计

实验五:顺序排列的设计
编设a,b,c,d四个数,按从小到大的顺序重新排列并输出到ra,rb,rc,rd中。
要求:(1)需在Verilog HDL描述中使用任务(task)。

//程序:
module order(a, b, c, d, ra, rb, rc, rd);
input[3:0] a, b, c, d;
output reg[3:0] ra, rb, rc, rd;
reg[3:0] i, j, k, q;
always@ (a or b or c or d)
begin
	compare2(a, b, i, j); 
	compare2(c, d, k, q); 
	compare2(i, k, ra, rb);
	compare2(j, q, rc, rd); 
end
task compare2;
input[3:0] in_x, in_y;
output[3:0] out_rx, out_ry;
begin 
	if(in_x<= in_y)
	{out_rx, out_ry}= {in_x, in_y};
	else
	{out_rx, out_ry}= {in_y, in_x};
end
endtask
endmodule

//测试代码:
`timescale 1ns/ 1ns
module order_tb;
reg [3:0] a, b, c, d;
wire[3:0] ra, rb, rc, rd;

order u1(.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;
	#10 a<=6; b<=9; c<=2; d<=8;
	#10 a<=1; b<=4; c<=1; d<=5;
	#10 a<=3; b<=8; c<=5; d<=0;
	#10 a<=8; b<=0; c<=3; d<=7;
	#10 a<=6; b<=6; c<=6; d<=6;
end
endmodule

波形仿真
在这里插入图片描述
结果分析:
数值比较器,对输入的四个数重新排序,以从小到大的顺序输出,输入四个变量,输出四个变量。
用task函数对2个数比较大小后排序,在主函数中调用4此task函数实现4个数的大小排序
测试程序对5组无序数列进行排序,仿真结果符合预期,测试波形如下图所示。

实验六:二进制除法器的设计

//程序:
module div(input[7:0] a, input[3:0] b, output reg [7:0] yshang, output reg [7:0] yyushu );  
reg[7:0] tempa, tempb;
reg[15:0] temp_a, temp_b;   
integer i;  
always @(a or b)  
begin tempa <= a;  tempb <= {4'b0000,b};  end  
always @(tempa or tempb)  
begin  
    temp_a = {8'b00000000,a};  
    temp_b = {4'b0000,b,8'b00000000};   
    for(i = 0;i < 8;i = i + 1)  
      begin  temp_a = temp_a<<1;  
      if(temp_a[15:8] >= tempb)  
        temp_a = temp_a - temp_b + 1'b1; 
 else  temp_a = temp_a; end  
    yshang <= temp_a[7:0];  
yyushu <= temp_a[15:8];  
end  
endmodule  


//测试代码:
`timescale 1ns/1ns  
module div_tb;    
reg [7:0] a;  
reg [3:0] b;  
wire [7:0] yshang;  
wire [7:0] yyushu; 
initial  
begin  
    #10 a=8'b00001111;b=4'b1000;   
    #100 a=8'b11111111;b=4'b1010;
    #100 a=8'b11110000;b=4'b1000; 
    #100 a=8'b11111100;b=4'b1011;   
end  
div u1 (.a(a),.b(b),.yshang(yshang),.yyushu(yyushu));  
endmodule  

波形仿真:在这里插入图片描述
结果分析:
计算机所能完成的最基本操作是加减法和左右移;
应该使用位移运算来取代除法运算;
二进制除法的原理与在十进制时差不多,但实现起来要比二进制乘法稍微复杂一些;结果如波形

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值