实例九— 除法器设计

本文详细介绍了如何使用Robei工具设计一个除法器,包括模型设计、测试文件编写、约束文件设定和板级验证。设计过程中,除法器采用传统方法,通过VIVADO进行后端设计,并在开发板上进行功能验证。
摘要由CSDN通过智能技术生成

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所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值