summaryrefslogtreecommitdiff
path: root/hdl/jtag_uart.sv
diff options
context:
space:
mode:
Diffstat (limited to 'hdl/jtag_uart.sv')
-rw-r--r--hdl/jtag_uart.sv21
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
42bit [`DELAY_BITS-1:0] delay;
43
41bit [7:0] sim_rx_rom [0:(1<<16)-1]; 44bit [7:0] sim_rx_rom [0:(1<<16)-1];
42initial $readmemh("mem/jtag_uart.hex", sim_rx_rom); 45initial $readmemh("mem/jtag_uart.hex", sim_rx_rom);
43 46
@@ -48,6 +51,7 @@ bit [7:0] tx_b_data;
48 51
49always_ff @(posedge clk) begin 52always_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;