From 7290af88fb90f55fc85515172dc720a91dae89aa Mon Sep 17 00:00:00 2001 From: Yehowshua Immanuel Date: Sun, 20 Apr 2025 15:22:14 -0400 Subject: [PATCH] scaffolding for new uart interface in place --- bs/Top.bs | 7 ++++--- bs/Uart/Deserializer.bs | 8 ++++---- bs/Uart/Serializer.bs | 8 ++++---- bs/Uart/Uart.bs | 26 ++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 bs/Uart/Uart.bs diff --git a/bs/Top.bs b/bs/Top.bs index b5276fd..8244a1b 100644 --- a/bs/Top.bs +++ b/bs/Top.bs @@ -1,8 +1,8 @@ package Top(mkTop, ITop(..)) where +import Serializer import Deserializer import Core -import Serializer import BRAM import CBindings import Bus @@ -12,6 +12,7 @@ import List import ActionSeq import Vector import BusTypes +import Uart import TagEngineTester @@ -27,8 +28,8 @@ interface ITop = { mkTop :: Module ITop mkTop = do fileHandle :: Handle <- openFile "compile.log" WriteMode - deserializer :: IDeserializer FCLK BAUD <- mkDeserialize fileHandle - serializer :: ISerializer FCLK BAUD <- mkSerialize fileHandle + deserializer :: Deserializer FCLK BAUD <- mkDeserialize fileHandle + serializer :: Serializer FCLK BAUD <- mkSerialize fileHandle core :: Core FCLK <- mkCore persistLed :: Reg (Bit 8) <- mkReg 0 diff --git a/bs/Uart/Deserializer.bs b/bs/Uart/Deserializer.bs index cebc355..6f642bf 100644 --- a/bs/Uart/Deserializer.bs +++ b/bs/Uart/Deserializer.bs @@ -1,6 +1,6 @@ package Deserializer( mkDeserialize, - IDeserializer(..), + Deserializer(..), State(..)) where @@ -8,11 +8,11 @@ import ClkDivider import State -interface (IDeserializer :: # -> # -> *) clkFreq baudRate = +interface (Deserializer :: # -> # -> *) clkFreq baudRate = get :: Bit 8 putBitIn :: (Bit 1) -> Action {-# always_enabled, always_ready #-} -mkDeserialize :: Handle -> Module (IDeserializer clkFreq baudRate) +mkDeserialize :: Handle -> Module (Deserializer clkFreq baudRate) mkDeserialize fileHandle = do ftdiRxIn :: Wire(Bit 1) <- mkBypassWire shiftReg :: Reg(Bit 8) <- mkReg(0) @@ -46,7 +46,7 @@ mkDeserialize fileHandle = do shiftReg := ftdiRxIn ++ shiftReg[7:1] return $ - interface IDeserializer + interface Deserializer {get = shiftReg when (ftdiState == STOP), (clkDivider.isAdvancing) ;putBitIn bit = ftdiRxIn := bit diff --git a/bs/Uart/Serializer.bs b/bs/Uart/Serializer.bs index cf39721..2b93872 100644 --- a/bs/Uart/Serializer.bs +++ b/bs/Uart/Serializer.bs @@ -1,6 +1,6 @@ package Serializer( mkSerialize, - ISerializer(..), + Serializer(..), State(..)) where @@ -14,11 +14,11 @@ serialize ftdiState dataReg = (DATA n) -> dataReg[n:n] _ -> 1'b1 -interface (ISerializer :: # -> # -> *) clkFreq baudRate = +interface (Serializer :: # -> # -> *) clkFreq baudRate = putBit8 :: (Bit 8) -> Action bitLineOut :: Bit 1 -mkSerialize :: Handle -> Module (ISerializer clkFreq baudRate) +mkSerialize :: Handle -> Module (Serializer clkFreq baudRate) mkSerialize fileHandle = do ftdiTxOut :: Wire(Bit 1) <- mkBypassWire @@ -41,7 +41,7 @@ mkSerialize fileHandle = do ftdiTxOut := serialize ftdiState dataReg return $ - interface ISerializer + interface Serializer putBit8 bit8Val = do clkDivider.reset diff --git a/bs/Uart/Uart.bs b/bs/Uart/Uart.bs new file mode 100644 index 0000000..20d18f5 --- /dev/null +++ b/bs/Uart/Uart.bs @@ -0,0 +1,26 @@ +package Uart( + mkUartPhy, + UartPhy(..) + ) where + +import Serializer +import Deserializer +import BusTypes +import Util + +-- Out is out from the FPGA and In is in to the FPGA +interface (UartPhy :: # -> # -> *) clkFreq baudRate = + bitOut :: Bit 1 + bitIn :: Bit 1 -> Action + +mkUartPhy :: (BusTypes.BusServer inFlightTransactions numClients) + -> Module (UartPhy clkFreq baudRate) +mkUartPhy dedicatedServerInterface = do + fileHandle :: Handle <- openFile "mkUartPhy.log" WriteMode + deserializer :: Deserializer clkFreq baudRate <- mkDeserialize fileHandle + serializer :: Serializer clkFreq baudRate <- mkSerialize fileHandle + return |> + interface UartPhy + bitOut = 1 + bitIn bitVal = do + action {} \ No newline at end of file