Line 183... |
Line 183... |
// case of data abort
|
// case of data abort
|
wire [31:0] read_data_filtered1;
|
wire [31:0] read_data_filtered1;
|
wire [31:0] read_data_filtered;
|
wire [31:0] read_data_filtered;
|
wire [31:0] read_data_filtered_c;
|
wire [31:0] read_data_filtered_c;
|
reg [31:0] read_data_filtered_r = 'd0;
|
reg [31:0] read_data_filtered_r = 'd0;
|
reg [3:0] load_rd_r = 'd0;
|
reg [5:0] load_rd_r = 'd0;
|
wire [3:0] load_rd_c;
|
wire [5:0] load_rd_c;
|
|
|
wire write_enable_nxt;
|
wire write_enable_nxt;
|
wire daddress_valid_nxt;
|
wire daddress_valid_nxt;
|
wire iaddress_valid_nxt;
|
wire iaddress_valid_nxt;
|
wire priviledged_nxt;
|
wire priviledged_nxt;
|
Line 481... |
Line 481... |
|
|
|
|
// ========================================================
|
// ========================================================
|
// Use read value from data memory instead of from register
|
// Use read value from data memory instead of from register
|
// ========================================================
|
// ========================================================
|
assign rn = i_rn_use_read && i_rn_sel == load_rd_c ? read_data_filtered_c : reg_bank_rn;
|
assign rn = i_rn_use_read && i_rn_sel == load_rd_c[3:0] && status_bits_mode == load_rd_c[5:4] ? read_data_filtered_c : reg_bank_rn;
|
assign rm = i_rm_use_read && i_rm_sel == load_rd_c ? read_data_filtered_c : reg_bank_rm;
|
assign rm = i_rm_use_read && i_rm_sel == load_rd_c[3:0] && status_bits_mode == load_rd_c[5:4] ? read_data_filtered_c : reg_bank_rm;
|
assign rs = i_rs_use_read && i_rs_sel == load_rd_c ? read_data_filtered_c : reg_bank_rs;
|
assign rs = i_rs_use_read && i_rs_sel == load_rd_c[3:0] && status_bits_mode == load_rd_c[5:4] ? read_data_filtered_c : reg_bank_rs;
|
assign rd = i_rd_use_read && i_rs_sel == load_rd_c ? read_data_filtered_c : reg_bank_rd;
|
assign rd = i_rd_use_read && i_rs_sel == load_rd_c[3:0] && status_bits_mode == load_rd_c[5:4] ? read_data_filtered_c : reg_bank_rd;
|
|
|
|
|
always@( posedge i_clk )
|
always@( posedge i_clk )
|
if ( i_wb_read_data_valid )
|
if ( i_wb_read_data_valid )
|
begin
|
begin
|
read_data_filtered_r <= read_data_filtered;
|
read_data_filtered_r <= read_data_filtered;
|
load_rd_r <= i_wb_load_rd[3:0];
|
load_rd_r <= {i_wb_load_rd[6:5], i_wb_load_rd[3:0]};
|
end
|
end
|
|
|
assign read_data_filtered_c = i_wb_read_data_valid ? read_data_filtered : read_data_filtered_r;
|
assign read_data_filtered_c = i_wb_read_data_valid ? read_data_filtered : read_data_filtered_r;
|
assign load_rd_c = i_wb_read_data_valid ? i_wb_load_rd[3:0] : load_rd_r;
|
|
|
// the register number and the mode
|
|
assign load_rd_c = i_wb_read_data_valid ? {i_wb_load_rd[6:5], i_wb_load_rd[3:0]} : load_rd_r;
|
|
|
|
|
// ========================================================
|
// ========================================================
|
// Set mode for the destination registers of a mem read
|
// Set mode for the destination registers of a mem read
|
// ========================================================
|
// ========================================================
|