4.3 实例九 除法器设计(Robei工具)
4.3.1. 本章导读
要求掌握除法器原理,并根据原理设计除法器模块以及设计对应的测试模块,最后在 Robei可视化仿真软件经行功能实现和仿真验证。
设计原理
这个除法器的设计为传统除法器,因此十分简单,易懂:
(1)先取除数和被除数的正负关系,然后正值化被除数,由于需要递减的除数,所以除数应取负值和补码形式。
(2)被除数每一次递减,商数递增。
(3)直到被除数小于除数,递减过程剩下的是余数。
(4)输出的结果根据除数和被除数的正负关系。
下图4-3-1显示除法器模块的设计:
4.3.2. 设计流程
1. divider模型设计
(1)新建一个模型命名为divider,类型为module,同时具备5输入3输出,每个引脚的属性和名称参照下图4-3-2经行对应的修改。
(2)添加代码。点击模型下方的 Code添加代码。
代码:
reg[3:0] i;
reg[7:0] dsor;
reg[7:0] rd;
reg[7:0] dend;
reg[7:0] qent;
reg isneg;
reg isdone;
always @(posedge clk or negedge rst_n)
if(!rst_n)
begin
i<=4’d0;
dend<=8’d0;
dsor<=8’d0;
rd<=8’d0;
qent<=8’d0;
isneg<=1’b0;
isdone<=1’b0;
end
else if(start_sig)
case(i)
0: begin
dend<=dividend[7]?~dividend+1:dividend;
dsor<=divisor[7]?~divisor+1:divisor;
rd<=divisor[7]?divisor:(~divisor+1);
isneg<=dividend[7]^divisor[7];
qent<=8’d0;
i<=i+1;
end
1: begin
if(dend<dsor)
begin
qent<=isneg?(~qent+1):qent;
i<=i+1;
end
else
begin
dend<=dend+rd;
qent<=qent+1;
end
end
2:begin
isdone<=1’b1;
i<=i+1;
end
3:begin
isdone<=1’b0;
i<=4’d0;
end
endcase
assign done_sig=isdone;
assign quotient=qent;
assign remainder=dend;
(3)保存模型到一个文件夹(文件夹路径不能有空格和中文)中,运行并检查有无错误。
2. divider_test测试文件的设计
(1)新建一个5输入3输出的divider_test测试文件,将Module Type设置为“testbench”,各个引脚配置如图4-3-4所示。
(2)另存为测试文件。将测试文件保存到上面创建的模型所在的文件夹下。
(3)加入模型。在Toolbox工具箱的Current栏里,会出现模型,单击该模型并在divider _test上添加,并连接引脚,如下图4-3-5所示: