summaryrefslogtreecommitdiff
path: root/hdl/top.sv
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hdl/top.sv118
1 files changed, 57 insertions, 61 deletions
diff --git a/hdl/top.sv b/hdl/top.sv
index ffe6656..6512185 100644
--- a/hdl/top.sv
+++ b/hdl/top.sv
@@ -7,10 +7,14 @@ module top
7 , inout wire [10:1] gpioa 7 , inout wire [10:1] gpioa
8 , inout wire [28:13] gpiob 8 , inout wire [28:13] gpiob
9 , inout wire [40:31] gpioc 9 , inout wire [40:31] gpioc
10 , output wire clock_out
11 10
12 , output wire rs232_tx 11 , output wire rs232_tx
13 , input wire rs232_rx 12 , input wire rs232_rx
13 , output wire rs232_rts
14 , input wire rs232_cts
15
16 , output wire debug_tx
17 , output wire debug_rx
14 18
15 , output bit ram_resetn 19 , output bit ram_resetn
16 , output bit ram_csn 20 , output bit ram_csn
@@ -20,11 +24,14 @@ module top
20 , inout bit [7:0] ram_data 24 , inout bit [7:0] ram_data
21 ); 25 );
22 26
27 assign debug_tx = rs232_tx;
28 assign debug_rx = rs232_rx;
29
23 bit internal_clock; 30 bit internal_clock;
24 bit internal_reset; 31 bit internal_reset;
25 pll 32 pll
26 #( .MULTIPLY_BY(3) 33 #( .MULTIPLY_BY(1)
27 , .DIVIDE_BY(5) 34 , .DIVIDE_BY(1)
28 ) fastpll 35 ) fastpll
29 ( .native_clk(clock) 36 ( .native_clk(clock)
30 , .reset_n(resetn) 37 , .reset_n(resetn)
@@ -32,51 +39,36 @@ module top
32 , .reset(internal_reset) 39 , .reset(internal_reset)
33 ); 40 );
34 41
35 //assign clock_out = internal_clock; 42 bit rs232_tx_clock;
36 43 bit rs232_tx_reset = 1;
37 bit rs232_tx_clock = 0; 44 always @(posedge rs232_tx_clock) begin
38 bit [17:0] rs232_tx_div = 0;
39 always @(posedge internal_clock) begin
40 if (internal_reset) begin 45 if (internal_reset) begin
41 rs232_tx_clock = 0; 46 rs232_tx_reset = 1;
42 rs232_tx_div = 0;
43 end else begin 47 end else begin
44 if (++rs232_tx_div == 130) begin // (30MHz/2)/115200 48 rs232_tx_reset = 0;
45 ++rs232_tx_clock;
46 rs232_tx_div = 0;
47 end
48 end 49 end
49 end 50 end
50 51
51 assign clock_out = rs232_tx_clock; 52 bit rs232_rx_clock;
52 53 assign rs232_rx_clock = internal_clock;
53 bit rs232_rx_clock = 0;
54 bit [4:0] rs232_rx_div = 0;
55 always @(posedge internal_clock) begin
56 if (internal_reset) begin
57 rs232_rx_clock = 0;
58 rs232_rx_div = 0;
59 end else begin
60 if (++rs232_rx_div == 16) begin // (30MHz/2)/(115200*8)
61 ++rs232_rx_clock;
62 rs232_rx_div = 0;
63 end
64 end
65 end
66 54
67 bit wire_tx_ready; 55 bit wire_tx_ready;
68 bit wire_tx_valid; 56 bit wire_tx_valid;
69 uart_byte_t wire_tx_data; 57 uart_byte_t wire_tx_data;
70 58
71 rs232_tx wiretx 59 rs232_tx
60 #( .PARITY(1)
61 , .STOP_BITS(2)
62 ) wiretx
72 ( .clock(rs232_tx_clock) 63 ( .clock(rs232_tx_clock)
73 , .reset(internal_reset) 64 , .reset(rs232_tx_reset)
74 65
75 , .out_ready(wire_tx_ready) 66 , .out_ready(wire_tx_ready)
76 , .out_valid(wire_tx_valid) 67 , .out_valid(wire_tx_valid)
77 , .out_data(wire_tx_data) 68 , .out_data(wire_tx_data)
78 69
79 , .tx(rs232_tx) 70 , .tx(rs232_tx)
71 , .cts(rs232_cts)
80 ); 72 );
81 73
82 bit rs232_tx_ready; 74 bit rs232_tx_ready;
@@ -88,6 +80,7 @@ module top
88 ) fifotx 80 ) fifotx
89 ( .clock_in(internal_clock) 81 ( .clock_in(internal_clock)
90 , .clock_out(rs232_tx_clock) 82 , .clock_out(rs232_tx_clock)
83 , .reset(internal_reset || rs232_tx_reset)
91 84
92 , .in_ready(rs232_tx_ready) 85 , .in_ready(rs232_tx_ready)
93 , .in_valid(rs232_tx_valid) 86 , .in_valid(rs232_tx_valid)
@@ -103,16 +96,20 @@ module top
103 uart_byte_t wire_rx_data; 96 uart_byte_t wire_rx_data;
104 97
105 rs232_rx 98 rs232_rx
106 #( .OVERSAMPLE(7) 99 #( .PARITY(1)
100 , .OVERSAMPLE(433)
107 ) wirerx 101 ) wirerx
108 ( .clock(rs232_rx_clock) 102 ( .clock(rs232_rx_clock)
109 , .reset(internal_reset) 103 , .reset(internal_reset)
110 104
105 , .clock_out(rs232_tx_clock)
106
111 , .in_ready(wire_rx_ready) 107 , .in_ready(wire_rx_ready)
112 , .in_valid(wire_rx_valid) 108 , .in_valid(wire_rx_valid)
113 , .in_data(wire_rx_data) 109 , .in_data(wire_rx_data)
114 110
115 , .rx(rs232_rx) 111 , .rx(rs232_rx)
112 , .rts(rs232_rts)
116 ); 113 );
117 114
118 bit rs232_rx_ready; 115 bit rs232_rx_ready;
@@ -122,8 +119,9 @@ module top
122 fifo 119 fifo
123 #( .WIDTH_BITS($bits(uart_byte_t)) 120 #( .WIDTH_BITS($bits(uart_byte_t))
124 ) fiforx 121 ) fiforx
125 ( .clock_in(rs232_clock) 122 ( .clock_in(rs232_rx_clock)
126 , .clock_out(internal_clock) 123 , .clock_out(internal_clock)
124 , .reset(internal_reset)
127 125
128 , .in_ready(wire_rx_ready) 126 , .in_ready(wire_rx_ready)
129 , .in_valid(wire_rx_valid) 127 , .in_valid(wire_rx_valid)
@@ -182,6 +180,7 @@ module top
182 bit [7:0] ram_data_out; 180 bit [7:0] ram_data_out;
183 assign ram_data = ram_data_oe ? ram_data_out : 8'bZ; 181 assign ram_data = ram_data_oe ? ram_data_out : 8'bZ;
184 182
183/*
185 alt_jtag_atlantic 184 alt_jtag_atlantic
186 #( .INSTANCE_ID(0) 185 #( .INSTANCE_ID(0)
187 , .LOG2_RXFIFO_DEPTH(10) 186 , .LOG2_RXFIFO_DEPTH(10)
@@ -199,6 +198,15 @@ module top
199 , .t_dav(ram_rx_ready) 198 , .t_dav(ram_rx_ready)
200 , .t_ena(ram_rx_valid) 199 , .t_ena(ram_rx_valid)
201 ); 200 );
201*/
202
203 assign ram_tx_ready = rs232_tx_ready;
204 assign rs232_tx_valid = ram_tx_valid;
205 assign rs232_tx_data = ram_tx_data;
206
207 assign rs232_rx_ready = ram_rx_ready;
208 assign ram_rx_valid = rs232_rx_valid;
209 assign ram_rx_data = rs232_rx_data;
202 210
203 echo_arbiter uart0arb 211 echo_arbiter uart0arb
204 ( .clock(internal_clock) 212 ( .clock(internal_clock)
@@ -445,9 +453,7 @@ module top
445 bit rx_valid; 453 bit rx_valid;
446 uart_byte_t rx_data; 454 uart_byte_t rx_data;
447 455
448 core 456 core cpu
449 #( .JTAG_INSTANCE(1+i)
450 ) cpu
451 ( .clk(internal_clock) 457 ( .clk(internal_clock)
452 , .reset(internal_reset) 458 , .reset(internal_reset)
453 459
@@ -507,33 +513,23 @@ module top
507 , .led_link(local_led_link[i]) 513 , .led_link(local_led_link[i])
508 ); 514 );
509 515
510 if (i == `NUM_PDPS-1) begin 516 alt_jtag_atlantic
511 assign tx_ready = rs232_tx_ready; 517 #( .INSTANCE_ID(i)
512 assign rs232_tx_valid = tx_valid; 518 , .LOG2_RXFIFO_DEPTH(10)
513 assign rs232_tx_data = tx_data; 519 , .LOG2_TXFIFO_DEPTH(10)
514 520 , .SLD_AUTO_INSTANCE_INDEX("NO")
515 assign rs232_rx_ready = rx_ready; 521 ) uart
516 assign rx_valid = rs232_rx_valid; 522 ( .clk(internal_clock)
517 assign rx_data = rs232_rx_data; 523 , .rst_n(!internal_reset)
518 end else begin
519 alt_jtag_atlantic
520 #( .INSTANCE_ID(1+i)
521 , .LOG2_RXFIFO_DEPTH(10)
522 , .LOG2_TXFIFO_DEPTH(10)
523 , .SLD_AUTO_INSTANCE_INDEX("NO")
524 ) uart
525 ( .clk(internal_clock)
526 , .rst_n(!internal_reset)
527 524
528 , .r_dat(tx_data) 525 , .r_dat(tx_data)
529 , .r_val(tx_valid) 526 , .r_val(tx_valid)
530 , .r_ena(tx_ready) 527 , .r_ena(tx_ready)
531 528
532 , .t_dat(rx_data) 529 , .t_dat(rx_data)
533 , .t_dav(rx_ready) 530 , .t_dav(rx_ready)
534 , .t_ena(rx_valid) 531 , .t_ena(rx_valid)
535 ); 532 );
536 end
537 533
538 end 534 end
539 535