diff options
| author | Julian Blake Kongslie | 2021-04-07 17:02:03 -0700 |
|---|---|---|
| committer | Julian Blake Kongslie | 2021-04-07 17:02:03 -0700 |
| commit | 238a43e587bfbe6574d34ef36553619249797260 (patch) | |
| tree | e1b3b0c0c4c6254d2d4a851a2eb1bf2cac2169a2 /hdl/jtag_uart.sv | |
| parent | Don't rebuild verilator just for memory file changes. (diff) | |
| download | noncpu-238a43e587bfbe6574d34ef36553619249797260.tar.xz | |
Switch back to $past-based scheduling; my clever idea wasn't clever enough.
Diffstat (limited to 'hdl/jtag_uart.sv')
| -rw-r--r-- | hdl/jtag_uart.sv | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/hdl/jtag_uart.sv b/hdl/jtag_uart.sv index 2b5f334..096b1c9 100644 --- a/hdl/jtag_uart.sv +++ b/hdl/jtag_uart.sv | |||
| @@ -18,13 +18,6 @@ module jtag_uart | |||
| 18 | , input bit [7:0] tx_data | 18 | , input bit [7:0] tx_data |
| 19 | ); | 19 | ); |
| 20 | 20 | ||
| 21 | `input(rx_ready) | ||
| 22 | `output(rx_valid) | ||
| 23 | `output(rx_data) | ||
| 24 | `output(tx_ready) | ||
| 25 | `input(tx_valid) | ||
| 26 | `input(tx_data) | ||
| 27 | |||
| 28 | `ifdef SYNTHESIS | 21 | `ifdef SYNTHESIS |
| 29 | 22 | ||
| 30 | alt_jtag_atlantic | 23 | alt_jtag_atlantic |
| @@ -35,12 +28,12 @@ alt_jtag_atlantic | |||
| 35 | ) real_jtag | 28 | ) real_jtag |
| 36 | ( .clk(clk) | 29 | ( .clk(clk) |
| 37 | , .rst_n(!reset) | 30 | , .rst_n(!reset) |
| 38 | , .r_dat(tx_data_) | 31 | , .r_dat(tx_data) |
| 39 | , .r_val(tx_valid_) | 32 | , .r_val(tx_valid) |
| 40 | , .r_ena(tx_ready_) | 33 | , .r_ena(tx_ready) |
| 41 | , .t_dat(rx_data_) | 34 | , .t_dat(rx_data) |
| 42 | , .t_dav(rx_ready_) | 35 | , .t_dav(rx_ready) |
| 43 | , .t_ena(rx_valid_) | 36 | , .t_ena(rx_valid) |
| 44 | ); | 37 | ); |
| 45 | 38 | ||
| 46 | `else | 39 | `else |
| @@ -55,34 +48,34 @@ bit [7:0] tx_b_data; | |||
| 55 | 48 | ||
| 56 | always_ff @(posedge clk) begin | 49 | always_ff @(posedge clk) begin |
| 57 | if (reset) begin | 50 | if (reset) begin |
| 58 | rx_valid_ = 0; | 51 | rx_valid = 0; |
| 59 | tx_ready_ = 0; | 52 | tx_ready = 0; |
| 60 | sim_rx_addr = 0; | 53 | sim_rx_addr = 0; |
| 61 | tx_b_valid = 0; | 54 | tx_b_valid = 0; |
| 62 | end else begin | 55 | end else begin |
| 63 | automatic bit [7:0] sim_rx_data = sim_rx_rom[sim_rx_addr]; | 56 | automatic bit [7:0] sim_rx_data = sim_rx_rom[sim_rx_addr]; |
| 64 | 57 | ||
| 65 | // RX logic | 58 | // RX logic |
| 66 | if (rx_ready_) rx_valid_ = 0; | 59 | if (`lag(rx_ready)) rx_valid = 0; |
| 67 | if (!rx_valid_ && (sim_rx_data != 0)) begin | 60 | if (!rx_valid && (sim_rx_data != 0)) begin |
| 68 | `ifdef JTAG_UART_LOCAL_ECHO | 61 | `ifdef JTAG_UART_LOCAL_ECHO |
| 69 | $write("%s", sim_rx_data); | 62 | $write("%s", sim_rx_data); |
| 70 | `endif | 63 | `endif |
| 71 | rx_valid_ = 1; | 64 | rx_valid = 1; |
| 72 | rx_data_ = sim_rx_data; | 65 | rx_data = sim_rx_data; |
| 73 | ++sim_rx_addr; | 66 | ++sim_rx_addr; |
| 74 | end | 67 | end |
| 75 | 68 | ||
| 76 | // TX logic | 69 | // TX logic |
| 77 | if (tx_ready_ && tx_valid_) begin | 70 | if (tx_ready && `lag(tx_valid)) begin |
| 78 | tx_b_valid = 1; | 71 | tx_b_valid = 1; |
| 79 | tx_b_data = tx_data_; | 72 | tx_b_data = `lag(tx_data); |
| 80 | end | 73 | end |
| 81 | if (tx_b_valid) begin | 74 | if (tx_b_valid) begin |
| 82 | $write("%s", tx_b_data); | 75 | $write("%s", tx_b_data); |
| 83 | tx_b_valid = 0; | 76 | tx_b_valid = 0; |
| 84 | end | 77 | end |
| 85 | tx_ready_ = !tx_b_valid; | 78 | tx_ready = !tx_b_valid; |
| 86 | end | 79 | end |
| 87 | end | 80 | end |
| 88 | 81 | ||
