mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
sync fifo passes
This commit is contained in:
parent
aa5abfc8e8
commit
4941fe1769
@ -1,2 +1,2 @@
|
|||||||
vsim -do "do wally.do rv64gc arch64d"
|
vsim -do "do wally.do rv64gc wally64periph"
|
||||||
|
|
||||||
|
@ -380,8 +380,10 @@ module spi_apb import cvw::*; #(parameter cvw_t P) (
|
|||||||
assign SampleEdge = SckMode[0] ? (state == ACTIVE_1) : (state == ACTIVE_0);
|
assign SampleEdge = SckMode[0] ? (state == ACTIVE_1) : (state == ACTIVE_0);
|
||||||
assign TransmitDataEndian = Format[2] ? {TransmitData[0], TransmitData[1], TransmitData[2], TransmitData[3], TransmitData[4], TransmitData[5], TransmitData[6], TransmitData[7]} : TransmitData[7:0];
|
assign TransmitDataEndian = Format[2] ? {TransmitData[0], TransmitData[1], TransmitData[2], TransmitData[3], TransmitData[4], TransmitData[5], TransmitData[6], TransmitData[7]} : TransmitData[7:0];
|
||||||
|
|
||||||
TransmitFIFO #(3,8) txFIFO(PCLK, SCLKDuty, PRESETn, TransmitFIFOWriteIncrementDelay, TransmitFIFOReadIncrement, TransmitDataEndian,TransmitWriteWatermarkLevel, TransmitWatermark[2:0], TransmitFIFOReadData[7:0], TransmitFIFOWriteFull, TransmitFIFOReadEmpty, TransmitWriteMark, TransmitReadMark);
|
//TransmitFIFO #(3,8) txFIFO(PCLK, SCLKDuty, PRESETn, TransmitFIFOWriteIncrementDelay, TransmitFIFOReadIncrement, TransmitDataEndian,TransmitWriteWatermarkLevel, TransmitWatermark[2:0], TransmitFIFOReadData[7:0], TransmitFIFOWriteFull, TransmitFIFOReadEmpty, TransmitWriteMark, TransmitReadMark);
|
||||||
ReceiveFIFO #(3,8) rxFIFO(SCLKDuty, PCLK, PRESETn, ReceiveFIFOWriteIncrement, ReceiveFIFOReadIncrement, ReceiveShiftRegEndian, ReceiveWatermark[2:0], ReceiveReadWatermarkLevel, ReceiveData[7:0], ReceiveFIFOWriteFull, ReceiveFIFOReadEmpty, RecieveWriteMark, RecieveReadMark);
|
TransmitSynchFIFO #(3,8) txFIFO(PCLK, SCLKDuty, PRESETn, TransmitFIFOWriteIncrementDelay, TransmitFIFOReadIncrement, TransmitDataEndian, TransmitWriteWatermarkLevel, TransmitWatermark[2:0], TransmitFIFOReadData[7:0], TransmitFIFOWriteFull, TransmitFIFOReadEmpty, TransmitWriteMark, TransmitReadMark);
|
||||||
|
//ReceiveFIFO #(3,8) rxFIFO(SCLKDuty, PCLK, PRESETn, ReceiveFIFOWriteIncrement, ReceiveFIFOReadIncrement, ReceiveShiftRegEndian, ReceiveWatermark[2:0], ReceiveReadWatermarkLevel, ReceiveData[7:0], ReceiveFIFOWriteFull, ReceiveFIFOReadEmpty, RecieveWriteMark, RecieveReadMark);
|
||||||
|
ReceiveSynchFIFO #(3,8) rxFIFO(PCLK, SCLKDuty, PRESETn, ReceiveFIFOWriteIncrement, ReceiveFIFOReadIncrement, ReceiveShiftRegEndian, ReceiveWatermark[2:0], ReceiveReadWatermarkLevel, ReceiveData[7:0], ReceiveFIFOWriteFull, ReceiveFIFOReadEmpty, RecieveWriteMark, RecieveReadMark);
|
||||||
|
|
||||||
TransmitShiftFSM TransmitShiftFSM_1 (PCLK, PRESETn, TransmitFIFOReadEmpty, ReceivePenultimateFrameBoolean, Active0, TransmitShiftEmpty);
|
TransmitShiftFSM TransmitShiftFSM_1 (PCLK, PRESETn, TransmitFIFOReadEmpty, ReceivePenultimateFrameBoolean, Active0, TransmitShiftEmpty);
|
||||||
ReceiveShiftFSM ReceiveShiftFSM_1 (PCLK, PRESETn, SCLKDuty, ReceivePenultimateFrameBoolean, SampleEdge, SckMode[0], ReceiveShiftFull);
|
ReceiveShiftFSM ReceiveShiftFSM_1 (PCLK, PRESETn, SCLKDuty, ReceivePenultimateFrameBoolean, SampleEdge, SckMode[0], ReceiveShiftFull);
|
||||||
@ -497,9 +499,9 @@ module spi_apb import cvw::*; #(parameter cvw_t P) (
|
|||||||
|
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
/*
|
|
||||||
module TransmitSynchFIFO #(parameter M =3 , N= 8(
|
module TransmitSynchFIFO #(parameter M =3 , N= 8)(
|
||||||
input logic PCLK, wen, ren, PRESETn,
|
input logic PCLK, ren, PRESETn,
|
||||||
input logic winc,rinc,
|
input logic winc,rinc,
|
||||||
input logic [N-1:0] wdata,
|
input logic [N-1:0] wdata,
|
||||||
input logic [M-1:0] wwatermarklevel, rwatermarklevel,
|
input logic [M-1:0] wwatermarklevel, rwatermarklevel,
|
||||||
@ -509,22 +511,99 @@ module TransmitSynchFIFO #(parameter M =3 , N= 8(
|
|||||||
|
|
||||||
logic [N-1:0] mem[2**M];
|
logic [N-1:0] mem[2**M];
|
||||||
logic [M:0] rptr, wptr;
|
logic [M:0] rptr, wptr;
|
||||||
logic [M:0] wbin, wbinnext;
|
logic [M:0] rptrnext, wptrnext;
|
||||||
logic [M:0] rbin, rbinnext;
|
|
||||||
logic rempty_val;
|
logic rempty_val;
|
||||||
logic wfull_val;
|
logic wfull_val;
|
||||||
logic [M-1:0] raddr;
|
logic [M-1:0] raddr;
|
||||||
logic [M-1:0] waddr;
|
logic [M-1:0] waddr;
|
||||||
|
|
||||||
assign rdata = mem[raddr];
|
assign rdata = mem[raddr];
|
||||||
|
always_ff @(posedge PCLK)
|
||||||
|
if (winc & ~wfull) mem[waddr] <= wdata;
|
||||||
|
|
||||||
always_ff @(posedge wclkc, negedge PRESETn)
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
if (~PRESETn) begin
|
if (~PRESETn) rptr <= 0;
|
||||||
|
else if (ren) rptr <= rptrnext;
|
||||||
|
|
||||||
|
|
||||||
|
assign raddr = rptr[M-1:0];
|
||||||
|
assign rptrnext = rptr + {3'b0, (rinc & ~rempty)};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
*/
|
if (~PRESETn) wptr <= 0;
|
||||||
|
else wptr <= wptrnext;
|
||||||
|
|
||||||
|
assign waddr = wptr[M-1:0];
|
||||||
|
assign wwatermark = ((wptr[M-1:0] - rptr[M-1:0]) > wwatermarklevel);
|
||||||
|
assign wptrnext = wptr + {3'b0, (winc & ~wfull)};
|
||||||
|
|
||||||
|
assign rempty_val = (wptr == rptrnext);
|
||||||
|
assign wfull_val = ({~wptrnext[M], wptrnext[M-1:0]} == rptr);
|
||||||
|
|
||||||
|
assign rwatermark = ((rptr[M-1:0] - wptr[M-1:0]) < rwatermarklevel);
|
||||||
|
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) wfull <= 1'b0;
|
||||||
|
else wfull <= wfull_val;
|
||||||
|
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) rempty <= 1'b1;
|
||||||
|
else if (ren) rempty <= rempty_val;
|
||||||
|
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
|
||||||
|
module ReceiveSynchFIFO #(parameter M =3 , N= 8)(
|
||||||
|
input logic PCLK, ren, PRESETn,
|
||||||
|
input logic winc,rinc,
|
||||||
|
input logic [N-1:0] wdata,
|
||||||
|
input logic [M-1:0] wwatermarklevel, rwatermarklevel,
|
||||||
|
output logic [N-1:0] rdata,
|
||||||
|
output logic wfull, rempty,
|
||||||
|
output logic wwatermark, rwatermark);
|
||||||
|
|
||||||
|
logic [N-1:0] mem[2**M];
|
||||||
|
logic [M:0] rptr, wptr;
|
||||||
|
logic [M:0] rptrnext, wptrnext;
|
||||||
|
logic rempty_val;
|
||||||
|
logic wfull_val;
|
||||||
|
logic [M-1:0] raddr;
|
||||||
|
logic [M-1:0] waddr;
|
||||||
|
|
||||||
|
assign rdata = mem[raddr];
|
||||||
|
always_ff @(posedge PCLK)
|
||||||
|
if(winc & ~wfull & PCLK) mem[waddr] <= wdata;
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) rptr <= 0;
|
||||||
|
else rptr <= rptrnext;
|
||||||
|
assign rwatermark = ((rptr[M-1:0] - wptr[M-1:0]) < rwatermarklevel);
|
||||||
|
assign raddr = rptr[M-1:0];
|
||||||
|
assign rptrnext = rptr + {3'b0, (rinc & ~rempty)};
|
||||||
|
assign rempty_val = (wptr == rptrnext);
|
||||||
|
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) rempty <= 1'b1;
|
||||||
|
else rempty <= rempty_val;
|
||||||
|
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) wptr <= 0;
|
||||||
|
else if (ren) wptr <= wptrnext;
|
||||||
|
|
||||||
|
assign waddr = wptr[M-1:0];
|
||||||
|
assign wwatermark = ((wptr[M-1:0] - rptr[M-1:0]) > wwatermarklevel);
|
||||||
|
assign wptrnext = wptr + {3'b0, (winc & ~wfull)};
|
||||||
|
|
||||||
|
assign wfull_val = ({~wptrnext[M], wptrnext[M-1:0]} == rptr);
|
||||||
|
|
||||||
|
always_ff @(posedge PCLK, negedge PRESETn)
|
||||||
|
if (~PRESETn) wfull <= 1'b0;
|
||||||
|
else if (ren) wfull <= wfull_val;
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
module TransmitFIFO #(parameter M = 3, N = 8)(
|
module TransmitFIFO #(parameter M = 3, N = 8)(
|
||||||
input logic wclk, rclk, PRESETn,
|
input logic wclk, rclk, PRESETn,
|
||||||
input logic winc,rinc,
|
input logic winc,rinc,
|
||||||
|
@ -156,7 +156,7 @@ module testbench;
|
|||||||
end
|
end
|
||||||
if (tests.size() == 0) begin
|
if (tests.size() == 0) begin
|
||||||
$display("TEST %s not supported in this configuration", TEST);
|
$display("TEST %s not supported in this configuration", TEST);
|
||||||
$stop;
|
//$stop;
|
||||||
end
|
end
|
||||||
end // initial begin
|
end // initial begin
|
||||||
|
|
||||||
|
@ -1969,12 +1969,12 @@ string arch64zbs[] = '{
|
|||||||
|
|
||||||
string wally64periph[] = '{
|
string wally64periph[] = '{
|
||||||
`WALLYTEST,
|
`WALLYTEST,
|
||||||
"rv64i_m/privilege/src/WALLY-periph-01.S",
|
//"rv64i_m/privilege/src/WALLY-periph-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-clint-01.S",
|
//"rv64i_m/privilege/src/WALLY-clint-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-gpio-01.S",
|
//"rv64i_m/privilege/src/WALLY-gpio-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-plic-01.S",
|
//"rv64i_m/privilege/src/WALLY-plic-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-plic-s-01.S",
|
//"rv64i_m/privilege/src/WALLY-plic-s-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-uart-01.S",
|
//"rv64i_m/privilege/src/WALLY-uart-01.S",
|
||||||
"rv64i_m/privilege/src/WALLY-spi-01.S"
|
"rv64i_m/privilege/src/WALLY-spi-01.S"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user