Cleaned up some code. Still more work to do there.

This commit is contained in:
Jacob Pease 2024-11-01 17:35:55 -05:00
parent e881bd3120
commit c197d4a3c6
2 changed files with 25 additions and 17 deletions

View File

@ -273,7 +273,7 @@ module spi_apb import cvw::*; #(parameter cvw_t P) (
READY: if (~TransmitFIFOReadEmpty & ~Transmitting) NextState = START; READY: if (~TransmitFIFOReadEmpty & ~Transmitting) NextState = START;
else NextState = READY; else NextState = READY;
START: NextState = WAIT; START: NextState = WAIT;
WAIT: if (/*TransmitFIFOReadEmpty &*/ ~Transmitting & ~TransmitRegLoaded) NextState = READY; WAIT: if (~Transmitting & ~TransmitRegLoaded) NextState = READY;
else NextState = WAIT; else NextState = WAIT;
default: NextState = READY; default: NextState = READY;
endcase endcase

View File

@ -80,6 +80,9 @@ module spi_controller (
logic PreSampleEdge; logic PreSampleEdge;
// logic ShiftEdge; // logic ShiftEdge;
// logic SampleEdge; // logic SampleEdge;
logic ShiftEdgePulse;
logic SampleEdgePulse;
logic EndOfFramePulse;
// Frame stuff // Frame stuff
logic [3:0] BitNum; logic [3:0] BitNum;
@ -220,6 +223,7 @@ module spi_controller (
// EndOfFrame <= 1'b0; // EndOfFrame <= 1'b0;
// end // end
// TODO: Rename EndOfFrameDelay to EndOfFrame and remove this logic
if (~TransmitStart) begin if (~TransmitStart) begin
EndOfFrame <= (SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & LastBit & Transmitting; EndOfFrame <= (SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & LastBit & Transmitting;
end end
@ -236,35 +240,39 @@ module spi_controller (
// Delay ShiftEdge and SampleEdge by a half PCLK period // Delay ShiftEdge and SampleEdge by a half PCLK period
// Aligned EXACTLY ON THE MIDDLE of the leading and trailing edges. // Aligned EXACTLY ON THE MIDDLE of the leading and trailing edges.
// Sweeeeeeeeeet... // Sweeeeeeeeeet...
assign ShiftEdgePulse = SCLKenable & ~LastBit & Transmitting;
assign SampleEdgePulse = SCLKenable & Transmitting & ~DelayIsNext;
assign EndOfFramePulse = SCLKenable & LastBit & Transmitting;
always_ff @(posedge ~PCLK) begin always_ff @(posedge ~PCLK) begin
if (~PRESETn | TransmitStart) begin if (~PRESETn | TransmitStart) begin
ShiftEdge <= 0; ShiftEdge <= 0;
PhaseOneOffset <= 0; PhaseOneOffset <= 0;
SampleEdge <= 0; SampleEdge <= 0;
EndOfFrameDelay <= 0; EndOfFrameDelay <= 0;
end else begin end else begin
case(SckMode) PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
case(SckMode)
2'b00: begin 2'b00: begin
ShiftEdge <= SPICLK & SCLKenable & ~LastBit & Transmitting; ShiftEdge <= SPICLK & ShiftEdgePulse;
SampleEdge <= ~SPICLK & SCLKenable & Transmitting & ~DelayIsNext; SampleEdge <= ~SPICLK & SampleEdgePulse;
EndOfFrameDelay <= SPICLK & SCLKenable & LastBit & Transmitting; EndOfFrameDelay <= SPICLK & EndOfFramePulse;
end end
2'b01: begin 2'b01: begin
ShiftEdge <= ~SPICLK & SCLKenable & ~LastBit & Transmitting & PhaseOneOffset; ShiftEdge <= ~SPICLK & ShiftEdgePulse & PhaseOneOffset;
SampleEdge <= SPICLK & SCLKenable & Transmitting & ~DelayIsNext; SampleEdge <= SPICLK & SampleEdgePulse;
EndOfFrameDelay <= ~SPICLK & SCLKenable & LastBit & Transmitting; EndOfFrameDelay <= ~SPICLK & EndOfFramePulse;
PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
end end
2'b10: begin 2'b10: begin
ShiftEdge <= ~SPICLK & SCLKenable & ~LastBit & Transmitting; ShiftEdge <= ~SPICLK & ShiftEdgePulse;
SampleEdge <= SPICLK & SCLKenable & Transmitting & ~DelayIsNext; SampleEdge <= SPICLK & SampleEdgePulse;
EndOfFrameDelay <= ~SPICLK & SCLKenable & LastBit & Transmitting; EndOfFrameDelay <= ~SPICLK & EndOfFramePulse;
end end
2'b11: begin 2'b11: begin
ShiftEdge <= SPICLK & SCLKenable & ~LastBit & Transmitting & PhaseOneOffset; ShiftEdge <= SPICLK & ShiftEdgePulse & PhaseOneOffset;
SampleEdge <= ~SPICLK & SCLKenable & Transmitting & ~DelayIsNext; SampleEdge <= ~SPICLK & SampleEdgePulse;
EndOfFrameDelay <= SPICLK & SCLKenable & LastBit & Transmitting; EndOfFrameDelay <= SPICLK & EndOfFramePulse;
PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
end end
// ShiftEdge <= ((SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & ~LastBit & Transmitting) & PhaseOneOffset; // ShiftEdge <= ((SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & ~LastBit & Transmitting) & PhaseOneOffset;
// PhaseOneOffset <= PhaseOneOffset == 0 ? Transmitting & SCLKenable : ~EndOfFrameDelay; // PhaseOneOffset <= PhaseOneOffset == 0 ? Transmitting & SCLKenable : ~EndOfFrameDelay;