riscv-bluespec-classic/old_src/Top.bs
Yehowshua Immanuel b1c14f5aba first commit
2023-09-23 02:08:37 -04:00

56 lines
1.4 KiB
Haskell

-- TOPMODULE=mkTop make b_compile
package Top(mkTop, ITop(..), mkSim) where
import Deserializer
import Serializer
type FCLK = 25_000_000
type BAUD = 9_600
interface ITop =
ftdi_rxd :: Bit 1 {-# always_ready #-}
led :: Bit 8 {-# always_ready #-}
ftdi_txd :: (Bit 1) -> Action {-# always_enabled, always_ready #-}
{-# properties mkTop={verilog} #-}
mkTop :: Module (ITop)
mkTop = do
fileHandle <- openFile "compile.log" WriteMode
deserializer :: (IDeserializer FCLK BAUD) <- mkDeserialize fileHandle
serializer :: (ISerializer FCLK BAUD) <- mkSerialize fileHandle
ftdiBitIn :: Wire(Bit 1) <- mkBypassWire
rxReg :: Reg(Bit 8) <- mkReg(0)
messageM $ "Hallo!!" + (realToString 5)
addRules $
rules
when True ==>
do
rxReg := deserializer.get
serializer.putBit8 $ deserializer.get
when True ==>
deserializer.putBitIn ftdiBitIn
return $
interface ITop
{ftdi_rxd = serializer.bitLineOut
;led = rxReg
;ftdi_txd bitIn = ftdiBitIn := bitIn}
mkSim :: Module Empty
mkSim = do
-- count :: Reg(UInt 3) <- mkReg(0)
count :: Reg(UInt 3) <- mkReg(0)
addRules $
rules
"count" : when True ==> action
count := unpack ((1'b1) ++ (pack count)[2:1])
$display count
"end sim" : when (count == 6) ==> action
$finish
return $
interface Empty