Line 61... |
Line 61... |
|
|
// Internal i/f
|
// Internal i/f
|
id_freeze, ex_freeze, wb_freeze, except_flushpipe, if_insn, branch_op,
|
id_freeze, ex_freeze, wb_freeze, except_flushpipe, if_insn, branch_op,
|
rf_addra, rf_addrb, alu_op, shrot_op, comp_op, rf_addrw, rfwb_op,
|
rf_addra, rf_addrb, alu_op, shrot_op, comp_op, rf_addrw, rfwb_op,
|
wb_insn, simm, branch_addrofs, lsu_addrofs, sel_a, sel_b, lsu_op,
|
wb_insn, simm, branch_addrofs, lsu_addrofs, sel_a, sel_b, lsu_op,
|
multicycle, spr_addrimm, wbforw_valid, sig_syscall,
|
multicycle, spr_addrimm, wbforw_valid, sig_syscall, sig_trap,
|
force_dslot_fetch, id_macrc_op, ex_macrc_op
|
force_dslot_fetch, id_macrc_op, ex_macrc_op
|
);
|
);
|
|
|
//
|
//
|
// I/O
|
// I/O
|
Line 94... |
Line 94... |
output [`COMPOP_WIDTH-1:0] comp_op;
|
output [`COMPOP_WIDTH-1:0] comp_op;
|
output [`MULTICYCLE_WIDTH-1:0] multicycle;
|
output [`MULTICYCLE_WIDTH-1:0] multicycle;
|
output [15:0] spr_addrimm;
|
output [15:0] spr_addrimm;
|
input wbforw_valid;
|
input wbforw_valid;
|
output sig_syscall;
|
output sig_syscall;
|
|
output sig_trap;
|
output force_dslot_fetch;
|
output force_dslot_fetch;
|
output id_macrc_op;
|
output id_macrc_op;
|
output ex_macrc_op;
|
output ex_macrc_op;
|
|
|
//
|
//
|
Line 121... |
Line 122... |
reg [`COMPOP_WIDTH-1:0] comp_op;
|
reg [`COMPOP_WIDTH-1:0] comp_op;
|
reg [`MULTICYCLE_WIDTH-1:0] multicycle;
|
reg [`MULTICYCLE_WIDTH-1:0] multicycle;
|
reg imm_signextend;
|
reg imm_signextend;
|
reg [15:0] spr_addrimm;
|
reg [15:0] spr_addrimm;
|
reg sig_syscall;
|
reg sig_syscall;
|
|
reg sig_trap;
|
wire rst_or_except_flushpipe;
|
wire rst_or_except_flushpipe;
|
reg ex_macrc_op;
|
reg ex_macrc_op;
|
|
|
//
|
//
|
// Register file read addresses
|
// Register file read addresses
|
Line 844... |
Line 846... |
// Decode of l.sys
|
// Decode of l.sys
|
//
|
//
|
always @(posedge clk or posedge rst) begin
|
always @(posedge clk or posedge rst) begin
|
if (rst)
|
if (rst)
|
sig_syscall <= #1 1'b0;
|
sig_syscall <= #1 1'b0;
|
else if (!wb_freeze) begin
|
else if (!ex_freeze & id_freeze)
|
|
sig_syscall <= #1 1'b0;
|
|
else if (!ex_freeze) begin
|
`ifdef OR1200_VERBOSE
|
`ifdef OR1200_VERBOSE
|
// synopsys translate_off
|
// synopsys translate_off
|
if (wb_insn[31:24] == {`OR32_XSYNC, 2'b00})
|
if (id_insn[31:23] == {`OR32_XSYNC, 3'b000})
|
$display("Generating sig_syscall");
|
$display("Generating sig_syscall");
|
// synopsys translate_on
|
// synopsys translate_on
|
`endif
|
`endif
|
// sig_syscall <= #1 (wb_insn[31:24] == {`OR32_XSYNC, 2'b00});
|
// sig_syscall <= #1 (id_insn[31:23] == {`OR32_XSYNC, 3'b000});
|
|
end
|
|
end
|
|
|
|
//
|
|
// Decode of l.trap
|
|
//
|
|
always @(posedge clk or posedge rst) begin
|
|
if (rst)
|
|
sig_trap <= #1 1'b0;
|
|
else if (!ex_freeze & id_freeze)
|
|
sig_trap <= #1 1'b0;
|
|
else if (!ex_freeze) begin
|
|
`ifdef OR1200_VERBOSE
|
|
// synopsys translate_off
|
|
if (id_insn[31:23] == {`OR32_XSYNC, 3'b010})
|
|
$display("Generating sig_trap");
|
|
// synopsys translate_on
|
|
`endif
|
|
sig_trap <= #1 (id_insn[31:23] == {`OR32_XSYNC, 3'b010});
|
end
|
end
|
end
|
end
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|