• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

除法器设计Verilog代码VIVADO仿真

08/29 15:05
1143
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

2-240920140H1225.doc

共1个文件

名称:除法器设计Verilog代码VIVADO仿真

软件:VIVADO

语言:Verilog

代码功能:

32 位有符号、无符号除法器

了解 32 位有符号、无符号除法器的实现原理,使用 Verilog 实现一个 32 位有符号除法器和一个 32 位无符号除法器。

无符号除法器功能为将两个 32 位无符号数相除,得到一个 32 位商和 32 位余数。

本实验分别实现 32 位有符号和无符号除法器,结果为 32 位商 quotient 和 32 位余数 remainder,分别存放在 CPU 的专用寄存器 LO 和 HI 中。除法器时钟信号下降沿时检查 start 信号,有效时开始执行,执行除法指令时,busy 标志位置 1。在执行除法指令时,任何情况下不产生算数异常,当除数为 0 时,运算结果未知,对除法器除数为 0 和溢出情况的发生通过汇编指令中其他指令进行检查和处理。

带符号除法器功能为:将两个 32 带无符号数相除,得到一个 32 位商和余数,基本和无符号除法器类似,注意余数符号与被除数符号相同。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

演示视频:

设计文档:

1. 设计代码

2. Testbench

3. 仿真图

部分代码展示:

//除法器
module?Divider_32bit(
input?clock,//时钟
input?reset,//复位
input?start,//开始计算信号,为高电平开始
input?[31:0]dividend,//被除数?
input?[31:0]divisor,//除数
output?[31:0]q,//商
output?[31:0]r,//余数
output?busy//除法器忙标志位
);
parameter?N=32;//N定义除法器位数
parameter?M=5;//2^M=N
reg?busy_buf=0;
wire?[N-1:0]?Divisor_unsigned;//无符号被除数?,dividend/Divisor
wire?[N-1:0]?dividend_unsigned;//无符号除数
wire?[N-1:0]?shang;//无符号商
wire?[N-1:0]?yushu;//无符号余数
//将有符号数转为无符号数,正数不变,负数取反加1
assign?dividend_unsigned=(dividend[N-1]==0)?dividend:(~dividend+1);
assign?Divisor_unsigned=(divisor[N-1]==0)?divisor:(~divisor+1);
wire?[2*N-1:0]?Divident_extend;//扩展为2N位
assign?Divident_extend=dividend_unsigned;
parameter?state_idle?=3'd0;//空闲状态
parameter?state_load?=?3'd1;//加载被除数
parameter?state_leftshift?=?3'd2;//左移
parameter?state_judge?=?3'd3;//判断高位是否大于除数
parameter?state_sub?=?3'd4;//减去
parameter?state_end?=?3'd5;//结束
reg?[2:0]?state=3'd0;
reg?[2*N-1:0]?data=16'd0;
reg?[M-1:0]?shift_cnt='d0;//移位次数累计
reg?[N-1:0]?shang_reg=8'd0;//商
reg?[N-1:0]?yushu_reg=8'd0;//余数
always@(posedge?clock?or?posedge?reset)
if(reset==1)
????state<=state_idle;
else
case(state)
state_idle:begin
shift_cnt<='d0;
if(start==1)//加载被除数
state<=state_load;
else
state<=state_idle;
end
state_load:begin
data<=Divident_extend;//加载被除数
state<=state_leftshift;
shift_cnt<='d0;
end
state_leftshift:begin
shift_cnt<=shift_cnt+'d1;//移位次数累计
data<={data[2*N-2:0],1'b0};//左移
state<=state_judge;
end

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1109

  • 2-240920140H1225.doc
    下载

相关推荐