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

Subversion Repositories next186

[/] [next186/] [trunk/] [Next186_BIU_2T_delayread.v] - Diff between revs 4 and 19

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 4 Rev 19
Line 85... Line 85...
        input IFETCH,
        input IFETCH,
        input FLUSH,
        input FLUSH,
        input MREQ,
        input MREQ,
        input WR,
        input WR,
        input WORD,
        input WORD,
        input [19:0]ADDR,
        input [20:0]ADDR,
        input [19:0]IADDR,
        input [20:0]IADDR,
        output reg CE186,       // CPU clock enable
        output reg CE186,       // CPU clock enable
        input [31:0]RAM_DIN,
        input [31:0]RAM_DIN,
        output [31:0]RAM_DOUT,
        output [31:0]RAM_DOUT,
        output [17:0]RAM_ADDR,
        output [18:0]RAM_ADDR,
        output RAM_MREQ,
        output RAM_MREQ,
        output wire[3:0]RAM_WMASK,
        output wire[3:0]RAM_WMASK,
        output reg [15:0]DOUT,
        output reg [15:0]DOUT,
        input [15:0]DIN,
        input [15:0]DIN,
        input CE                // BIU clock enable
        input CE,               // BIU clock enable
 
        output reg data_bound,
 
        input [1:0]WSEL, // normally {~ADDR[0], ADDR[0]}
 
        output reg RAM_RD,
 
        output reg RAM_WR
);
);
 
 
        reg [31:0]queue[3:0];
        reg [31:0]queue[3:0];
        reg [1:0]STATE = 0;
        reg [1:0]STATE = 0;
        reg OLDSTATE = 1;
        reg OLDSTATE = 1;
        reg [3:0]qpos = 0;
        reg [3:0]qpos = 0;
        reg [4:0]qsize = 0;
        reg [4:0]qsize = 0;
        reg [1:0]rpos = 0;
        reg [1:0]rpos = 0;
        reg [17:0]piaddr = 0;
        reg [18:0]piaddr = 0;
        reg [7:0]exdata = 0;
        reg [7:0]exdata = 0;
        reg rdi = 0;
        reg rdi = 0;
        reg data_bound;
 
 
 
        reg [1:0]NEXTSTATE;
        reg [1:0]NEXTSTATE;
        reg RAM_RD;
 
        reg RAM_WR;
 
        reg sflush;
        reg sflush;
        wire [4:0]newqsize = sflush ? -IADDR[1:0] : CE186 && IFETCH && ~FLUSH ? qsize - ISIZE : qsize;
        wire [4:0]newqsize = sflush ? -IADDR[1:0] : CE186 && IFETCH && ~FLUSH ? qsize - ISIZE : qsize;
        wire qnofull = qsize < 13;
        wire qnofull = qsize < 13;
        reg iread;// = (qnofull && !RAM_RD && !RAM_WR) || sflush;
        reg iread;// = (qnofull && !RAM_RD && !RAM_WR) || sflush;
        wire [3:0]nqpos = (FLUSH && IFETCH) ? {2'b00, IADDR[1:0]} : (qpos + ISIZE);
        wire [3:0]nqpos = (FLUSH && IFETCH) ? {2'b00, IADDR[1:0]} : (qpos + ISIZE);
        wire [17:0]MIADDR = sflush ? IADDR[19:2] : piaddr;
        wire [18:0]MIADDR = sflush ? IADDR[20:2] : piaddr;
        wire split = (&ADDR[1:0]) && WORD; // data between dwords
        wire split = (&ADDR[1:0]) && WORD; // data between dwords
        wire [15:0]DSWAP = ADDR[0] ? {DIN[7:0], DIN[15:8]} : DIN;
        wire [15:0]DSWAP = {WSEL[1] ? DIN[15:8] : DIN[7:0], WSEL[0] ? DIN[15:8] : DIN[7:0]};        //ADDR[0] ? {DIN[7:0], DIN[15:8]} : DIN;
        wire [1:0]a1 = nqpos[3:2] + 1;
        wire [1:0]a1 = nqpos[3:2] + 1;
        wire [1:0]a2 = nqpos[3:2] + 2;
        wire [1:0]a2 = nqpos[3:2] + 2;
        wire [31:0]q1 = rdi && (a1 == rpos) ? RAM_DIN : queue[a1];
        wire [31:0]q1 = rdi && (a1 == rpos) ? RAM_DIN : queue[a1];
        wire [7:0]q2 = rdi && (a2 == rpos) ? RAM_DIN[7:0] : queue[a2][7:0];
        wire [7:0]q2 = rdi && (a2 == rpos) ? RAM_DIN[7:0] : queue[a2][7:0];
 
 
        assign INSTR = {q2, q1, queue[nqpos[3:2]]} >> {nqpos[1:0], 3'b000};
        assign INSTR = {q2, q1, queue[nqpos[3:2]]} >> {nqpos[1:0], 3'b000};
//      assign DOUT = split ? {RAM_DIN[7:0], exdata} : (RAM_DIN >> {ADDR[1:0], 3'b000}); 
//      assign DOUT = split ? {RAM_DIN[7:0], exdata} : (RAM_DIN >> {ADDR[1:0], 3'b000}); 
        assign RAM_DOUT = {DSWAP, DSWAP};
        assign RAM_DOUT = {DSWAP, DSWAP};
        assign RAM_MREQ = iread || RAM_RD || RAM_WR;
        assign RAM_MREQ = iread || RAM_RD || RAM_WR;
        assign RAM_ADDR = iread ? MIADDR : ADDR[19:2] + data_bound;
        assign RAM_ADDR = iread ? MIADDR : ADDR[20:2] + data_bound;
        assign RAM_WMASK = data_bound ? {3'b000, RAM_WR} : {2'b00, WORD & RAM_WR, RAM_WR} << ADDR[1:0];
        assign RAM_WMASK = data_bound ? {3'b000, RAM_WR} : {2'b00, WORD & RAM_WR, RAM_WR} << ADDR[1:0];
 
 
        always @(*) begin
        always @(*) begin
                RAM_RD = 0;
                RAM_RD = 0;
                RAM_WR = 0;
                RAM_WR = 0;

powered by: WebSVN 2.1.0

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