diff options
Diffstat (limited to 'fpga/src/Top.bs')
-rw-r--r-- | fpga/src/Top.bs | 59 |
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 : |