Verilog MIPS32 CPU-- MDU
Posted Benedict97
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Verilog MIPS32 CPU-- MDU相关的知识,希望对你有一定的参考价值。
- Verilog MIPS32 CPU(一)-- PC寄存器
- Verilog MIPS32 CPU(二)-- Regfiles
- Verilog MIPS32 CPU(三)-- ALU
- Verilog MIPS32 CPU(四)-- RAM
- Verilog MIPS32 CPU(五)-- CP0
- Verilog MIPS32 CPU(六)-- MDU
- Verilog MIPS32 CPU(七)-- DIV、DIVU
- Verilog MIPS32 CPU(八)-- 控制器
module MDU( input clk,rst, input [2:0] mdu, input [31:0] rdata1,rdata2, output [63:0] mul_out, output reg pc_ena, output reg [31:0] hi,lo); wire div_start,divu_start,div_busy,divu_busy,div_over,divu_over; wire [63:0] 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) 3\'h3: pc_ena = div_over ||mdu!=3\'h3; 3\'h4: pc_ena = divu_over||mdu!=3\'h4; default:pc_ena = 1\'b1; endcase end assign div_start = mdu==3\'h3&&!div_busy; assign divu_start = mdu==3\'h4&&!divu_busy; always@(posedge clk or posedge rst)begin if(rst) begin hi<=32\'b0; lo<=32\'b0; end else begin case(mdu) 3\'h1: {hi,lo} <= mult_out; 3\'h2: {hi,lo} <= multu_out; 3\'h3: {lo,hi} <= div_out; 3\'h4: {lo,hi} <= divu_out; 3\'h5: hi <= rdata1; 3\'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!=3\'h3), .start(div_start), .q(div_out[63:32]), .r(div_out[31:0]), .over(div_over), .busy(div_busy)); DIVU DIVU( .dividend(rdata1), .divisor(rdata2), .clock(clk), .reset(mdu!=3\'h4), .start(divu_start), .q(divu_out[63:32]), .r(divu_out[31:0]), .over(divu_over), .busy(divu_busy)); endmodule
以上是关于Verilog MIPS32 CPU-- MDU的主要内容,如果未能解决你的问题,请参考以下文章