summaryrefslogtreecommitdiffstats
path: root/top.v
diff options
context:
space:
mode:
Diffstat (limited to 'top.v')
-rw-r--r--top.v57
1 files changed, 57 insertions, 0 deletions
diff --git a/top.v b/top.v
new file mode 100644
index 0000000..3b91d55
--- /dev/null
+++ b/top.v
@@ -0,0 +1,57 @@
+//License: GPLv3
+module top(input hwclk, output LED1, output LED2, output LED3, output LED4, output LED5, output ftdi_tx, input ftdi_rx, output ext_tx, input ext_rx);
+ /* ~4800Hz clock (12MHz source clock) */
+ reg clk_4800 = 1'b0;
+ reg [10:0] cntr_4800 = 11'b0;
+ parameter period_4800 = 1250;
+
+ /* turn LED's 1-3 off */
+ reg offleds = 1'b0;
+ assign LED1 = offleds;
+ assign LED2 = offleds;
+ assign LED3 = offleds;
+
+ /* LED 4-5 is for rx and tx */
+ reg ledrx = 1'b0;
+ reg ledtx = 1'b0;
+ assign LED4 = ledrx;
+ assign LED5 = ledtx;
+
+ /* can't write directly to wires, so assign to registers */
+ reg tx = 1'b0;
+ assign tx = ext_tx;
+ reg rx = 1'b0;
+ assign rx = ftdi_tx;
+
+ /* generate reduced clocks and also loopback uart at 12MHz */
+ always @ (posedge hwclk) begin
+ /* ~4800Hz clock */
+ cntr_4800 <= cntr_4800 + 1;
+ if (cntr_4800 == period_4800) begin
+ clk_4800 <= ~clk_4800;
+ cntr_4800 <= 11'b0;
+ end
+
+ /* just tx and rx and the full 12MHz clock - let the
+ * bitbanging software decide on the clock (just works for
+ * unknown reasons) */
+
+ /* get a bit from ftdi_rx (i.e. input coming from the computer
+ * and pass it to the external tx port */
+ tx <= ftdi_rx;
+
+ /* get a bit from the external rx port and pass it to ftdi_tx
+ * (i.e. bit to the computer)*/
+ rx <= ext_rx;
+ end
+
+ /* blink leds if we just txed - 1/2 of clock rate of the main loop prevents LEDs from blinking too fast */
+ always @ (posedge clk_4800) begin
+ if (ftdi_rx == 0) ledrx <= ~ledrx;
+ if (ftdi_tx == 0) ledtx <= ~ledtx;
+ end
+
+endmodule
+
+
+