diff options
Diffstat (limited to '')
| -rw-r--r-- | hdl/top.sv | 133 |
1 files changed, 132 insertions, 1 deletions
| @@ -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 |
