Files
Toooba/src_SSITH_P3/Verilog_RTL/module_brAddrCalc.v
rsnikhil 113f888d37 Added support for 'debug_external_interrupt_req'
New method 'debug_external_interrupt_req' to support emulation of a
debug module starts at P3_Core interface and is plumbed all the way in
to the CSR register MIP as interrupt [14].  The corresponding MIE[14]
is always 1, so it is never masked. Still todo: should not be masked
by MSTATUS interrupt-enables either.  Also expanded
interrupt-detection logic, mcause etc. to extend up to interrupt 14.

Builds in standalone mode, runs ISA tests.

Builds in src_SSITH_P3, generating RTL.
2019-04-01 12:26:54 -04:00

87 lines
2.2 KiB
Verilog

//
// Generated by Bluespec Compiler, version 2018.10.beta1 (build e1df8052c, 2018-10-17)
//
//
//
//
// Ports:
// Name I/O size props
// brAddrCalc O 64
// brAddrCalc_pc I 64
// brAddrCalc_val I 64
// brAddrCalc_iType I 5
// brAddrCalc_imm I 64
// brAddrCalc_taken I 1
//
// Combinational paths from inputs to outputs:
// (brAddrCalc_pc,
// brAddrCalc_val,
// brAddrCalc_iType,
// brAddrCalc_imm,
// brAddrCalc_taken) -> brAddrCalc
//
//
`ifdef BSV_ASSIGNMENT_DELAY
`else
`define BSV_ASSIGNMENT_DELAY
`endif
`ifdef BSV_POSITIVE_RESET
`define BSV_RESET_VALUE 1'b1
`define BSV_RESET_EDGE posedge
`else
`define BSV_RESET_VALUE 1'b0
`define BSV_RESET_EDGE negedge
`endif
module module_brAddrCalc(brAddrCalc_pc,
brAddrCalc_val,
brAddrCalc_iType,
brAddrCalc_imm,
brAddrCalc_taken,
brAddrCalc);
// value method brAddrCalc
input [63 : 0] brAddrCalc_pc;
input [63 : 0] brAddrCalc_val;
input [4 : 0] brAddrCalc_iType;
input [63 : 0] brAddrCalc_imm;
input brAddrCalc_taken;
output [63 : 0] brAddrCalc;
// signals for module outputs
reg [63 : 0] brAddrCalc;
// remaining internal signals
wire [63 : 0] brAddrCalc_pc_PLUS_brAddrCalc_imm___d2,
brAddrCalc_val_PLUS_brAddrCalc_imm__q1,
pcPlus4__h27;
// value method brAddrCalc
always@(brAddrCalc_iType or
pcPlus4__h27 or
brAddrCalc_pc_PLUS_brAddrCalc_imm___d2 or
brAddrCalc_val_PLUS_brAddrCalc_imm__q1 or brAddrCalc_taken)
begin
case (brAddrCalc_iType)
5'd8: brAddrCalc = brAddrCalc_pc_PLUS_brAddrCalc_imm___d2;
5'd9:
brAddrCalc = { brAddrCalc_val_PLUS_brAddrCalc_imm__q1[63:1], 1'b0 };
5'd10:
brAddrCalc =
brAddrCalc_taken ?
brAddrCalc_pc_PLUS_brAddrCalc_imm___d2 :
pcPlus4__h27;
default: brAddrCalc = pcPlus4__h27;
endcase
end
// remaining internal signals
assign brAddrCalc_pc_PLUS_brAddrCalc_imm___d2 =
brAddrCalc_pc + brAddrCalc_imm ;
assign brAddrCalc_val_PLUS_brAddrCalc_imm__q1 =
brAddrCalc_val + brAddrCalc_imm ;
assign pcPlus4__h27 = brAddrCalc_pc + 64'd4 ;
endmodule // module_brAddrCalc