summaryrefslogtreecommitdiff
path: root/hdl/top.sv
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hdl/top.sv133
1 files changed, 132 insertions, 1 deletions
diff --git a/hdl/top.sv b/hdl/top.sv
index 20294ff..ca45aa9 100644
--- a/hdl/top.sv
+++ b/hdl/top.sv
@@ -9,6 +9,9 @@ module top
9 , inout wire [40:31] gpioc 9 , inout wire [40:31] gpioc
10 , output wire clock_out 10 , output wire clock_out
11 11
12 , output wire rs232_tx
13 , input wire rs232_rx
14
12 , output bit ram_resetn 15 , output bit ram_resetn
13 , output bit ram_csn 16 , output bit ram_csn
14 , output bit ram_clkp 17 , output bit ram_clkp
@@ -29,7 +32,91 @@ module top
29 , .reset(internal_reset) 32 , .reset(internal_reset)
30 ); 33 );
31 34
32 assign clock_out = internal_clock; 35 //assign clock_out = internal_clock;
36
37 bit rs232_clock = 0;
38 bit [17:0] rs232_div = 0;
39 always @(posedge internal_clock) begin
40 if (internal_reset) begin
41 rs232_clock = 0;
42 rs232_div = 0;
43 end else begin
44 if (++rs232_div == 49987) begin // (30MHz/2)/300
45 ++rs232_clock;
46 rs232_div = 0;
47 end
48 end
49 end
50
51 assign clock_out = rs232_clock;
52
53 bit wire_tx_ready;
54 bit wire_tx_valid;
55 uart_byte_t wire_tx_data;
56
57 rs232_tx wiretx
58 ( .clock(rs232_clock)
59 , .reset(internal_reset)
60
61 , .out_ready(wire_tx_ready)
62 , .out_valid(wire_tx_valid)
63 , .out_data(wire_tx_data)
64
65 , .tx(rs232_tx)
66 );
67
68 bit rs232_tx_ready;
69 bit rs232_tx_valid;
70 uart_byte_t rs232_tx_data;
71
72 fifo
73 #( .WIDTH_BITS($bits(uart_byte_t))
74 ) fifotx
75 ( .clock_in(internal_clock)
76 , .clock_out(rs232_clock)
77
78 , .in_ready(rs232_tx_ready)
79 , .in_valid(rs232_tx_valid)
80 , .in_data(rs232_tx_data)
81
82 , .out_ready(wire_tx_ready)
83 , .out_valid(wire_tx_valid)
84 , .out_data(wire_tx_data)
85 );
86
87 bit wire_rx_ready;
88 bit wire_rx_valid;
89 uart_byte_t wire_rx_data;
90
91 rs232_rx wirerx
92 ( .clock(rs232_clock)
93 , .reset(internal_reset)
94
95 , .in_ready(wire_rx_ready)
96 , .in_valid(wire_rx_valid)
97 , .in_data(wire_rx_data)
98
99 , .rx(rs232_rx)
100 );
101
102 bit rs232_rx_ready;
103 bit rs232_rx_valid;
104 uart_byte_t rs232_rx_data;
105
106 fifo
107 #( .WIDTH_BITS($bits(uart_byte_t))
108 ) fiforx
109 ( .clock_in(rs232_clock)
110 , .clock_out(internal_clock)
111
112 , .in_ready(wire_rx_ready)
113 , .in_valid(wire_rx_valid)
114 , .in_data(wire_rx_data)
115
116 , .out_ready(rs232_rx_ready)
117 , .out_valid(rs232_rx_valid)
118 , .out_data(rs232_rx_data)
119 );
33 120
34 bit ram_rx_ready; 121 bit ram_rx_ready;
35 bit ram_rx_valid; 122 bit ram_rx_valid;
@@ -334,12 +421,28 @@ module top
334 genvar i; 421 genvar i;
335 for (i = 0; i < `NUM_PDPS; ++i) begin : core 422 for (i = 0; i < `NUM_PDPS; ++i) begin : core
336 423
424 bit tx_ready;
425 bit tx_valid;
426 uart_byte_t tx_data;
427
428 bit rx_ready;
429 bit rx_valid;
430 uart_byte_t rx_data;
431
337 core 432 core
338 #( .JTAG_INSTANCE(1+i) 433 #( .JTAG_INSTANCE(1+i)
339 ) cpu 434 ) cpu
340 ( .clk(internal_clock) 435 ( .clk(internal_clock)
341 , .reset(internal_reset) 436 , .reset(internal_reset)
342 437
438 , .uart_tx_ready(tx_ready)
439 , .uart_tx_valid(tx_valid)
440 , .uart_tx_data(tx_data)
441
442 , .uart_rx_ready(rx_ready)
443 , .uart_rx_valid(rx_valid)
444 , .uart_rx_data(rx_data)
445
343 , .mem_command_ready(pdp_command_ready[i]) 446 , .mem_command_ready(pdp_command_ready[i])
344 , .mem_command_valid(pdp_command_valid[i]) 447 , .mem_command_valid(pdp_command_valid[i])
345 , .mem_command(pdp_command_data[i]) 448 , .mem_command(pdp_command_data[i])
@@ -388,6 +491,34 @@ module top
388 , .led_link(local_led_link[i]) 491 , .led_link(local_led_link[i])
389 ); 492 );
390 493
494 if (i == `NUM_PDPS-1) begin
495 assign tx_ready = rs232_tx_ready;
496 assign rs232_tx_valid = tx_valid;
497 assign rs232_tx_data = tx_data;
498
499 assign rs232_rx_ready = rx_ready;
500 assign rx_valid = rs232_rx_valid;
501 assign rx_data = rs232_rx_data;
502 end else begin
503 alt_jtag_atlantic
504 #( .INSTANCE_ID(1+i)
505 , .LOG2_RXFIFO_DEPTH(10)
506 , .LOG2_TXFIFO_DEPTH(10)
507 , .SLD_AUTO_INSTANCE_INDEX("NO")
508 ) uart
509 ( .clk(internal_clock)
510 , .rst_n(!internal_reset)
511
512 , .r_dat(tx_data)
513 , .r_val(tx_valid)
514 , .r_ena(tx_ready)
515
516 , .t_dat(rx_data)
517 , .t_dav(rx_ready)
518 , .t_ena(rx_valid)
519 );
520 end
521
391 end 522 end
392 523
393 endgenerate 524 endgenerate