内容
实验一: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
波形仿真:
结果分析:
计算机所能完成的最基本操作是加减法和左右移;
应该使用位移运算来取代除法运算;
二进制除法的原理与在十进制时差不多,但实现起来要比二进制乘法稍微复杂一些;结果如波形