FreeCalypso > hg > fc-small-hw
changeset 28:bd7eec55ebc0
duart28: new design ideas
* added input buffers (LVC with Ioff feature) to prevent high current flow
from powered-up target into powered-down FT2232D inputs;
* added series resistors on outputs to limit current flow from powered-up
adapter into powered-down Calypso target;
* buffer IC changed from 74LVC125A to 74LVC541A.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 28 Jun 2020 22:06:24 +0000 |
parents | b58388f57c16 |
children | ccb544045646 |
files | duart28/src/MCL duart28/src/primitives duart28/src/vsrc/application_block.v duart28/src/vsrc/board.v |
diffstat | 4 files changed, 88 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/duart28/src/MCL Sat Jun 13 18:12:28 2020 +0000 +++ b/duart28/src/MCL Sun Jun 28 22:06:24 2020 +0000 @@ -99,16 +99,23 @@ footprint=file:TLV702xxDBV npins=5 +part 74LVC541A: + device=74LVC541A + manufacturer=Nexperia + manufacturer_part_number=74LVC541APW + description=Octal buffer IC, TSSOP20 package + vendor=Digi-Key + vendor_part_number=1727-6370-1-ND + footprint=file:TSSOP20_MNF + npins=20 + # buffer for driving outputs from the adapter U5: - device=74LVC125A - manufacturer=Nexperia - manufacturer_part_number=74LVC125APW - description=Quad buffer IC, TSSOP14 package - vendor=Digi-Key - vendor_part_number=1727-2868-ND - footprint=file:TSSOP14_MNF - npins=14 + part=74LVC541A + +# buffer for inputs coming into the adapter +U6: + part=74LVC541A # Crystal
--- a/duart28/src/primitives Sat Jun 13 18:12:28 2020 +0000 +++ b/duart28/src/primitives Sun Jun 28 22:06:24 2020 +0000 @@ -13,9 +13,9 @@ pkg_5pin numpins 5; pkg_8pin numpins 8; -/* 74LVC125A single buffer and common part subpackages */ -buffer_ic_slot mapped_pins (A, Y, nOE); -buffer_ic_common mapped_pins (Vcc, GND); +/* 74LVC541A single buffer and common part subpackages */ +buffer_ic_slot mapped_pins (A, Y); +buffer_ic_common mapped_pins (Vcc, GND, nOE1, nOE2); /* crystal resonator */ xtal_2pin_pkg numpins 2;
--- a/duart28/src/vsrc/application_block.v Sat Jun 13 18:12:28 2020 +0000 +++ b/duart28/src/vsrc/application_block.v Sun Jun 28 22:06:24 2020 +0000 @@ -3,39 +3,90 @@ * dual UART with 2.8V outputs. */ -module application_block (GND, P_2V8, ADBUS, BDBUS); +module application_block (GND, P_3V3, P_2V8, ADBUS, BDBUS); -input GND, P_2V8; +input GND, P_3V3, P_2V8; inout [7:0] ADBUS, BDBUS; /* 2.8V output wires */ -wire TxD_2V8, RTS_2V8, DTR_2V8, TxD2_2V8; +wire TxD_2V8_before_R, RTS_2V8_before_R, DTR_2V8_before_R, TxD2_2V8_before_R; +wire TxD_2V8_after_R, RTS_2V8_after_R, DTR_2V8_after_R, TxD2_2V8_after_R; + +/* input signal wires */ + +wire RxD_in, CTS_in, DSR_in, DCD_in, RI_in, RxD2_in; /* output buffers */ -buffer_ic_common output_buf_common (.Vcc(P_2V8), .GND(GND)); +buffer_ic_common output_buf_common (.Vcc(P_2V8), + .GND(GND), + .nOE1(GND), + .nOE2(GND) + ); + capacitor output_buf_bypass_cap (P_2V8, GND); -buffer_ic_slot buf_TxD (.A(ADBUS[0]), .Y(TxD_2V8), .nOE(GND)); -buffer_ic_slot buf_RTS (.A(ADBUS[2]), .Y(RTS_2V8), .nOE(GND)); -buffer_ic_slot buf_DTR (.A(ADBUS[4]), .Y(DTR_2V8), .nOE(GND)); -buffer_ic_slot buf_TxD2 (.A(BDBUS[0]), .Y(TxD2_2V8), .nOE(GND)); +buffer_ic_slot buf_TxD (.A(ADBUS[0]), .Y(TxD_2V8_before_R)); +buffer_ic_slot buf_RTS (.A(ADBUS[2]), .Y(RTS_2V8_before_R)); +buffer_ic_slot buf_DTR (.A(ADBUS[4]), .Y(DTR_2V8_before_R)); +buffer_ic_slot buf_TxD2 (.A(BDBUS[0]), .Y(TxD2_2V8_before_R)); + +buffer_ic_slot unused_output_buf1 (.A(GND), .Y()); +buffer_ic_slot unused_output_buf2 (.A(GND), .Y()); +buffer_ic_slot unused_output_buf3 (.A(GND), .Y()); +buffer_ic_slot unused_output_buf4 (.A(GND), .Y()); + +/* output series resistors */ + +resistor TxD_series_R (TxD_2V8_before_R, TxD_2V8_after_R); +resistor RTS_series_R (RTS_2V8_before_R, RTS_2V8_after_R); +resistor DTR_series_R (DTR_2V8_before_R, DTR_2V8_after_R); +resistor TxD2_series_R (TxD2_2V8_before_R, TxD2_2V8_after_R); + +/* input buffers */ + +buffer_ic_common input_buf_common (.Vcc(P_3V3), + .GND(GND), + .nOE1(GND), + .nOE2(GND) + ); + +capacitor input_buf_bypass_cap (P_3V3, GND); + +buffer_ic_slot buf_RxD (.A(RxD_in), .Y(ADBUS[1])); +buffer_ic_slot buf_CTS (.A(CTS_in), .Y(ADBUS[3])); +buffer_ic_slot buf_DSR (.A(DSR_in), .Y(ADBUS[5])); +buffer_ic_slot buf_DCD (.A(DCD_in), .Y(ADBUS[6])); +buffer_ic_slot buf_RI (.A(RI_in), .Y(ADBUS[7])); +buffer_ic_slot buf_RxD2 (.A(RxD2_in), .Y(BDBUS[1])); + +buffer_ic_slot unused_input_buf1 (.A(GND), .Y()); +buffer_ic_slot unused_input_buf2 (.A(GND), .Y()); + +/* input pull-up resistors */ + +resistor RxD_pullup (RxD_in, P_2V8); +resistor CTS_pullup (CTS_in, P_2V8); +resistor DSR_pullup (DSR_in, P_2V8); +resistor DCD_pullup (DCD_in, P_2V8); +resistor RI_pullup (RI_in, P_2V8); +resistor RxD2_pullup (RxD2_in, P_2V8); /* target interface headers */ target_if target_if ( .GND(GND), - .UART0_TxD(TxD_2V8), - .UART0_RxD(ADBUS[1]), - .UART0_RTS(RTS_2V8), - .UART0_CTS(ADBUS[3]), - .UART0_DTR(DTR_2V8), - .UART0_DSR(ADBUS[5]), - .UART0_DCD(ADBUS[6]), - .UART0_RI(ADBUS[7]), - .UART1_TxD(TxD2_2V8), - .UART1_RxD(BDBUS[1]) + .UART0_TxD(TxD_2V8_after_R), + .UART0_RxD(RxD_in), + .UART0_RTS(RTS_2V8_after_R), + .UART0_CTS(CTS_in), + .UART0_DTR(DTR_2V8_after_R), + .UART0_DSR(DSR_in), + .UART0_DCD(DCD_in), + .UART0_RI(RI_in), + .UART1_TxD(TxD2_2V8_after_R), + .UART1_RxD(RxD2_in) ); endmodule
--- a/duart28/src/vsrc/board.v Sat Jun 13 18:12:28 2020 +0000 +++ b/duart28/src/vsrc/board.v Sun Jun 28 22:06:24 2020 +0000 @@ -22,6 +22,7 @@ regulator_with_caps reg_2V8 (.GND(GND), .IN(P_5V), .OUT(P_2V8)); application_block app ( .GND(GND), + .P_3V3(P_3V3), .P_2V8(P_2V8), .ADBUS(ADBUS), .BDBUS(BDBUS)