[Modified] change div divu ip position form soc_top to exe_stage
This commit is contained in:
@@ -15,24 +15,6 @@ module mycpu_top(
|
||||
output [31:0] data_sram_addr,
|
||||
output [31:0] data_sram_wdata,
|
||||
input [31:0] data_sram_rdata,
|
||||
//div
|
||||
output [31:0] div_divisor_data,
|
||||
output div_divisor_valid,
|
||||
input div_divisor_ready,
|
||||
output [31:0] div_dividend_data,
|
||||
output div_dividend_valid,
|
||||
input div_dividend_ready,
|
||||
input div_dout_valid,
|
||||
input [63:0] div_dout_data,
|
||||
//divu
|
||||
output [31:0] divu_divisor_data,
|
||||
output divu_divisor_valid,
|
||||
input divu_divisor_ready,
|
||||
output [31:0] divu_dividend_data,
|
||||
output divu_dividend_valid,
|
||||
input divu_dividend_ready,
|
||||
input divu_dout_valid,
|
||||
input [63:0] divu_dout_data,
|
||||
// trace debug interface
|
||||
output [31:0] debug_wb_pc,
|
||||
output [ 3:0] debug_wb_rf_wen,
|
||||
@@ -134,25 +116,7 @@ module mycpu_top(
|
||||
.data_sram_en (data_sram_en ),
|
||||
.data_sram_wen (data_sram_wen ),
|
||||
.data_sram_addr (data_sram_addr ),
|
||||
.data_sram_wdata(data_sram_wdata),
|
||||
//div
|
||||
.div_divisor_data (div_divisor_data ),
|
||||
.div_divisor_valid (div_divisor_valid ),
|
||||
.div_divisor_ready (div_divisor_ready ),
|
||||
.div_dividend_data (div_dividend_data ),
|
||||
.div_dividend_valid (div_dividend_valid ),
|
||||
.div_dividend_ready (div_dividend_ready ),
|
||||
.div_dout_valid (div_dout_valid ),
|
||||
.div_dout_data (div_dout_data ),
|
||||
//divu
|
||||
.divu_divisor_data (divu_divisor_data ),
|
||||
.divu_divisor_valid (divu_divisor_valid ),
|
||||
.divu_divisor_ready (divu_divisor_ready ),
|
||||
.divu_dividend_data (divu_dividend_data ),
|
||||
.divu_dividend_valid(divu_dividend_valid),
|
||||
.divu_dividend_ready(divu_dividend_ready),
|
||||
.divu_dout_valid (divu_dout_valid ),
|
||||
.divu_dout_data (divu_dout_data )
|
||||
.data_sram_wdata(data_sram_wdata)
|
||||
);
|
||||
// MEM stage
|
||||
mem_stage mem_stage(
|
||||
|
||||
@@ -28,25 +28,7 @@ module exe_stage(
|
||||
//to lu
|
||||
output [`ES_TO_LU_BUS_WD -1:0] es_to_lu_bus ,
|
||||
//from lu
|
||||
input lu_to_es_bus ,
|
||||
//div
|
||||
output [31:0] div_divisor_data ,
|
||||
output div_divisor_valid ,
|
||||
input div_divisor_ready ,
|
||||
output [31:0] div_dividend_data ,
|
||||
output div_dividend_valid ,
|
||||
input div_dividend_ready ,
|
||||
input div_dout_valid ,
|
||||
input [63:0] div_dout_data ,
|
||||
//divu
|
||||
output [31:0] divu_divisor_data ,
|
||||
output divu_divisor_valid ,
|
||||
input divu_divisor_ready ,
|
||||
output [31:0] divu_dividend_data ,
|
||||
output divu_dividend_valid ,
|
||||
input divu_dividend_ready ,
|
||||
input divu_dout_valid ,
|
||||
input [63:0] divu_dout_data
|
||||
input lu_to_es_bus
|
||||
);
|
||||
|
||||
reg es_valid ;
|
||||
@@ -136,6 +118,25 @@ module exe_stage(
|
||||
|
||||
wire [31:0] div_mod_result;
|
||||
|
||||
//div
|
||||
wire [31:0] div_divisor_data;
|
||||
wire div_divisor_valid;
|
||||
wire div_divisor_ready;
|
||||
wire [31:0] div_dividend_data;
|
||||
wire div_dividend_valid;
|
||||
wire div_dividend_ready;
|
||||
wire div_dout_valid;
|
||||
wire [63:0] div_dout_data;
|
||||
//divu
|
||||
wire [31:0] divu_divisor_data;
|
||||
wire divu_divisor_valid;
|
||||
wire divu_divisor_ready;
|
||||
wire [31:0] divu_dividend_data;
|
||||
wire divu_dividend_valid;
|
||||
wire divu_dividend_ready;
|
||||
wire divu_dout_valid;
|
||||
wire [63:0] divu_dout_data;
|
||||
|
||||
assign es_result = is_div_mod ? div_mod_result : es_alu_result;
|
||||
|
||||
assign es_to_ms_bus = {br_target , //120:89
|
||||
@@ -274,6 +275,32 @@ module exe_stage(
|
||||
end
|
||||
end
|
||||
|
||||
//div
|
||||
div div(
|
||||
.aclk (clk ),
|
||||
.s_axis_divisor_tdata (div_divisor_data ),
|
||||
.s_axis_divisor_tvalid (div_divisor_valid ),
|
||||
.s_axis_divisor_tready (div_divisor_ready ),
|
||||
.s_axis_dividend_tdata (div_dividend_data ),
|
||||
.s_axis_dividend_tvalid (div_dividend_valid ),
|
||||
.s_axis_dividend_tready (div_dividend_ready ),
|
||||
.m_axis_dout_tvalid (div_dout_valid ),
|
||||
.m_axis_dout_tdata (div_dout_data )
|
||||
);
|
||||
|
||||
//divu
|
||||
divu divu(
|
||||
.aclk (clk ),
|
||||
.s_axis_divisor_tdata (divu_divisor_data ),
|
||||
.s_axis_divisor_tvalid (divu_divisor_valid ),
|
||||
.s_axis_divisor_tready (divu_divisor_ready ),
|
||||
.s_axis_dividend_tdata (divu_dividend_data ),
|
||||
.s_axis_dividend_tvalid (divu_dividend_valid),
|
||||
.s_axis_dividend_tready (divu_dividend_ready),
|
||||
.m_axis_dout_tvalid (divu_dout_valid ),
|
||||
.m_axis_dout_tdata (divu_dout_data )
|
||||
);
|
||||
|
||||
assign div_divisor_valid = div_divisor_valid_r;
|
||||
assign div_dividend_valid = div_dividend_valid_r;
|
||||
assign divu_divisor_valid = divu_divisor_valid_r;
|
||||
|
||||
Reference in New Issue
Block a user