module MDU(
input clk,rst,
input [:] mdu,
input [:] rdata1,rdata2,
output [:] mul_out,
output reg pc_ena,
output reg [:] hi,lo); wire div_start,divu_start,div_busy,divu_busy,div_over,divu_over;
wire [:] mult_out,multu_out,div_out,divu_out; assign mul_out = mult_out;
/*
1 mult
2 multu
3 div
4 divu
5 mthi
6 mtlo
*/
//assign pc_ena=1'b1; always@(*)begin
case(mdu)
'h3: pc_ena = div_over ||mdu!=3'h3;
'h4: pc_ena = divu_over||mdu!=3'h4;
default:pc_ena = 'b1;
endcase
end assign div_start = mdu=='h3&&!div_busy;
assign divu_start = mdu=='h4&&!divu_busy; always@(posedge clk or posedge rst)begin
if(rst) begin
hi<='b0;
lo<='b0;
end
else begin
case(mdu)
'h1: {hi,lo} <= mult_out;
'h2: {hi,lo} <= multu_out;
'h3: {lo,hi} <= div_out;
'h4: {lo,hi} <= divu_out;
'h5: hi <= rdata1;
'h6: lo <= rdata1;
endcase
end
end
mult_gen_0 multiplier(
.A(rdata1),
.B(rdata2),
.P(mult_out)); mult_gen_1 multiplier_unsigned(
.A(rdata1),
.B(rdata2),
.P(multu_out)); DIV DIV(
.dividend(rdata1),
.divisor(rdata2),
.clock(clk),
.reset(mdu!='h3),
.start(div_start),
.q(div_out[:]),
.r(div_out[:]),
.over(div_over),
.busy(div_busy)); DIVU DIVU(
.dividend(rdata1),
.divisor(rdata2),
.clock(clk),
.reset(mdu!='h4),
.start(divu_start),
.q(divu_out[:]),
.r(divu_out[:]),
.over(divu_over),
.busy(divu_busy));
endmodule

Verilog MIPS32 CPU(六)-- MDU的更多相关文章

  1. Verilog MIPS32 CPU(八)-- 控制器

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  2. Verilog MIPS32 CPU(七)-- DIV、DIVU

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  3. Verilog MIPS32 CPU(五)-- CP0

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  4. Verilog MIPS32 CPU(四)-- RAM

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  5. Verilog MIPS32 CPU(三)-- ALU

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  6. Verilog MIPS32 CPU(二)-- Regfiles

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  7. Verilog MIPS32 CPU(一)-- PC寄存器

    Verilog MIPS32 CPU(一)-- PC寄存器 Verilog MIPS32 CPU(二)-- Regfiles Verilog MIPS32 CPU(三)-- ALU Verilog M ...

  8. Verilog MIPS32 CPU(九)-- 顶层文件

    `timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...

  9. P4-verilog实现mips单周期CPU

    最近对学习的掌控可能出现了问题,左支右绌,p2挂了,p2.p3.p4.p5每周在计组花的连续时间少了很多,学习到的东西也少了很多,流水线都还没真正开始写,和别人比落后了一大截,随笔自然就荒废了,我得尽 ...

随机推荐

  1. [Z]用subcaption包排版子图(表)与图(表)格式设置

    很不错的一篇文章,可以进一步参考caption和subcaption的文档: http://www.peteryu.ca/tutorials/publishing/latex_captions

  2. stm32库函数FSMC_NORSRAMInit()解析

    这是一段对nor存储器的时序进行编程的函数,函数形式为void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct),里面 ...

  3. linux 远程连接服务器ftp命令整理

    Ftp命令的功能是在本地机和远程机之间传送文件.该命令的一般格式如下: $ ftp 主机名/IP ftp将给出提示符,等待用户输入命令: $ ftp ftp > 最常用的命令有: ls 列出远程 ...

  4. leetcode289

    public class Solution { public void GameOfLife(int[][] board) { ) - ; ].GetLength() - ; var list = n ...

  5. Python的输入输出

    一:Python2.x版本下的输入输出 Python2.x 下的输入 1)raw_input 格式:result = raw_input("提示信息")功能:1)会等待用户输入内容 ...

  6. Python基础学习九 数据库备份

    class BakDb(object): def __init__(self,ip,username,passwd,port=3306,path=r'C:\Users\BJQT\Desktop\dat ...

  7. IE11 - Object doesn't support property or method 'includes'

    IE不支持字符串的includes()方法:可以用indexOf()替换: includes()方法返回true和false; var str = "asdklmn": if(st ...

  8. 从零玩转JavaWeb系列7web服务器-----get与post的区别

    总结get与post的区别 get参数通过url传递,post放在request body中. get请求在url中传递的参数是有长度限制的,而post没有. get比post更不安全,因为参数直接暴 ...

  9. VUE+WebPack游戏设计:'乘法防线'游戏设计

  10. c# winform 解决PictureBox 无法打印全部图片的问题

    一.   问题描述 在页面使用PictureBox 加载资料图片后,点击“打印”,只能打印图片首页,较大图片则无法全部打印. 二.   原因分析 PictureBox中打印图片时没有设置继续打印相关属 ...