博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog MIPS32 CPU(七)-- DIV、DIVU
阅读量:4709 次
发布时间:2019-06-10

本文共 3104 字,大约阅读时间需要 10 分钟。

 

 

module DIVU(         input [31:0] dividend,         input [31:0] divisor,         input start,         input clock,         input reset,         output reg over,        output reg busy,        output [31:0] q,         output [31:0] r);            reg [4:0]  count;     reg [31:0] reg_q;     reg [31:0] reg_r;     reg [31:0] reg_b;     reg r_sign;        wire [32:0] sub_add = r_sign?({reg_r,q[31]} + {
1'b0,reg_b}):({reg_r,q[31]} - {1'b0,reg_b}); assign r = r_sign? reg_r + reg_b : reg_r; assign q = reg_q; always @ (posedge clock or posedge reset) begin if (reset) begin count <= 0; busy <= 0; over <= 0; end else if (start)begin reg_r <= 0; r_sign <= 0; reg_q <= dividend; reg_b <= divisor; count <= 0; busy <= 1; end else if (busy) begin reg_r <= sub_add[31:0]; r_sign <= sub_add[32]; reg_q <= {reg_q[30:0],~sub_add[32]}; count <= count +1; if(count == 31) begin busy <= 0; over <= 1; end end end endmodulemodule DIV( input signed [31:0] dividend, input signed [31:0] divisor, input start, input clock, input reset, output reg over, output reg busy, output [31:0] q, output reg [31:0] r); reg [5:0] count; reg [31:0] reg_q; reg [31:0] reg_r; reg [31:0] reg_b; reg r_sign; wire [32:0] sub_add = r_sign?({reg_r,q[31]} + {
1'b0,reg_b}):({reg_r,q[31]} - {1'b0,reg_b}); assign q = reg_q; always @ (posedge clock or posedge reset) if (reset) begin count <= 0; busy <= 0; over <= 0; end else begin if (start) begin reg_r <= 0; r_sign <= 0; if(dividend<0) reg_q <= -dividend; else reg_q <= dividend; if(divisor<0) reg_b <= -divisor; else reg_b <= divisor; count <= 0; busy <= 1; end else if(busy) begin if(count<=31) begin reg_r <= sub_add[31:0]; r_sign <= sub_add[32]; reg_q <= {reg_q[30:0],~sub_add[32]}; count <= count + 1; end else begin if(dividend[31]^divisor[31]) reg_q<=-reg_q; if(!dividend[31]) r<=r_sign? reg_r + reg_b : reg_r; else r<=-(r_sign? reg_r + reg_b : reg_r); busy <= 0; over <= 1; end end endendmodule

 

转载于:https://www.cnblogs.com/liutianchen/p/7616760.html

你可能感兴趣的文章
Lucene.Net 2.3.1开发介绍 —— 一、接触Lucene.Net
查看>>
数据库开发篇(一)——转换日期类型
查看>>
第三篇——第二部分——第一文 SQL Server镜像简介
查看>>
CSS实现背景透明,文字不透明(兼容各浏览器)
查看>>
SQL Server中的Merge关键字
查看>>
算法起步之选择算法
查看>>
WiX Toolset
查看>>
NSArray和NSMutableArray的常用方法 (转)
查看>>
java PDF分页打印
查看>>
数链剖分小结
查看>>
应用nslookup命令查看A记录、MX记录、CNAME记录和NS记录
查看>>
APT攻击
查看>>
做衡八的日子(转自VFleaking)
查看>>
day7.条件和循环
查看>>
(转)log4j(二)——如何控制日志信息的输出?
查看>>
JavaScript简介
查看>>
php.ini中safe_mode开启对PHP系统函数的影响
查看>>
gdb
查看>>
字符串与整数、浮点数、无符号整数之间的转换常用函数
查看>>
ubuntu清理旧内核
查看>>