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