Line 8... |
Line 8... |
// Email: admin@ultra-embedded.com
|
// Email: admin@ultra-embedded.com
|
//
|
//
|
// License: LGPL
|
// License: LGPL
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
//
|
//
|
// Copyright (C) 2011 - 2013 Ultra-Embedded.com
|
// Copyright (C) 2011 - 2014 Ultra-Embedded.com
|
//
|
//
|
// This source file may be used and distributed without
|
// This source file may be used and distributed without
|
// restriction provided that this copyright statement is not
|
// restriction provided that this copyright statement is not
|
// removed from the file and that any derivative work contains
|
// removed from the file and that any derivative work contains
|
// the original copyright notice and the associated disclaimer.
|
// the original copyright notice and the associated disclaimer.
|
Line 46... |
Line 46... |
module altor32_regfile_sim
|
module altor32_regfile_sim
|
(
|
(
|
input clk_i /*verilator public*/,
|
input clk_i /*verilator public*/,
|
input rst_i /*verilator public*/,
|
input rst_i /*verilator public*/,
|
input wr_i /*verilator public*/,
|
input wr_i /*verilator public*/,
|
input [4:0] rs_i /*verilator public*/,
|
input [4:0] ra_i /*verilator public*/,
|
input [4:0] rt_i /*verilator public*/,
|
input [4:0] rb_i /*verilator public*/,
|
input [4:0] rd_i /*verilator public*/,
|
input [4:0] rd_i /*verilator public*/,
|
output reg [31:0] reg_rs_o /*verilator public*/,
|
output reg [31:0] reg_ra_o /*verilator public*/,
|
output reg [31:0] reg_rt_o /*verilator public*/,
|
output reg [31:0] reg_rb_o /*verilator public*/,
|
input [31:0] reg_rd_i /*verilator public*/
|
input [31:0] reg_rd_i /*verilator public*/
|
);
|
);
|
|
|
//-----------------------------------------------------------------
|
//-----------------------------------------------------------------
|
// Params
|
// Params
|
Line 215... |
Line 215... |
if (SUPPORT_32REGS == "ENABLED")
|
if (SUPPORT_32REGS == "ENABLED")
|
begin
|
begin
|
// Asynchronous Register read (Rs & Rd)
|
// Asynchronous Register read (Rs & Rd)
|
always @ *
|
always @ *
|
begin
|
begin
|
case (rs_i)
|
case (ra_i)
|
5'b00000 :
|
5'b00000 :
|
reg_rs_o = 32'h00000000;
|
reg_ra_o = 32'h00000000;
|
5'b00001 :
|
5'b00001 :
|
reg_rs_o = reg_r1_sp;
|
reg_ra_o = reg_r1_sp;
|
5'b00010 :
|
5'b00010 :
|
reg_rs_o = reg_r2_fp;
|
reg_ra_o = reg_r2_fp;
|
5'b00011 :
|
5'b00011 :
|
reg_rs_o = reg_r3;
|
reg_ra_o = reg_r3;
|
5'b00100 :
|
5'b00100 :
|
reg_rs_o = reg_r4;
|
reg_ra_o = reg_r4;
|
5'b00101 :
|
5'b00101 :
|
reg_rs_o = reg_r5;
|
reg_ra_o = reg_r5;
|
5'b00110 :
|
5'b00110 :
|
reg_rs_o = reg_r6;
|
reg_ra_o = reg_r6;
|
5'b00111 :
|
5'b00111 :
|
reg_rs_o = reg_r7;
|
reg_ra_o = reg_r7;
|
5'b01000 :
|
5'b01000 :
|
reg_rs_o = reg_r8;
|
reg_ra_o = reg_r8;
|
5'b01001 :
|
5'b01001 :
|
reg_rs_o = reg_r9_lr;
|
reg_ra_o = reg_r9_lr;
|
5'b01010 :
|
5'b01010 :
|
reg_rs_o = reg_r10;
|
reg_ra_o = reg_r10;
|
5'b01011 :
|
5'b01011 :
|
reg_rs_o = reg_r11;
|
reg_ra_o = reg_r11;
|
5'b01100 :
|
5'b01100 :
|
reg_rs_o = reg_r12;
|
reg_ra_o = reg_r12;
|
5'b01101 :
|
5'b01101 :
|
reg_rs_o = reg_r13;
|
reg_ra_o = reg_r13;
|
5'b01110 :
|
5'b01110 :
|
reg_rs_o = reg_r14;
|
reg_ra_o = reg_r14;
|
5'b01111 :
|
5'b01111 :
|
reg_rs_o = reg_r15;
|
reg_ra_o = reg_r15;
|
5'b10000 :
|
5'b10000 :
|
reg_rs_o = reg_r16;
|
reg_ra_o = reg_r16;
|
5'b10001 :
|
5'b10001 :
|
reg_rs_o = reg_r17;
|
reg_ra_o = reg_r17;
|
5'b10010 :
|
5'b10010 :
|
reg_rs_o = reg_r18;
|
reg_ra_o = reg_r18;
|
5'b10011 :
|
5'b10011 :
|
reg_rs_o = reg_r19;
|
reg_ra_o = reg_r19;
|
5'b10100 :
|
5'b10100 :
|
reg_rs_o = reg_r20;
|
reg_ra_o = reg_r20;
|
5'b10101 :
|
5'b10101 :
|
reg_rs_o = reg_r21;
|
reg_ra_o = reg_r21;
|
5'b10110 :
|
5'b10110 :
|
reg_rs_o = reg_r22;
|
reg_ra_o = reg_r22;
|
5'b10111 :
|
5'b10111 :
|
reg_rs_o = reg_r23;
|
reg_ra_o = reg_r23;
|
5'b11000 :
|
5'b11000 :
|
reg_rs_o = reg_r24;
|
reg_ra_o = reg_r24;
|
5'b11001 :
|
5'b11001 :
|
reg_rs_o = reg_r25;
|
reg_ra_o = reg_r25;
|
5'b11010 :
|
5'b11010 :
|
reg_rs_o = reg_r26;
|
reg_ra_o = reg_r26;
|
5'b11011 :
|
5'b11011 :
|
reg_rs_o = reg_r27;
|
reg_ra_o = reg_r27;
|
5'b11100 :
|
5'b11100 :
|
reg_rs_o = reg_r28;
|
reg_ra_o = reg_r28;
|
5'b11101 :
|
5'b11101 :
|
reg_rs_o = reg_r29;
|
reg_ra_o = reg_r29;
|
5'b11110 :
|
5'b11110 :
|
reg_rs_o = reg_r30;
|
reg_ra_o = reg_r30;
|
5'b11111 :
|
5'b11111 :
|
reg_rs_o = reg_r31;
|
reg_ra_o = reg_r31;
|
default :
|
default :
|
reg_rs_o = 32'h00000000;
|
reg_ra_o = 32'h00000000;
|
endcase
|
endcase
|
|
|
case (rt_i)
|
case (rb_i)
|
5'b00000 :
|
5'b00000 :
|
reg_rt_o = 32'h00000000;
|
reg_rb_o = 32'h00000000;
|
5'b00001 :
|
5'b00001 :
|
reg_rt_o = reg_r1_sp;
|
reg_rb_o = reg_r1_sp;
|
5'b00010 :
|
5'b00010 :
|
reg_rt_o = reg_r2_fp;
|
reg_rb_o = reg_r2_fp;
|
5'b00011 :
|
5'b00011 :
|
reg_rt_o = reg_r3;
|
reg_rb_o = reg_r3;
|
5'b00100 :
|
5'b00100 :
|
reg_rt_o = reg_r4;
|
reg_rb_o = reg_r4;
|
5'b00101 :
|
5'b00101 :
|
reg_rt_o = reg_r5;
|
reg_rb_o = reg_r5;
|
5'b00110 :
|
5'b00110 :
|
reg_rt_o = reg_r6;
|
reg_rb_o = reg_r6;
|
5'b00111 :
|
5'b00111 :
|
reg_rt_o = reg_r7;
|
reg_rb_o = reg_r7;
|
5'b01000 :
|
5'b01000 :
|
reg_rt_o = reg_r8;
|
reg_rb_o = reg_r8;
|
5'b01001 :
|
5'b01001 :
|
reg_rt_o = reg_r9_lr;
|
reg_rb_o = reg_r9_lr;
|
5'b01010 :
|
5'b01010 :
|
reg_rt_o = reg_r10;
|
reg_rb_o = reg_r10;
|
5'b01011 :
|
5'b01011 :
|
reg_rt_o = reg_r11;
|
reg_rb_o = reg_r11;
|
5'b01100 :
|
5'b01100 :
|
reg_rt_o = reg_r12;
|
reg_rb_o = reg_r12;
|
5'b01101 :
|
5'b01101 :
|
reg_rt_o = reg_r13;
|
reg_rb_o = reg_r13;
|
5'b01110 :
|
5'b01110 :
|
reg_rt_o = reg_r14;
|
reg_rb_o = reg_r14;
|
5'b01111 :
|
5'b01111 :
|
reg_rt_o = reg_r15;
|
reg_rb_o = reg_r15;
|
5'b10000 :
|
5'b10000 :
|
reg_rt_o = reg_r16;
|
reg_rb_o = reg_r16;
|
5'b10001 :
|
5'b10001 :
|
reg_rt_o = reg_r17;
|
reg_rb_o = reg_r17;
|
5'b10010 :
|
5'b10010 :
|
reg_rt_o = reg_r18;
|
reg_rb_o = reg_r18;
|
5'b10011 :
|
5'b10011 :
|
reg_rt_o = reg_r19;
|
reg_rb_o = reg_r19;
|
5'b10100 :
|
5'b10100 :
|
reg_rt_o = reg_r20;
|
reg_rb_o = reg_r20;
|
5'b10101 :
|
5'b10101 :
|
reg_rt_o = reg_r21;
|
reg_rb_o = reg_r21;
|
5'b10110 :
|
5'b10110 :
|
reg_rt_o = reg_r22;
|
reg_rb_o = reg_r22;
|
5'b10111 :
|
5'b10111 :
|
reg_rt_o = reg_r23;
|
reg_rb_o = reg_r23;
|
5'b11000 :
|
5'b11000 :
|
reg_rt_o = reg_r24;
|
reg_rb_o = reg_r24;
|
5'b11001 :
|
5'b11001 :
|
reg_rt_o = reg_r25;
|
reg_rb_o = reg_r25;
|
5'b11010 :
|
5'b11010 :
|
reg_rt_o = reg_r26;
|
reg_rb_o = reg_r26;
|
5'b11011 :
|
5'b11011 :
|
reg_rt_o = reg_r27;
|
reg_rb_o = reg_r27;
|
5'b11100 :
|
5'b11100 :
|
reg_rt_o = reg_r28;
|
reg_rb_o = reg_r28;
|
5'b11101 :
|
5'b11101 :
|
reg_rt_o = reg_r29;
|
reg_rb_o = reg_r29;
|
5'b11110 :
|
5'b11110 :
|
reg_rt_o = reg_r30;
|
reg_rb_o = reg_r30;
|
5'b11111 :
|
5'b11111 :
|
reg_rt_o = reg_r31;
|
reg_rb_o = reg_r31;
|
default :
|
default :
|
reg_rt_o = 32'h00000000;
|
reg_rb_o = 32'h00000000;
|
endcase
|
endcase
|
end
|
end
|
end
|
end
|
else
|
else
|
begin
|
begin
|
// Asynchronous Register read (Rs & Rd)
|
// Asynchronous Register read (Rs & Rd)
|
always @ *
|
always @ *
|
begin
|
begin
|
case (rs_i)
|
case (ra_i)
|
5'b00000 :
|
5'b00000 :
|
reg_rs_o = 32'h00000000;
|
reg_ra_o = 32'h00000000;
|
5'b00001 :
|
5'b00001 :
|
reg_rs_o = reg_r1_sp;
|
reg_ra_o = reg_r1_sp;
|
5'b00010 :
|
5'b00010 :
|
reg_rs_o = reg_r2_fp;
|
reg_ra_o = reg_r2_fp;
|
5'b00011 :
|
5'b00011 :
|
reg_rs_o = reg_r3;
|
reg_ra_o = reg_r3;
|
5'b00100 :
|
5'b00100 :
|
reg_rs_o = reg_r4;
|
reg_ra_o = reg_r4;
|
5'b00101 :
|
5'b00101 :
|
reg_rs_o = reg_r5;
|
reg_ra_o = reg_r5;
|
5'b00110 :
|
5'b00110 :
|
reg_rs_o = reg_r6;
|
reg_ra_o = reg_r6;
|
5'b00111 :
|
5'b00111 :
|
reg_rs_o = reg_r7;
|
reg_ra_o = reg_r7;
|
5'b01000 :
|
5'b01000 :
|
reg_rs_o = reg_r8;
|
reg_ra_o = reg_r8;
|
5'b01001 :
|
5'b01001 :
|
reg_rs_o = reg_r9_lr;
|
reg_ra_o = reg_r9_lr;
|
5'b01010 :
|
5'b01010 :
|
reg_rs_o = reg_r10;
|
reg_ra_o = reg_r10;
|
5'b01011 :
|
5'b01011 :
|
reg_rs_o = reg_r11;
|
reg_ra_o = reg_r11;
|
5'b01100 :
|
5'b01100 :
|
reg_rs_o = reg_r12;
|
reg_ra_o = reg_r12;
|
5'b01101 :
|
5'b01101 :
|
reg_rs_o = reg_r13;
|
reg_ra_o = reg_r13;
|
5'b01110 :
|
5'b01110 :
|
reg_rs_o = reg_r14;
|
reg_ra_o = reg_r14;
|
5'b01111 :
|
5'b01111 :
|
reg_rs_o = reg_r15;
|
reg_ra_o = reg_r15;
|
default :
|
default :
|
reg_rs_o = 32'h00000000;
|
reg_ra_o = 32'h00000000;
|
endcase
|
endcase
|
|
|
case (rt_i)
|
case (rb_i)
|
5'b00000 :
|
5'b00000 :
|
reg_rt_o = 32'h00000000;
|
reg_rb_o = 32'h00000000;
|
5'b00001 :
|
5'b00001 :
|
reg_rt_o = reg_r1_sp;
|
reg_rb_o = reg_r1_sp;
|
5'b00010 :
|
5'b00010 :
|
reg_rt_o = reg_r2_fp;
|
reg_rb_o = reg_r2_fp;
|
5'b00011 :
|
5'b00011 :
|
reg_rt_o = reg_r3;
|
reg_rb_o = reg_r3;
|
5'b00100 :
|
5'b00100 :
|
reg_rt_o = reg_r4;
|
reg_rb_o = reg_r4;
|
5'b00101 :
|
5'b00101 :
|
reg_rt_o = reg_r5;
|
reg_rb_o = reg_r5;
|
5'b00110 :
|
5'b00110 :
|
reg_rt_o = reg_r6;
|
reg_rb_o = reg_r6;
|
5'b00111 :
|
5'b00111 :
|
reg_rt_o = reg_r7;
|
reg_rb_o = reg_r7;
|
5'b01000 :
|
5'b01000 :
|
reg_rt_o = reg_r8;
|
reg_rb_o = reg_r8;
|
5'b01001 :
|
5'b01001 :
|
reg_rt_o = reg_r9_lr;
|
reg_rb_o = reg_r9_lr;
|
5'b01010 :
|
5'b01010 :
|
reg_rt_o = reg_r10;
|
reg_rb_o = reg_r10;
|
5'b01011 :
|
5'b01011 :
|
reg_rt_o = reg_r11;
|
reg_rb_o = reg_r11;
|
5'b01100 :
|
5'b01100 :
|
reg_rt_o = reg_r12;
|
reg_rb_o = reg_r12;
|
5'b01101 :
|
5'b01101 :
|
reg_rt_o = reg_r13;
|
reg_rb_o = reg_r13;
|
5'b01110 :
|
5'b01110 :
|
reg_rt_o = reg_r14;
|
reg_rb_o = reg_r14;
|
5'b01111 :
|
5'b01111 :
|
reg_rt_o = reg_r15;
|
reg_rb_o = reg_r15;
|
default :
|
default :
|
reg_rt_o = 32'h00000000;
|
reg_rb_o = 32'h00000000;
|
endcase
|
endcase
|
end
|
end
|
end
|
end
|
endgenerate
|
endgenerate
|
|
|