OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 327 to Rev 328
    Reverse comparison

Rev 327 → Rev 328

/trunk/or1200/rtl/verilog/sprs.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.9 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
// Revision 1.8 2001/10/14 13:12:10 lampret
// MP3 version.
//
71,7 → 74,7
clk, rst,
 
// Internal CPU interface
flag, addrbase, addrofs, dat_i, alu_op, branch_op,
flagforw, flag_we, flag, addrbase, addrofs, dat_i, alu_op, branch_op,
epcr, eear, esr, except_start, except_started,
to_wbmux, epcr_we, eear_we, esr_we, pc_we, sr,
spr_dat_cfgr, spr_dat_rf, spr_dat_pc,
97,7 → 100,9
//
input clk; // Clock
input rst; // Reset
input flag; // From ALU
output flag; // SR[F]
input flagforw; // From ALU
input flag_we; // From ALU
input [width-1:0] addrbase; // SPR base address
input [15:0] addrofs; // SPR offset
input [width-1:0] dat_i; // SPR write data
273,6 → 278,11
({{32-`SR_WIDTH{1'b0}},esr} & {32{read_spr & esr_sel}});
 
//
// Flag alias
//
assign flag = sr[`SR_F];
 
//
// Supervision register
//
always @(posedge clk or posedge rst)
296,6 → 306,14
`endif
sr <= #1 to_sr;
end
else if (flag_we) begin
`ifdef OR1200_VERBOSE
// synopsys translate_off
$display(" INFO: setting SR[F] bit: %b", flagforw);
// synopsys translate_on
`endif
sr[`SR_F] <= #1 flagforw;
end
 
//
// MTSPR/MFSPR interface
/trunk/or1200/rtl/verilog/id.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.9 2001/11/10 03:43:57 lampret
// Fixed exceptions.
//
// Revision 1.8 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
72,7 → 75,7
 
// Internal i/f
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, rf_rda, rf_rdb, alu_op, shrot_op, comp_op, rf_addrw, rfwb_op,
wb_insn, simm, branch_addrofs, lsu_addrofs, sel_a, sel_b, lsu_op,
multicycle, spr_addrimm, wbforw_valid, sig_syscall, sig_trap,
force_dslot_fetch, id_macrc_op, ex_macrc_op
92,6 → 95,8
output [`REGFILE_ADDR_WIDTH-1:0] rf_addrw;
output [`REGFILE_ADDR_WIDTH-1:0] rf_addra;
output [`REGFILE_ADDR_WIDTH-1:0] rf_addrb;
output rf_rda;
output rf_rdb;
output [`ALUOP_WIDTH-1:0] alu_op;
output [`SHROTOP_WIDTH-1:0] shrot_op;
output [`RFWBOP_WIDTH-1:0] rfwb_op;
143,6 → 148,8
//
assign rf_addra = if_insn[20:16];
assign rf_addrb = if_insn[15:11];
assign rf_rda = if_insn[31];
assign rf_rdb = if_insn[30];
 
//
// Force fetch of delay slot instruction when jump/branch is preceeded by load/store
/trunk/or1200/rtl/verilog/operandmuxes.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.8 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
// Revision 1.7 2001/10/14 13:12:09 lampret
// MP3 version.
//
68,7 → 71,7
clk, rst,
 
// Internal i/f
ex_freeze, rf_dataa, rf_datab, ex_forw, wb_forw,
id_freeze, ex_freeze, rf_dataa, rf_datab, ex_forw, wb_forw,
simm, sel_a, sel_b, operand_a, operand_b, muxed_b
);
 
79,6 → 82,7
//
input clk;
input rst;
input id_freeze;
input ex_freeze;
input [width-1:0] rf_dataa;
input [width-1:0] rf_datab;
98,15 → 102,23
reg [width-1:0] operand_b;
reg [width-1:0] muxed_a;
reg [width-1:0] muxed_b;
reg saved_a;
reg saved_b;
 
//
// Operand A register
//
always @(posedge clk or posedge rst) begin
if (rst)
if (rst) begin
operand_a <= #1 32'd0;
else if (!ex_freeze)
saved_a <= #1 1'b0;
end else if (!ex_freeze && id_freeze && !saved_a) begin
operand_a <= #1 muxed_a;
saved_a <= #1 1'b1;
end else if (!ex_freeze && !saved_a) begin
operand_a <= #1 muxed_a;
end else if (!ex_freeze && !id_freeze)
saved_a <= #1 1'b0;
end
 
//
113,10 → 125,16
// Operand B register
//
always @(posedge clk or posedge rst) begin
if (rst)
if (rst) begin
operand_b <= #1 32'd0;
else if (!ex_freeze)
saved_b <= #1 1'b0;
end else if (!ex_freeze && id_freeze && !saved_b) begin
operand_b <= #1 muxed_b;
saved_b <= #1 1'b1;
end else if (!ex_freeze && !saved_b) begin
operand_b <= #1 muxed_b;
end else if (!ex_freeze && !id_freeze)
saved_b <= #1 1'b0;
end
 
//
/trunk/or1200/rtl/verilog/defines.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.12 2001/11/10 03:43:57 lampret
// Fixed exceptions.
//
// Revision 1.11 2001/11/02 18:57:14 lampret
// Modified virtual silicon instantiations.
//
88,7 → 91,7
`define VCD_DUMP
 
// Verbose
//`define OR1200_VERBOSE
`define OR1200_VERBOSE
 
//
// Data cache not implemented
277,7 → 280,7
`define EXCEPT_RESET `EXCEPT_WIDTH'h1
`define EXCEPT_NONE `EXCEPT_WIDTH'h0
 
`define SR_WIDTH 9
`define SR_WIDTH 10
// SR bits (no CID)
`define SR_SUPV 0
`define SR_EXR 1
287,7 → 290,8
`define SR_DME 5
`define SR_IME 6
`define SR_LEE 7
`define SR_CF 8
`define SR_CE 8
`define SR_F 9
 
// Access types
`define ACCESS_WIDTH 2
/trunk/or1200/rtl/verilog/alu.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.9 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
// Revision 1.8 2001/10/19 23:28:45 lampret
// Fixed some synthesis warnings. Configured with caches and MMUs.
//
66,7 → 69,7
// synopsys translate_on
`include "defines.v"
 
module alu(clk, rst, a, b, mult_mac_result, macrc_op, alu_op, shrot_op, comp_op, result, flag);
module alu(clk, rst, a, b, mult_mac_result, macrc_op, alu_op, shrot_op, comp_op, result, flagforw, flag_we);
 
parameter width = `OPERAND_WIDTH;
 
83,7 → 86,8
input [`SHROTOP_WIDTH-1:0] shrot_op;
input [`COMPOP_WIDTH-1:0] comp_op;
output [width-1:0] result;
output flag;
output flagforw;
output flag_we;
 
//
// Internal wires and regs
92,7 → 96,6
reg [width-1:0] shifted_rotated;
reg flagforw;
reg flag_we;
reg flag;
integer d1;
integer d2;
wire [width-1:0] comp_a;
272,20 → 275,4
end
`endif
 
//
// Flag bit
//
always @(posedge clk or posedge rst) begin
if (rst)
flag <= #1 1'b0;
else if (flag_we) begin
`ifdef OR1200_VERBOSE
// synopsys translate_off
$display("COMPARE: comp_a:%h comp_b:%h a_eq_b=%b a_lt_b=%b", comp_a, comp_b, a_eq_b, a_lt_b);
// synopsys translate_on
`endif
flag <= #1 flagforw;
end
end
 
endmodule
/trunk/or1200/rtl/verilog/cpu.v
45,6 → 45,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.11 2001/11/10 03:43:57 lampret
// Fixed exceptions.
//
// Revision 1.10 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
186,6 → 189,8
wire [aw-1:0] rf_addrw;
wire [aw-1:0] rf_addra;
wire [aw-1:0] rf_addrb;
wire rf_rda;
wire rf_rdb;
wire [dw-1:0] simm;
wire [dw-1:2] branch_addrofs;
wire [`ALUOP_WIDTH-1:0] alu_op;
217,6 → 222,8
wire except_flushpipe;
wire branch_taken;
wire flag;
wire flagforw;
wire flag_we;
wire lsu_stall;
wire branch_stall;
wire epcr_we;
363,6 → 370,8
.branch_op(branch_op),
.rf_addra(rf_addra),
.rf_addrb(rf_addrb),
.rf_rda(rf_rda),
.rf_rdb(rf_rdb),
.alu_op(alu_op),
.shrot_op(shrot_op),
.comp_op(comp_op),
414,8 → 423,10
.we(rfwb_op[0]),
.except_flushpipe(except_flushpipe),
.addra(rf_addra),
.rda(rf_rda),
.dataa(rf_dataa),
.addrb(rf_addrb),
.rdb(rf_rdb),
.datab(rf_datab),
.spr_cs(spr_cs[`SPR_GROUP_SYS]),
.spr_write(spr_we),
430,6 → 441,7
operandmuxes operandmuxes(
.clk(clk),
.rst(rst),
.id_freeze(id_freeze),
.ex_freeze(ex_freeze),
.rf_dataa(rf_dataa),
.rf_datab(rf_datab),
457,7 → 469,8
.shrot_op(shrot_op),
.comp_op(comp_op),
.result(alu_dataout),
.flag(flag)
.flagforw(flagforw),
.flag_we(flag_we)
);
 
//
485,6 → 498,8
.addrofs(spr_addrimm),
.dat_i(operand_b),
.alu_op(alu_op),
.flagforw(flagforw),
.flag_we(flag_we),
.flag(flag),
.to_wbmux(sprs_dataout),
 
/trunk/or1200/rtl/verilog/rf.v
44,6 → 44,9
// CVS Revision History
//
// $Log: not supported by cvs2svn $
// Revision 1.10 2001/11/10 03:43:57 lampret
// Fixed exceptions.
//
// Revision 1.9 2001/10/21 17:57:16 lampret
// Removed params from generic_XX.v. Added translate_off/on in sprs.v and id.v. Removed spr_addr from dc.v and ic.v. Fixed CR+LF.
//
77,7 → 80,7
addrw, dataw, we, except_flushpipe,
 
// Read i/f
id_freeze, addra, addrb, dataa, datab,
id_freeze, addra, addrb, dataa, datab, rda, rdb,
 
// Debug
spr_cs, spr_write, spr_addr, spr_dat_i, spr_dat_o
112,6 → 115,8
input [aw-1:0] addrb;
output [dw-1:0] dataa;
output [dw-1:0] datab;
input rda;
input rdb;
 
//
// SPR access for debugging purposes
134,6 → 139,8
wire [dw-1:0] rf_dataw;
wire rf_we;
wire spr_valid;
wire rf_ena;
wire rf_enb;
 
//
// SPR access is valid when spr_cs is asserted and
177,6 → 184,18
assign rf_we = ((spr_valid & spr_write) | we) & ~except_flushpipe;
 
//
// CS RF A asserted when instruction reads operand A and ID stage
// is not stalled
//
assign rf_ena = rda & ~id_freeze;
 
//
// CS RF B asserted when instruction reads operand B and ID stage
// is not stalled
//
assign rf_enb = rdb & ~id_freeze;
 
//
// Stores operand from RF_A into temp reg when pipeline is frozen
//
always @(posedge clk or posedge rst)
209,7 → 228,7
// Port A
.clk_a(clk),
.rst_a(rst),
.ce_a(1'b1),
.ce_a(rf_ena),
// .we_a(1'b0),
.oe_a(1'b1),
.addr_a(rf_addra),
234,7 → 253,7
// Port A
.clk_a(clk),
.rst_a(rst),
.ce_a(1'b1),
.ce_a(rf_enb),
// .we_a(1'b0),
.oe_a(1'b1),
.addr_a(addrb),

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.