Line 508... |
Line 508... |
// for single phase clock: 1 wait state in read op always required!
|
// for single phase clock: 1 wait state in read op always required!
|
|
|
reg [1:0] DACK = 0;
|
reg [1:0] DACK = 0;
|
|
|
wire WHIT = 1;
|
wire WHIT = 1;
|
wire DHIT = !((RD||WR) && DACK!=1); // the WR operatio does not need ws. in this config.
|
wire DHIT = !((RD
|
|
`ifdef __RMW_CYCLE__
|
|
||WR // worst code ever! but it is 3:12am...
|
|
`endif
|
|
) && DACK!=1); // the WR operatio does not need ws. in this config.
|
|
|
always@(posedge CLK) // stage #1.0
|
always@(posedge CLK) // stage #1.0
|
begin
|
begin
|
DACK <= RES ? 0 : DACK ? DACK-1 : (RD||WR) ? 1 : 0; // wait-states
|
DACK <= RES ? 0 : DACK ? DACK-1 : (RD
|
|
`ifdef __RMW_CYCLE__
|
|
||WR // 2nd worst code ever!
|
|
`endif
|
|
) ? 1 : 0; // wait-states
|
end
|
end
|
|
|
`else
|
`else
|
|
|
// for dual phase clock: 0 wait state
|
// for dual phase clock: 0 wait state
|
Line 542... |
Line 550... |
//individual byte/word/long selection, thanks to HYF!
|
//individual byte/word/long selection, thanks to HYF!
|
|
|
always@(posedge CLK)
|
always@(posedge CLK)
|
begin
|
begin
|
|
|
`ifdef __3STAGE__
|
`ifdef __RMW_CYCLE__
|
|
|
// read-modify-write operation w/ 1 wait-state:
|
// read-modify-write operation w/ 1 wait-state:
|
|
|
if(!HLT&&WR&&DADDR[31]==0/*&&DADDR[12]==1*/)
|
if(!HLT&&WR&&DADDR[31]==0/*&&DADDR[12]==1*/)
|
begin
|
begin
|
Line 564... |
Line 572... |
end
|
end
|
|
|
`else
|
`else
|
// write-only operation w/ 0 wait-states:
|
// write-only operation w/ 0 wait-states:
|
`ifdef __HARVARD__
|
`ifdef __HARVARD__
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) RAM[DADDR[11:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) RAM[DADDR[11:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) RAM[DADDR[11:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) RAM[DADDR[11:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) RAM[DADDR[11:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) RAM[DADDR[11:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) RAM[DADDR[11:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) RAM[DADDR[11:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
|
`else
|
`else
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) MEM[DADDR[12:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[3]) MEM[DADDR[12:2]][3 * 8 + 7: 3 * 8] <= DATAO[3 * 8 + 7: 3 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) MEM[DADDR[12:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[2]) MEM[DADDR[12:2]][2 * 8 + 7: 2 * 8] <= DATAO[2 * 8 + 7: 2 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) MEM[DADDR[12:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[1]) MEM[DADDR[12:2]][1 * 8 + 7: 1 * 8] <= DATAO[1 * 8 + 7: 1 * 8];
|
if(WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) MEM[DADDR[12:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
|
if(!HLT&&WR&&DADDR[31]==0&&/*DADDR[12]==1&&*/BE[0]) MEM[DADDR[12:2]][0 * 8 + 7: 0 * 8] <= DATAO[0 * 8 + 7: 0 * 8];
|
`endif
|
`endif
|
`endif
|
`endif
|
|
|
IOMUXFF <= IOMUX[DADDR[3:2]]; // read w/ 2 wait-states
|
IOMUXFF <= IOMUX[DADDR[3:2]]; // read w/ 2 wait-states
|
end
|
end
|
Line 685... |
Line 693... |
.DATAI(DATAO),
|
.DATAI(DATAO),
|
.DATAO(IOMUX[1]),
|
.DATAO(IOMUX[1]),
|
//.IRQ(BOARD_IRQ[1]),
|
//.IRQ(BOARD_IRQ[1]),
|
.RXD(UART_RXD),
|
.RXD(UART_RXD),
|
.TXD(UART_TXD),
|
.TXD(UART_TXD),
|
|
`ifdef SIMULATION
|
|
.FINISH_REQ(FINISH_REQ),
|
|
`endif
|
.DEBUG(UDEBUG)
|
.DEBUG(UDEBUG)
|
);
|
);
|
|
|
// darkriscv
|
// darkriscv
|
|
|
Line 706... |
Line 717... |
`else
|
`else
|
.CLK(!CLK),
|
.CLK(!CLK),
|
`endif
|
`endif
|
.RES(RES),
|
.RES(RES),
|
.HLT(HLT),
|
.HLT(HLT),
|
`ifdef __THREADING__
|
//`ifdef __THREADING__
|
.IREQ(|(IREQ^IACK)),
|
// .IREQ(|(IREQ^IACK)),
|
`endif
|
//`endif
|
.IDATA(IDATA),
|
.IDATA(IDATA),
|
.IADDR(IADDR),
|
.IADDR(IADDR),
|
.DADDR(DADDR),
|
.DADDR(DADDR),
|
|
|
`ifdef __FLEXBUZZ__
|
`ifdef __FLEXBUZZ__
|
Line 726... |
Line 737... |
.BE(BE),
|
.BE(BE),
|
.WR(WR),
|
.WR(WR),
|
.RD(RD),
|
.RD(RD),
|
`endif
|
`endif
|
|
|
|
`ifdef SIMULATION
|
|
.FINISH_REQ(FINISH_REQ),
|
|
`endif
|
.DEBUG(KDEBUG)
|
.DEBUG(KDEBUG)
|
);
|
);
|
|
|
`ifdef __ICARUS__
|
`ifdef __ICARUS__
|
initial
|
initial
|