Skip to content

Commit

Permalink
Cleaned up some code. Still more work to do there.
Browse files Browse the repository at this point in the history
  • Loading branch information
JacobPease committed Nov 1, 2024
1 parent e881bd3 commit c197d4a
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/uncore/spi_apb.sv
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ module spi_apb import cvw::*; #(parameter cvw_t P) (
READY: if (~TransmitFIFOReadEmpty & ~Transmitting) NextState = START;
else NextState = READY;
START: NextState = WAIT;
WAIT: if (/*TransmitFIFOReadEmpty &*/ ~Transmitting & ~TransmitRegLoaded) NextState = READY;
WAIT: if (~Transmitting & ~TransmitRegLoaded) NextState = READY;
else NextState = WAIT;
default: NextState = READY;
endcase
Expand Down
40 changes: 24 additions & 16 deletions src/uncore/spi_controller.sv
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ module spi_controller (
logic PreSampleEdge;
// logic ShiftEdge;
// logic SampleEdge;
logic ShiftEdgePulse;
logic SampleEdgePulse;
logic EndOfFramePulse;

// Frame stuff
logic [3:0] BitNum;
Expand Down Expand Up @@ -220,6 +223,7 @@ module spi_controller (
// EndOfFrame <= 1'b0;
// end

// TODO: Rename EndOfFrameDelay to EndOfFrame and remove this logic
if (~TransmitStart) begin
EndOfFrame <= (SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & LastBit & Transmitting;
end
Expand All @@ -236,35 +240,39 @@ module spi_controller (
// Delay ShiftEdge and SampleEdge by a half PCLK period
// Aligned EXACTLY ON THE MIDDLE of the leading and trailing edges.
// Sweeeeeeeeeet...

assign ShiftEdgePulse = SCLKenable & ~LastBit & Transmitting;
assign SampleEdgePulse = SCLKenable & Transmitting & ~DelayIsNext;
assign EndOfFramePulse = SCLKenable & LastBit & Transmitting;

always_ff @(posedge ~PCLK) begin
if (~PRESETn | TransmitStart) begin
ShiftEdge <= 0;
PhaseOneOffset <= 0;
SampleEdge <= 0;
EndOfFrameDelay <= 0;
end else begin
case(SckMode)
end else begin
PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
case(SckMode)
2'b00: begin
ShiftEdge <= SPICLK & SCLKenable & ~LastBit & Transmitting;
SampleEdge <= ~SPICLK & SCLKenable & Transmitting & ~DelayIsNext;
EndOfFrameDelay <= SPICLK & SCLKenable & LastBit & Transmitting;
ShiftEdge <= SPICLK & ShiftEdgePulse;
SampleEdge <= ~SPICLK & SampleEdgePulse;
EndOfFrameDelay <= SPICLK & EndOfFramePulse;
end
2'b01: begin
ShiftEdge <= ~SPICLK & SCLKenable & ~LastBit & Transmitting & PhaseOneOffset;
SampleEdge <= SPICLK & SCLKenable & Transmitting & ~DelayIsNext;
EndOfFrameDelay <= ~SPICLK & SCLKenable & LastBit & Transmitting;
PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
ShiftEdge <= ~SPICLK & ShiftEdgePulse & PhaseOneOffset;
SampleEdge <= SPICLK & SampleEdgePulse;
EndOfFrameDelay <= ~SPICLK & EndOfFramePulse;
end
2'b10: begin
ShiftEdge <= ~SPICLK & SCLKenable & ~LastBit & Transmitting;
SampleEdge <= SPICLK & SCLKenable & Transmitting & ~DelayIsNext;
EndOfFrameDelay <= ~SPICLK & SCLKenable & LastBit & Transmitting;
ShiftEdge <= ~SPICLK & ShiftEdgePulse;
SampleEdge <= SPICLK & SampleEdgePulse;
EndOfFrameDelay <= ~SPICLK & EndOfFramePulse;
end
2'b11: begin
ShiftEdge <= SPICLK & SCLKenable & ~LastBit & Transmitting & PhaseOneOffset;
SampleEdge <= ~SPICLK & SCLKenable & Transmitting & ~DelayIsNext;
EndOfFrameDelay <= SPICLK & SCLKenable & LastBit & Transmitting;
PhaseOneOffset <= (PhaseOneOffset == 0) ? Transmitting & SCLKenable : ~EndOfFrameDelay;
ShiftEdge <= SPICLK & ShiftEdgePulse & PhaseOneOffset;
SampleEdge <= ~SPICLK & SampleEdgePulse;
EndOfFrameDelay <= SPICLK & EndOfFramePulse;
end
// ShiftEdge <= ((SckMode[1] ^ SckMode[0] ^ SPICLK) & SCLKenable & ~LastBit & Transmitting) & PhaseOneOffset;
// PhaseOneOffset <= PhaseOneOffset == 0 ? Transmitting & SCLKenable : ~EndOfFrameDelay;
Expand Down

0 comments on commit c197d4a

Please sign in to comment.