📄 wb.v
字号:
/*****************************************************************************$RCSfile: wb.v,v $$Revision: 1.2 $$Author: kohlere $$Date: 2000/02/03 18:16:30 $$State: Exp $$Source: /home/lefurgy/tmp/ISC-repository/isc/hardware/ARM10/behavioral/pipelined/wb.v,v $ Description: This is the Write Back Stage. It performs all writes to the register file. *****************************************************************************/module wb(GCLK, nRESET, wb_enbar, base, me_result, write_Rd_me, write_Rn_me, Rd_me, Rn_me, rfw_ena_a, rfw_ena_b, write_a, write_b, Rd_wb, Rn_wb, write_Rd_wb, write_Rn_wb);/*------------------------------------------------------------------------ Ports------------------------------------------------------------------------*/input [31:0] base; //Value to Write to Baseinput [31:0] me_result; //Value to Write to Rdinput [4:0] Rd_me; //1st Destination Registerinput [4:0] Rn_me; //2nd Destination Registerinput GCLK; //Clock Signalinput nRESET; //Reset Signalinput wb_enbar; //WB Stage Enableinput write_Rd_me; //Cond Failed?input write_Rn_me; //WB the base?output [31:0] write_a; //A data to RFoutput [31:0] write_b; //B data to RFoutput [4:0] Rd_wb; //Destination Registeroutput [4:0] Rn_wb; //Base Registeroutput rfw_ena_a; //Enable Write to Port Aoutput rfw_ena_b; //Enable Write to Port Boutput write_Rd_wb; //WB the destination?output write_Rn_wb; //WB the base?/*------------------------------------------------------------------------ Variable Declarations------------------------------------------------------------------------*///Declare Output of Multiplexers and Regisetersreg [31:0] base_reg; //Base Value to Write Backreg [31:0] wb_result; //Value to Write to Rdreg [4:0] Rd_wb; //1st Destination Registerreg [4:0] Rn_wb; //2nd Destination Registerreg write_Rd_wb; //Write to Rd?reg write_Rn_wb; //Write to Rn?//Declare Output of Combinational Logicwire [31:0] write_a; //Data to Port Awire [31:0] write_b; //Data to Port Bwire rfw_ena_a; //Enable Port Awire rfw_ena_b; //Enable Port Bwire reset_ena; //Reset the Enable Signal/*------------------------------------------------------------------------ Basic Assignments (Combinational Logic)------------------------------------------------------------------------*/assign write_a = wb_result;assign write_b = base_reg;assign rfw_ena_a = (write_Rd_wb) ? 1'b1 : 1'b0;assign rfw_ena_b = (write_Rn_wb) ? 1'b1 : 1'b0;assign reset_ena = (GCLK & (rfw_ena_a | rfw_ena_b) | !nRESET);/*------------------------------------------------------------------------ Sequential Always Blocks (Registers)------------------------------------------------------------------------*///This block controls the base_reg latchalways @(negedge GCLK or negedge nRESET) begin if (!nRESET) base_reg <= 32'h00000000; else if (!wb_enbar) base_reg <= base; end//This block controls the wb_result latchalways @(negedge GCLK or negedge nRESET) begin if (!nRESET) wb_result <= 32'h00000000; else if (!wb_enbar) wb_result <= me_result; end//This block controls the Rd_wb latchalways @(negedge GCLK or negedge nRESET) begin if (!nRESET) Rd_wb <= 5'h00; else if (!wb_enbar) Rd_wb <= Rd_me; end//This block controls the Rn_wb latchalways @(negedge GCLK or negedge nRESET) begin if (!nRESET) Rn_wb <= 5'h00; else if (!wb_enbar) Rn_wb <= Rn_me; end//This block controls the cond_failed_wb latchalways @(negedge GCLK or posedge reset_ena) begin if (reset_ena) write_Rd_wb <= 1'h0; else if (wb_enbar) write_Rd_wb <= 1'b0; else if (!wb_enbar) write_Rd_wb <= write_Rd_me; end//This block controls the w_wb latchalways @(negedge GCLK or posedge reset_ena) begin if (reset_ena) write_Rn_wb <= 1'h0; else if (wb_enbar) write_Rn_wb <= 1'h0; else if (!wb_enbar) write_Rn_wb <= write_Rn_me; end/*======================================================================*/endmodule //wb/*======================================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -