aboutsummaryrefslogtreecommitdiff
path: root/fpga/src/Top.bs
diff options
context:
space:
mode:
Diffstat (limited to 'fpga/src/Top.bs')
-rw-r--r--fpga/src/Top.bs59
1 files changed, 59 insertions, 0 deletions
diff --git a/fpga/src/Top.bs b/fpga/src/Top.bs
new file mode 100644
index 0000000..9afaaab
--- /dev/null
+++ b/fpga/src/Top.bs
@@ -0,0 +1,59 @@
+package Top where
+
+import App
+import Uart
+
+interface Top =
+ -- RS232
+ rx :: Bit 1 -> Action {-# always_enabled, always_ready, prefix = "", arg_names = [RX] #-}
+ tx :: Bit 1 {-# always_ready, result = TX #-}
+ -- Onboard LEDs
+ ledR_N :: Bit 1 {-# always_ready, result = LEDR_N #-}
+ ledG_N :: Bit 1 {-# always_ready, result = LEDG_N #-}
+ -- RGB LED driver
+ ledRed_N :: Bit 1 {-# always_ready, result = LED_RED_N #-}
+ ledGrn_N :: Bit 1 {-# always_ready, result = LED_GRN_N #-}
+ ledBlu_N :: Bit 1 {-# always_ready, result = LED_BLU_N #-}
+ -- LEDs and buttons (PMOD 2)
+ led1 :: Bit 1 {-# always_ready, result = LED1 #-}
+ led2 :: Bit 1 {-# always_ready, result = LED2 #-}
+ led3 :: Bit 1 {-# always_ready, result = LED3 #-}
+ led4 :: Bit 1 {-# always_ready, result = LED4 #-}
+ led5 :: Bit 1 {-# always_ready, result = LED5 #-}
+ btn1 :: Bit 1 -> Action {-# always_enabled, always_ready, prefix = "", arg_names = [BTN1] #-}
+ btn2 :: Bit 1 -> Action {-# always_enabled, always_ready, prefix = "", arg_names = [BTN2] #-}
+ btn3 :: Bit 1 -> Action {-# always_enabled, always_ready, prefix = "", arg_names = [BTN3] #-}
+
+clockFreqHz :: Integer
+clockFreqHz = 12_000_000
+
+mkTop :: Module Top
+mkTop =
+ module
+ uart <- mkUart (clockFreqHz / 9600)
+ app <- mkApp uart.recv uart.send
+
+ interface Top
+ -- RS232
+ rx = uart.rxPin
+ tx = uart.txPin
+ -- Onboard LEDs
+ ledR_N = uart.txPin
+ ledG_N = 1 - app.led
+ -- RGB LED driver
+ ledRed_N = 1
+ ledGrn_N = 1
+ ledBlu_N = 1
+ -- LEDs and buttons (PMOD 2)
+ led1 = 0
+ led2 = 0
+ led3 = 0
+ led4 = 0
+ led5 = 0
+ btn1 _ = return ()
+ btn2 _ = return ()
+ btn3 _ = return ()
+{-# verilog mkTop #-}
+{-# properties mkTop = { RSTN = BTN_N } #-}
+
+-- vim: set ft=haskell :