diff options
| author | Julian Blake Kongslie | 2022-01-30 16:35:02 -0800 |
|---|---|---|
| committer | Julian Blake Kongslie | 2022-01-30 16:36:00 -0800 |
| commit | 61b644866337d8db517beb8f089ef4311b83bd39 (patch) | |
| tree | 2d2f66b4036f7ecca75a70f52386f7c8472ad7fd /hdl/jtag_uart.sv | |
| parent | Implement DF and IF, and Dep and Exam switches. (diff) | |
| download | noncpu-61b644866337d8db517beb8f089ef4311b83bd39.tar.xz | |
Working focal!
It turns out that indirect jumps don't preincrement.
The interpreter is almost unreadable at this point due to debugging
messages. Sorry.
Diffstat (limited to 'hdl/jtag_uart.sv')
| -rw-r--r-- | hdl/jtag_uart.sv | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/hdl/jtag_uart.sv b/hdl/jtag_uart.sv index 096b1c9..ec39c37 100644 --- a/hdl/jtag_uart.sv +++ b/hdl/jtag_uart.sv | |||
| @@ -38,6 +38,9 @@ alt_jtag_atlantic | |||
| 38 | 38 | ||
| 39 | `else | 39 | `else |
| 40 | 40 | ||
| 41 | `define DELAY_BITS 16 | ||
| 42 | bit [`DELAY_BITS-1:0] delay; | ||
| 43 | |||
| 41 | bit [7:0] sim_rx_rom [0:(1<<16)-1]; | 44 | bit [7:0] sim_rx_rom [0:(1<<16)-1]; |
| 42 | initial $readmemh("mem/jtag_uart.hex", sim_rx_rom); | 45 | initial $readmemh("mem/jtag_uart.hex", sim_rx_rom); |
| 43 | 46 | ||
| @@ -48,6 +51,7 @@ bit [7:0] tx_b_data; | |||
| 48 | 51 | ||
| 49 | always_ff @(posedge clk) begin | 52 | always_ff @(posedge clk) begin |
| 50 | if (reset) begin | 53 | if (reset) begin |
| 54 | delay = {(`DELAY_BITS){1'b1}}; | ||
| 51 | rx_valid = 0; | 55 | rx_valid = 0; |
| 52 | tx_ready = 0; | 56 | tx_ready = 0; |
| 53 | sim_rx_addr = 0; | 57 | sim_rx_addr = 0; |
| @@ -57,13 +61,19 @@ always_ff @(posedge clk) begin | |||
| 57 | 61 | ||
| 58 | // RX logic | 62 | // RX logic |
| 59 | if (`lag(rx_ready)) rx_valid = 0; | 63 | if (`lag(rx_ready)) rx_valid = 0; |
| 60 | if (!rx_valid && (sim_rx_data != 0)) begin | 64 | if (delay == 0) begin |
| 65 | delay = {(`DELAY_BITS){1'b1}}; | ||
| 66 | if (!rx_valid && (sim_rx_data != 8'hff)) begin | ||
| 61 | `ifdef JTAG_UART_LOCAL_ECHO | 67 | `ifdef JTAG_UART_LOCAL_ECHO |
| 62 | $write("%s", sim_rx_data); | 68 | $write("%s", sim_rx_data); |
| 69 | $fflush(); | ||
| 63 | `endif | 70 | `endif |
| 64 | rx_valid = 1; | 71 | rx_valid = 1; |
| 65 | rx_data = sim_rx_data; | 72 | rx_data = sim_rx_data; |
| 66 | ++sim_rx_addr; | 73 | ++sim_rx_addr; |
| 74 | end | ||
| 75 | end else begin | ||
| 76 | --delay; | ||
| 67 | end | 77 | end |
| 68 | 78 | ||
| 69 | // TX logic | 79 | // TX logic |
| @@ -73,6 +83,7 @@ always_ff @(posedge clk) begin | |||
| 73 | end | 83 | end |
| 74 | if (tx_b_valid) begin | 84 | if (tx_b_valid) begin |
| 75 | $write("%s", tx_b_data); | 85 | $write("%s", tx_b_data); |
| 86 | $fflush(); | ||
| 76 | tx_b_valid = 0; | 87 | tx_b_valid = 0; |
| 77 | end | 88 | end |
| 78 | tx_ready = !tx_b_valid; | 89 | tx_ready = !tx_b_valid; |
