名称:基于FPGA的32位补码除法器设计Verilog代码ISE仿真
软件:ISE
语言:Verilog
代码功能:32位补码除法器设计
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. Testbench
5. 仿真图
用有符号十进制显示:
可以看到:
89除以12等于7余数5;
-97除以36等于-2余数-25;
72除以-8等于-9余数0;
-85除以-37等于2余数-11;
89除以-5等于-17余数4;
部分代码展示:
//除法器 module?Divider_32bit( Clock,//时钟 Start,//开始计算信号,为高电平开始 x,//被除数?,Divisor/dividend y,//除数 Lo,//商 Hi,//余数 Ready//输出,表示运算完成 ); parameter?N=32;//N定义除法器位数 parameter?M=5;//2^M=N input?Clock;//时钟 input?Start;//开始计算信号,为高电平开始 input?[N-1:0]?x;//被除数?,Divisor/dividend input?[N-1:0]?y;//除数 output?[N-1:0]?Lo;//商 output?[N-1:0]?Hi;//余数 output?Ready; reg?Ready=0; wire?[N-1:0]?Divisor;//无符号被除数?,Divisor/dividend wire?[N-1:0]?dividend;//无符号除数 wire?[N-1:0]?shang;//无符号商 wire?[N-1:0]?yushu;//无符号余数 //将有符号数转为无符号数,正数不变,负数取反加1 assign?Divisor=(x[N-1]==0)?x:(~x+1); assign?dividend=(y[N-1]==0)?y:(~y+1); wire?[2*N-1:0]?Divisor_extend;//扩展为2N位 assign?Divisor_extend=Divisor; 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) case(state) state_idle:begin shift_cnt<='d0; if(Start==1)//加载被除数 state<=state_load; else state<=state_idle; end state_load:begin data<=Divisor_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 state_judge:begin if(data[2*N-1:N]>=dividend)//判断高位是否大于除数 state<=state_sub; else if(shift_cnt=='d0)//判断移位是否结束 state<=state_end;//计算结束 else state<=state_leftshift; end
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=794
阅读全文
423