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

除法器设计Verilog代码VIVADO仿真

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

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
    下载

相关推荐