Add GW4201D files

This commit is contained in:
Zane Kaminski 2020-07-25 04:32:25 -04:00
parent 98f0c533bc
commit f99d3e4b9a
106 changed files with 295023 additions and 0 deletions

4548
Docs.sch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,63 @@
RAM2GS II (GW4201D) expands the Apple IIgs's
fast memory to 8 MB.
Low-Power, SDRAM-Based Design
----------------------------------------
Thanks to a modern, low-power design,
RAM2GS II uses a maximum of 0.15 watts when idle
(30 mA @ 5V) and 0.3W in active use (60 mA @ 5V).
Unlike other IIgs expansion RAM cards, which are
built with vintage asynchronous DRAM chips,
RAM2GS II uses modern SDRAM. This design allows for
low power consumption and improved reliability
over other memory cards using 15+ year old chips.
Small Size, Low-Profile
----------------------------------------
RAM2GS II features a small board outline and is the
thinnest Apple IIgs expansion memory card ever produced,
at under 4mm thin. Small and thin dimensions improve
the mechanical compatibility between RAM2GS II and
peripheral cards installed into the IIgs's Slot 7.
Adjustable Capacity, Highly Compatible
----------------------------------------
The Apple IIgs can utilize up to 8 MB of fast memory,
but due to limitations of the Apple IIgs hardware,
not all 8 MB is considered "DMA-compatible."
Only 4 MB of the 8 MB provided by an expansion RAM
card such as the RAM2GS II is DMA-compatible,
and peripheral cards which use DMA are
not able to access expansion memory beyond 4 MB.
RAM2GS II implements an adjustable capacity
feature, allowing the user to select between
fully DMA-compatible 4 MB capacity, or
partially DMA-compatible 8MB capacity.
Capacity settings can be set temporarily
or saved in nonvolatile memory.
The capacity adjustment utility is available on
_RAM2GS II's support page_.
Ecologically Friendly, Gold-Plated PCB
----------------------------------------
RAM2GS II features a lead-free, ENIG gold-plated,
4-layer PCB and is fully EU RoHS-compliant.
All units are tested extensively before shipment.
Only new parts are used to build RAM2GS II,
and all RAM2GS II cards are manufactured in our
semi-automated facility in Columbus, Ohio,
in the United States.
Open-Source Design
----------------------------------------
RAM2GS II's design is fully open-source.
The schematics, board layouts, CPLD firmware,
and utility software are all freely available
for commercial and noncommercial use.
To download the design files, visit the
_Garrett's Workshop GitHub page_.

Binary file not shown.

Binary file not shown.

BIN
Documentation/Placement.pdf Normal file

Binary file not shown.

552
RAM2GS-cache.lib Normal file
View File

@ -0,0 +1,552 @@
EESchema-LIBRARY Version 2.4
#encoding utf-8
#
# Connector_Generic_Conn_02x05_Odd_Even
#
DEF Connector_Generic_Conn_02x05_Odd_Even J 0 40 Y N 1 F N
F0 "J" 50 300 50 H V C CNN
F1 "Connector_Generic_Conn_02x05_Odd_Even" 50 -300 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 250 150 -250 1 1 10 f
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
X Pin_1 1 -200 200 150 R 50 50 1 1 P
X Pin_10 10 300 -200 150 L 50 50 1 1 P
X Pin_2 2 300 200 150 L 50 50 1 1 P
X Pin_3 3 -200 100 150 R 50 50 1 1 P
X Pin_4 4 300 100 150 L 50 50 1 1 P
X Pin_5 5 -200 0 150 R 50 50 1 1 P
X Pin_6 6 300 0 150 L 50 50 1 1 P
X Pin_7 7 -200 -100 150 R 50 50 1 1 P
X Pin_8 8 300 -100 150 L 50 50 1 1 P
X Pin_9 9 -200 -200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Connector_Generic_Conn_02x22_Counter_Clockwise
#
DEF Connector_Generic_Conn_02x22_Counter_Clockwise J 0 40 Y N 1 F N
F0 "J" 50 1100 50 H V C CNN
F1 "Connector_Generic_Conn_02x22_Counter_Clockwise" 50 -1200 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Connector*:*_2x??_*
$ENDFPLIST
DRAW
S -50 -1095 0 -1105 1 1 6 N
S -50 -995 0 -1005 1 1 6 N
S -50 -895 0 -905 1 1 6 N
S -50 -795 0 -805 1 1 6 N
S -50 -695 0 -705 1 1 6 N
S -50 -595 0 -605 1 1 6 N
S -50 -495 0 -505 1 1 6 N
S -50 -395 0 -405 1 1 6 N
S -50 -295 0 -305 1 1 6 N
S -50 -195 0 -205 1 1 6 N
S -50 -95 0 -105 1 1 6 N
S -50 5 0 -5 1 1 6 N
S -50 105 0 95 1 1 6 N
S -50 205 0 195 1 1 6 N
S -50 305 0 295 1 1 6 N
S -50 405 0 395 1 1 6 N
S -50 505 0 495 1 1 6 N
S -50 605 0 595 1 1 6 N
S -50 705 0 695 1 1 6 N
S -50 805 0 795 1 1 6 N
S -50 905 0 895 1 1 6 N
S -50 1005 0 995 1 1 6 N
S -50 1050 150 -1150 1 1 10 f
S 150 -1095 100 -1105 1 1 6 N
S 150 -995 100 -1005 1 1 6 N
S 150 -895 100 -905 1 1 6 N
S 150 -795 100 -805 1 1 6 N
S 150 -695 100 -705 1 1 6 N
S 150 -595 100 -605 1 1 6 N
S 150 -495 100 -505 1 1 6 N
S 150 -395 100 -405 1 1 6 N
S 150 -295 100 -305 1 1 6 N
S 150 -195 100 -205 1 1 6 N
S 150 -95 100 -105 1 1 6 N
S 150 5 100 -5 1 1 6 N
S 150 105 100 95 1 1 6 N
S 150 205 100 195 1 1 6 N
S 150 305 100 295 1 1 6 N
S 150 405 100 395 1 1 6 N
S 150 505 100 495 1 1 6 N
S 150 605 100 595 1 1 6 N
S 150 705 100 695 1 1 6 N
S 150 805 100 795 1 1 6 N
S 150 905 100 895 1 1 6 N
S 150 1005 100 995 1 1 6 N
X Pin_1 1 -200 1000 150 R 50 50 1 1 P
X Pin_10 10 -200 100 150 R 50 50 1 1 P
X Pin_11 11 -200 0 150 R 50 50 1 1 P
X Pin_12 12 -200 -100 150 R 50 50 1 1 P
X Pin_13 13 -200 -200 150 R 50 50 1 1 P
X Pin_14 14 -200 -300 150 R 50 50 1 1 P
X Pin_15 15 -200 -400 150 R 50 50 1 1 P
X Pin_16 16 -200 -500 150 R 50 50 1 1 P
X Pin_17 17 -200 -600 150 R 50 50 1 1 P
X Pin_18 18 -200 -700 150 R 50 50 1 1 P
X Pin_19 19 -200 -800 150 R 50 50 1 1 P
X Pin_2 2 -200 900 150 R 50 50 1 1 P
X Pin_20 20 -200 -900 150 R 50 50 1 1 P
X Pin_21 21 -200 -1000 150 R 50 50 1 1 P
X Pin_22 22 -200 -1100 150 R 50 50 1 1 P
X Pin_23 23 300 -1100 150 L 50 50 1 1 P
X Pin_24 24 300 -1000 150 L 50 50 1 1 P
X Pin_25 25 300 -900 150 L 50 50 1 1 P
X Pin_26 26 300 -800 150 L 50 50 1 1 P
X Pin_27 27 300 -700 150 L 50 50 1 1 P
X Pin_28 28 300 -600 150 L 50 50 1 1 P
X Pin_29 29 300 -500 150 L 50 50 1 1 P
X Pin_3 3 -200 800 150 R 50 50 1 1 P
X Pin_30 30 300 -400 150 L 50 50 1 1 P
X Pin_31 31 300 -300 150 L 50 50 1 1 P
X Pin_32 32 300 -200 150 L 50 50 1 1 P
X Pin_33 33 300 -100 150 L 50 50 1 1 P
X Pin_34 34 300 0 150 L 50 50 1 1 P
X Pin_35 35 300 100 150 L 50 50 1 1 P
X Pin_36 36 300 200 150 L 50 50 1 1 P
X Pin_37 37 300 300 150 L 50 50 1 1 P
X Pin_38 38 300 400 150 L 50 50 1 1 P
X Pin_39 39 300 500 150 L 50 50 1 1 P
X Pin_4 4 -200 700 150 R 50 50 1 1 P
X Pin_40 40 300 600 150 L 50 50 1 1 P
X Pin_41 41 300 700 150 L 50 50 1 1 P
X Pin_42 42 300 800 150 L 50 50 1 1 P
X Pin_43 43 300 900 150 L 50 50 1 1 P
X Pin_44 44 300 1000 150 L 50 50 1 1 P
X Pin_5 5 -200 600 150 R 50 50 1 1 P
X Pin_6 6 -200 500 150 R 50 50 1 1 P
X Pin_7 7 -200 400 150 R 50 50 1 1 P
X Pin_8 8 -200 300 150 R 50 50 1 1 P
X Pin_9 9 -200 200 150 R 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_C_Small
#
DEF Device_C_Small C 0 10 N N 1 F N
F0 "C" 10 70 50 H V L CNN
F1 "Device_C_Small" 10 -80 50 H V L CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
C_*
$ENDFPLIST
DRAW
P 2 0 1 13 -60 -20 60 -20 N
P 2 0 1 12 -60 20 60 20 N
X ~ 1 0 100 80 D 50 50 1 1 P
X ~ 2 0 -100 80 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_R_Pack04
#
DEF Device_R_Pack04 RN 0 0 Y N 1 F N
F0 "RN" -300 0 50 V V C CNN
F1 "Device_R_Pack04" 200 0 50 V V C CNN
F2 "" 275 0 50 V I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
DIP*
SOIC*
$ENDFPLIST
DRAW
S -250 -95 150 95 0 1 10 f
S -225 75 -175 -75 0 1 10 N
S -125 75 -75 -75 0 1 10 N
S -25 75 25 -75 0 1 10 N
S 75 75 125 -75 0 1 10 N
P 2 0 1 0 -200 -100 -200 -75 N
P 2 0 1 0 -200 75 -200 100 N
P 2 0 1 0 -100 -100 -100 -75 N
P 2 0 1 0 -100 75 -100 100 N
P 2 0 1 0 0 -100 0 -75 N
P 2 0 1 0 0 75 0 100 N
P 2 0 1 0 100 -100 100 -75 N
P 2 0 1 0 100 75 100 100 N
X R1.1 1 -200 -200 100 U 50 50 1 1 P
X R2.1 2 -100 -200 100 U 50 50 1 1 P
X R3.1 3 0 -200 100 U 50 50 1 1 P
X R4.1 4 100 -200 100 U 50 50 1 1 P
X R4.2 5 100 200 100 D 50 50 1 1 P
X R3.2 6 0 200 100 D 50 50 1 1 P
X R2.2 7 -100 200 100 D 50 50 1 1 P
X R1.2 8 -200 200 100 D 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Device_R_Small
#
DEF Device_R_Small R 0 10 N N 1 F N
F0 "R" 30 20 50 H V L CNN
F1 "Device_R_Small" 30 -40 50 H V L CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
R_*
$ENDFPLIST
DRAW
S -30 70 30 -70 0 1 8 N
X ~ 1 0 100 30 D 50 50 1 1 P
X ~ 2 0 -100 30 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# GW_Logic_741G04GW
#
DEF GW_Logic_741G04GW U 0 40 Y Y 1 F N
F0 "U" 0 250 50 H V C CNN
F1 "GW_Logic_741G04GW" 0 -250 50 H V C CNN
F2 "stdpads:SOT-353" 0 -300 50 H I C TNN
F3 "" 0 -200 60 H I C CNN
DRAW
S 200 -200 -200 200 0 1 10 f
X NC 1 -350 100 150 R 50 50 1 1 N
X A 2 -400 0 200 R 50 50 1 1 I
X GND 3 -400 -100 200 R 50 50 1 1 W
X Y 4 400 -100 200 L 50 50 1 1 O
X Vcc 5 400 100 200 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# GW_Logic_74245
#
DEF GW_Logic_74245 U 0 40 Y Y 1 F N
F0 "U" 0 600 50 H V C CNN
F1 "GW_Logic_74245" 0 -600 50 H V C CNN
F2 "" 0 -650 50 H I C TNN
F3 "" 0 100 60 H I C CNN
DRAW
S -200 550 200 -550 0 1 10 f
X AtoB 1 -400 450 200 R 50 50 1 1 I
X GND 10 -400 -450 200 R 50 50 1 1 W
X B7 11 400 -450 200 L 50 50 1 1 B
X B6 12 400 -350 200 L 50 50 1 1 B
X B5 13 400 -250 200 L 50 50 1 1 B
X B4 14 400 -150 200 L 50 50 1 1 B
X B3 15 400 -50 200 L 50 50 1 1 B
X B2 16 400 50 200 L 50 50 1 1 B
X B1 17 400 150 200 L 50 50 1 1 B
X B0 18 400 250 200 L 50 50 1 1 B
X ~OE~ 19 400 350 200 L 50 50 1 1 I
X A0 2 -400 350 200 R 50 50 1 1 B
X Vcc 20 400 450 200 L 50 50 1 1 W
X A1 3 -400 250 200 R 50 50 1 1 B
X A2 4 -400 150 200 R 50 50 1 1 B
X A3 5 -400 50 200 R 50 50 1 1 B
X A4 6 -400 -50 200 R 50 50 1 1 B
X A5 7 -400 -150 200 R 50 50 1 1 B
X A6 8 -400 -250 200 R 50 50 1 1 B
X A7 9 -400 -350 200 R 50 50 1 1 B
ENDDRAW
ENDDEF
#
# GW_Logic_Oscillator_4P
#
DEF GW_Logic_Oscillator_4P U 0 40 Y Y 1 F N
F0 "U" 0 250 50 H V C CNN
F1 "GW_Logic_Oscillator_4P" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
S -250 200 250 -100 0 1 10 f
X EN 1 -350 100 100 R 50 50 1 1 I
X GND 2 -350 0 100 R 50 50 1 1 W
X Output 3 350 0 100 L 50 50 1 1 O
X Vdd 4 350 100 100 L 50 50 1 1 W
ENDDRAW
ENDDEF
#
# GW_PLD_EPM240T100
#
DEF GW_PLD_EPM240T100 U 0 40 Y Y 1 L N
F0 "U" 0 50 50 H V C CNN
F1 "GW_PLD_EPM240T100" 0 -50 50 H V C CNN
F2 "Package_QFP:LQFP-100_14x14mm_P0.5mm" 0 -100 20 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
*QFP*P0.5mm*
$ENDFPLIST
DRAW
S -800 2200 800 -2200 1 1 10 f
X IO2_1 1 1000 2100 200 L 50 50 1 1 B
X GNDIO 10 -200 -2400 200 U 50 50 1 1 W
X IO2_100 100 1000 -2000 200 L 50 50 1 1 B
X GNDINT 11 -400 -2400 200 U 50 50 1 1 W
X IO1_12/GCLK0 12 -1000 1400 200 R 50 50 1 1 B C
X VCCINT 13 -400 2400 200 D 50 50 1 1 W
X IO1_14/GCLK1 14 -1000 1300 200 R 50 50 1 1 B C
X IO1_15 15 -1000 1200 200 R 50 50 1 1 B
X IO1_16 16 -1000 1100 200 R 50 50 1 1 B
X IO1_17 17 -1000 1000 200 R 50 50 1 1 B
X IO1_18 18 -1000 900 200 R 50 50 1 1 B
X IO1_19 19 -1000 800 200 R 50 50 1 1 B
X IO1_2 2 -1000 2100 200 R 50 50 1 1 B
X IO1_20 20 -1000 700 200 R 50 50 1 1 B
X IO1_21 21 -1000 600 200 R 50 50 1 1 B
X TMS 22 -1000 -1700 200 R 50 50 1 1 I
X TDI 23 -1000 -1800 200 R 50 50 1 1 I
X TCK 24 -1000 -1900 200 R 50 50 1 1 I C
X TDO 25 -1000 -2000 200 R 50 50 1 1 O
X IO1_26 26 -1000 500 200 R 50 50 1 1 B
X IO1_27 27 -1000 400 200 R 50 50 1 1 B
X IO1_28 28 -1000 300 200 R 50 50 1 1 B
X IO1_29 29 -1000 200 200 R 50 50 1 1 B
X IO1_3 3 -1000 2000 200 R 50 50 1 1 B
X IO1_30 30 -1000 100 200 R 50 50 1 1 B
X VCCIO1 31 -100 2400 200 D 50 50 1 1 W
X GNDIO 32 -100 -2400 200 U 50 50 1 1 W
X IO1_33 33 -1000 0 200 R 50 50 1 1 B
X IO1_34 34 -1000 -100 200 R 50 50 1 1 B
X IO1_35 35 -1000 -200 200 R 50 50 1 1 B
X IO1_36 36 -1000 -300 200 R 50 50 1 1 B
X IO1_37 37 -1000 -400 200 R 50 50 1 1 B
X IO1_38 38 -1000 -500 200 R 50 50 1 1 B
X IO1_39 39 -1000 -600 200 R 50 50 1 1 B
X IO1_4 4 -1000 1900 200 R 50 50 1 1 B
X IO1_40 40 -1000 -700 200 R 50 50 1 1 B
X IO1_41 41 -1000 -800 200 R 50 50 1 1 B
X IO1_42 42 -1000 -900 200 R 50 50 1 1 B
X IO1_43/DEV_OE 43 -1000 -1000 200 R 50 50 1 1 B
X IO1_44/DEV_CLRn 44 -1000 -1100 200 R 50 50 1 1 B
X VCCIO1 45 0 2400 200 D 50 50 1 1 W
X GNDIO 46 0 -2400 200 U 50 50 1 1 W
X IO1_47 47 -1000 -1200 200 R 50 50 1 1 B
X IO1_48 48 -1000 -1300 200 R 50 50 1 1 B
X IO1_49 49 -1000 -1400 200 R 50 50 1 1 B
X IO1_5 5 -1000 1800 200 R 50 50 1 1 B
X IO1_50 50 -1000 -1500 200 R 50 50 1 1 B
X IO1_51 51 -1000 -1600 200 R 50 50 1 1 B
X IO2_52 52 1000 2000 200 L 50 50 1 1 B
X IO2_53 53 1000 1900 200 L 50 50 1 1 B
X IO2_54 54 1000 1800 200 L 50 50 1 1 B
X IO2_55 55 1000 1700 200 L 50 50 1 1 B
X IO2_56 56 1000 1600 200 L 50 50 1 1 B
X IO2_57 57 1000 1500 200 L 50 50 1 1 B
X IO2_58 58 1000 1400 200 L 50 50 1 1 B
X VCCIO2 59 100 2400 200 D 50 50 1 1 W
X IO1_6 6 -1000 1700 200 R 50 50 1 1 B
X GNDIO 60 100 -2400 200 U 50 50 1 1 W
X IO2_61 61 1000 1300 200 L 50 50 1 1 B
X IO2_62/GCLK2 62 1000 1200 200 L 50 50 1 1 B C
X VCCINT 63 -300 2400 200 D 50 50 1 1 W
X IO2_64/GCLK3 64 1000 1100 200 L 50 50 1 1 B C
X GNDINT 65 -300 -2400 200 U 50 50 1 1 W
X IO2_66 66 1000 1000 200 L 50 50 1 1 B
X IO2_67 67 1000 900 200 L 50 50 1 1 B
X IO2_68 68 1000 800 200 L 50 50 1 1 B
X IO2_69 69 1000 700 200 L 50 50 1 1 B
X IO1_7 7 -1000 1600 200 R 50 50 1 1 B
X IO2_70 70 1000 600 200 L 50 50 1 1 B
X IO2_71 71 1000 500 200 L 50 50 1 1 B
X IO2_72 72 1000 400 200 L 50 50 1 1 B
X IO2_73 73 1000 300 200 L 50 50 1 1 B
X IO2_74 74 1000 200 200 L 50 50 1 1 B
X IO2_75 75 1000 100 200 L 50 50 1 1 B
X IO2_76 76 1000 0 200 L 50 50 1 1 B
X IO2_77 77 1000 -100 200 L 50 50 1 1 B
X IO2_78 78 1000 -200 200 L 50 50 1 1 B
X GNDIO 79 200 -2400 200 U 50 50 1 1 W
X IO1_8 8 -1000 1500 200 R 50 50 1 1 B
X VCCIO2 80 200 2400 200 D 50 50 1 1 W
X IO2_81 81 1000 -300 200 L 50 50 1 1 B
X IO2_82 82 1000 -400 200 L 50 50 1 1 B
X IO2_83 83 1000 -500 200 L 50 50 1 1 B
X IO2_84 84 1000 -600 200 L 50 50 1 1 B
X IO2_85 85 1000 -700 200 L 50 50 1 1 B
X IO2_86 86 1000 -800 200 L 50 50 1 1 B
X IO2_87 87 1000 -900 200 L 50 50 1 1 B
X IO2_88 88 1000 -1000 200 L 50 50 1 1 B
X IO2_89 89 1000 -1100 200 L 50 50 1 1 B
X VCCIO1 9 -200 2400 200 D 50 50 1 1 W
X IO2_90 90 1000 -1200 200 L 50 50 1 1 B
X IO2_91 91 1000 -1300 200 L 50 50 1 1 B
X IO2_92 92 1000 -1400 200 L 50 50 1 1 B
X GNDIO 93 300 -2400 200 U 50 50 1 1 W
X VCCIO2 94 300 2400 200 D 50 50 1 1 W
X IO2_95 95 1000 -1500 200 L 50 50 1 1 B
X IO2_96 96 1000 -1600 200 L 50 50 1 1 B
X IO2_97 97 1000 -1700 200 L 50 50 1 1 B
X IO2_98 98 1000 -1800 200 L 50 50 1 1 B
X IO2_99 99 1000 -1900 200 L 50 50 1 1 B
ENDDRAW
ENDDEF
#
# GW_RAM_SDRAM-16Mx16-TSOP2-54
#
DEF GW_RAM_SDRAM-16Mx16-TSOP2-54 U 0 40 Y Y 1 F N
F0 "U" 0 1150 50 H V C CNN
F1 "GW_RAM_SDRAM-16Mx16-TSOP2-54" 0 0 50 V V C CNN
F2 "stdpads:Winbond_TSOPII-54" 0 -1650 50 H I C CIN
F3 "" 0 -250 50 H I C CNN
DRAW
S -300 1100 300 -1400 0 1 10 f
X VDD 1 -500 1000 200 R 50 50 1 1 W
X DQ5 10 500 500 200 L 50 50 1 1 B
X DQ6 11 500 400 200 L 50 50 1 1 B
X VSSQ 12 -500 -1300 200 R 50 50 1 1 W N
X DQ7 13 500 300 200 L 50 50 1 1 B
X VDD 14 -500 1000 200 R 50 50 1 1 W N
X DQML 15 500 -600 200 L 50 50 1 1 I
X ~WE~ 16 500 -1100 200 L 50 50 1 1 I
X ~CAS~ 17 500 -1200 200 L 50 50 1 1 I
X ~RAS~ 18 500 -1300 200 L 50 50 1 1 I
X ~CS~ 19 500 -1000 200 L 50 50 1 1 I
X DQ0 2 500 1000 200 L 50 50 1 1 B
X BA0 20 -500 -600 200 R 50 50 1 1 I
X BA1 21 -500 -700 200 R 50 50 1 1 I
X A10 22 -500 -300 200 R 50 50 1 1 I
X A0 23 -500 700 200 R 50 50 1 1 I
X A1 24 -500 600 200 R 50 50 1 1 I
X A2 25 -500 500 200 R 50 50 1 1 I
X A3 26 -500 400 200 R 50 50 1 1 I
X VDD 27 -500 1000 200 R 50 50 1 1 W N
X VSS 28 -500 -1200 200 R 50 50 1 1 W
X A4 29 -500 300 200 R 50 50 1 1 I
X VDDQ 3 -500 900 200 R 50 50 1 1 W
X A5 30 -500 200 200 R 50 50 1 1 I
X A6 31 -500 100 200 R 50 50 1 1 I
X A7 32 -500 0 200 R 50 50 1 1 I
X A8 33 -500 -100 200 R 50 50 1 1 I
X A9 34 -500 -200 200 R 50 50 1 1 I
X A11 35 -500 -400 200 R 50 50 1 1 I
X A11 36 -500 -500 200 R 50 50 1 1 I
X CKE 37 -500 -900 200 R 50 50 1 1 I
X CLK 38 -500 -1000 200 R 50 50 1 1 I
X DQMH 39 500 -700 200 L 50 50 1 1 I
X DQ1 4 500 900 200 L 50 50 1 1 B
X VSS 41 -500 -1200 200 R 50 50 1 1 W N
X DQ8 42 500 200 200 L 50 50 1 1 B
X VDDQ 43 -500 900 200 R 50 50 1 1 W N
X DQ9 44 500 100 200 L 50 50 1 1 B
X DQ10 45 500 0 200 L 50 50 1 1 B
X VSSQ 46 -500 -1300 200 R 50 50 1 1 W N
X DQ11 47 500 -100 200 L 50 50 1 1 B
X DQ12 48 500 -200 200 L 50 50 1 1 B
X VDDQ 49 -500 900 200 R 50 50 1 1 W N
X DQ2 5 500 800 200 L 50 50 1 1 B
X DQ13 50 500 -300 200 L 50 50 1 1 B
X DQ14 51 500 -400 200 L 50 50 1 1 B
X VSSQ 52 -500 -1300 200 R 50 50 1 1 W N
X DQ15 53 500 -500 200 L 50 50 1 1 B
X VSS 54 -500 -1200 200 R 50 50 1 1 W N
X VSSQ 6 -500 -1300 200 R 50 50 1 1 W
X DQ3 7 500 700 200 L 50 50 1 1 B
X DQ4 8 500 600 200 L 50 50 1 1 B
X VDDQ 9 -500 900 200 R 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# Mechanical_MountingHole
#
DEF Mechanical_MountingHole H 0 40 Y Y 1 F N
F0 "H" 0 200 50 H V C CNN
F1 "Mechanical_MountingHole" 0 125 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
MountingHole*
$ENDFPLIST
DRAW
C 0 0 50 0 1 50 N
ENDDRAW
ENDDEF
#
# Mechanical_MountingHole_Pad
#
DEF Mechanical_MountingHole_Pad H 0 40 N N 1 F N
F0 "H" 0 250 50 H V C CNN
F1 "Mechanical_MountingHole_Pad" 0 175 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
MountingHole*Pad*
$ENDFPLIST
DRAW
C 0 50 50 0 1 50 N
X 1 1 0 -100 100 U 50 50 1 1 I
ENDDRAW
ENDDEF
#
# Regulator_Linear_LD1117S33TR_SOT223
#
DEF Regulator_Linear_LD1117S33TR_SOT223 U 0 10 Y Y 1 F N
F0 "U" -150 125 50 H V C CNN
F1 "Regulator_Linear_LD1117S33TR_SOT223" 0 125 50 H V L CNN
F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 0 200 50 H I C CNN
F3 "" 100 -250 50 H I C CNN
ALIAS AP1117-18 AP1117-25 AP1117-33 AP1117-50 LD1117S33TR_SOT223 LD1117S12TR_SOT223 LD1117S18TR_SOT223 LD1117S25TR_SOT223 LD1117S50TR_SOT223 NCP1117-12_SOT223 NCP1117-1.5_SOT223 NCP1117-1.8_SOT223 NCP1117-2.0_SOT223 NCP1117-2.5_SOT223 NCP1117-2.85_SOT223 NCP1117-3.3_SOT223 NCP1117-5.0_SOT223 AMS1117-1.5 AMS1117-1.8 AMS1117-2.5 AMS1117-2.85 AMS1117-3.3 AMS1117-5.0
$FPLIST
SOT?223*TabPin2*
$ENDFPLIST
DRAW
S -200 -200 200 75 0 1 10 f
X GND 1 0 -300 100 U 50 50 1 1 W
X VO 2 300 0 100 L 50 50 1 1 w
X VI 3 -300 0 100 R 50 50 1 1 W
ENDDRAW
ENDDEF
#
# power_+3V3
#
DEF power_+3V3 #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+3V3" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
ALIAS +3.3V
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +3V3 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_+5V
#
DEF power_+5V #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -150 50 H I C CNN
F1 "power_+5V" 0 140 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 2 0 1 0 -30 50 0 100 N
P 2 0 1 0 0 0 0 100 N
P 2 0 1 0 0 100 30 50 N
X +5V 1 0 0 0 U 50 50 1 1 W N
ENDDRAW
ENDDEF
#
# power_GND
#
DEF power_GND #PWR 0 0 Y Y 1 F P
F0 "#PWR" 0 -250 50 H I C CNN
F1 "power_GND" 0 -150 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
DRAW
P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N
X GND 1 0 0 0 D 50 50 1 1 W N
ENDDRAW
ENDDEF
#
#End Library

BIN
RAM2GS.4201D-gerber.zip Normal file

Binary file not shown.

23507
RAM2GS.kicad_pcb Normal file

File diff suppressed because it is too large Load Diff

274
RAM2GS.pro Normal file
View File

@ -0,0 +1,274 @@
update=Sunday, July 05, 2020 at 10:26:01 PM
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=RAM2GS.net
CopperLayerCount=4
BoardThickness=1.6
AllowMicroVias=0
AllowBlindVias=0
RequireCourtyardDefinitions=0
ProhibitOverlappingCourtyards=1
MinTrackWidth=0.15
MinViaDiameter=0.5
MinViaDrill=0.2
MinMicroViaDiameter=0.2
MinMicroViaDrill=0.09999999999999999
MinHoleToHole=0.25
TrackWidth1=0.15
TrackWidth2=0.254
TrackWidth3=0.3
TrackWidth4=0.4
TrackWidth5=0.45
TrackWidth6=0.5
TrackWidth7=0.508
TrackWidth8=0.6
TrackWidth9=0.762
TrackWidth10=0.8
TrackWidth11=0.85
TrackWidth12=0.895
TrackWidth13=0.9
TrackWidth14=1
TrackWidth15=1.2
TrackWidth16=1.27
TrackWidth17=1.524
ViaDiameter1=0.5
ViaDrill1=0.2
ViaDiameter2=0.6
ViaDrill2=0.3
ViaDiameter3=0.762
ViaDrill3=0.381
ViaDiameter4=0.8
ViaDrill4=0.4
ViaDiameter5=1
ViaDrill5=0.5
ViaDiameter6=1.524
ViaDrill6=0.762
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.15
SilkTextSizeV=1
SilkTextSizeH=1
SilkTextSizeThickness=0.15
SilkTextItalic=0
SilkTextUpright=1
CopperLineWidth=0.2
CopperTextSizeV=1.5
CopperTextSizeH=1.5
CopperTextThickness=0.3
CopperTextItalic=0
CopperTextUpright=1
EdgeCutLineWidth=0.15
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0.075
SolderMaskMinWidth=0.09999999999999999
SolderPasteClearance=-0.03809999999999999
SolderPasteRatio=0
[pcbnew/Layer.F.Cu]
Name=F.Cu
Type=0
Enabled=1
[pcbnew/Layer.In1.Cu]
Name=In1.Cu
Type=1
Enabled=1
[pcbnew/Layer.In2.Cu]
Name=In2.Cu
Type=1
Enabled=1
[pcbnew/Layer.In3.Cu]
Name=In3.Cu
Type=0
Enabled=0
[pcbnew/Layer.In4.Cu]
Name=In4.Cu
Type=0
Enabled=0
[pcbnew/Layer.In5.Cu]
Name=In5.Cu
Type=0
Enabled=0
[pcbnew/Layer.In6.Cu]
Name=In6.Cu
Type=0
Enabled=0
[pcbnew/Layer.In7.Cu]
Name=In7.Cu
Type=0
Enabled=0
[pcbnew/Layer.In8.Cu]
Name=In8.Cu
Type=0
Enabled=0
[pcbnew/Layer.In9.Cu]
Name=In9.Cu
Type=0
Enabled=0
[pcbnew/Layer.In10.Cu]
Name=In10.Cu
Type=0
Enabled=0
[pcbnew/Layer.In11.Cu]
Name=In11.Cu
Type=0
Enabled=0
[pcbnew/Layer.In12.Cu]
Name=In12.Cu
Type=0
Enabled=0
[pcbnew/Layer.In13.Cu]
Name=In13.Cu
Type=0
Enabled=0
[pcbnew/Layer.In14.Cu]
Name=In14.Cu
Type=0
Enabled=0
[pcbnew/Layer.In15.Cu]
Name=In15.Cu
Type=0
Enabled=0
[pcbnew/Layer.In16.Cu]
Name=In16.Cu
Type=0
Enabled=0
[pcbnew/Layer.In17.Cu]
Name=In17.Cu
Type=0
Enabled=0
[pcbnew/Layer.In18.Cu]
Name=In18.Cu
Type=0
Enabled=0
[pcbnew/Layer.In19.Cu]
Name=In19.Cu
Type=0
Enabled=0
[pcbnew/Layer.In20.Cu]
Name=In20.Cu
Type=0
Enabled=0
[pcbnew/Layer.In21.Cu]
Name=In21.Cu
Type=0
Enabled=0
[pcbnew/Layer.In22.Cu]
Name=In22.Cu
Type=0
Enabled=0
[pcbnew/Layer.In23.Cu]
Name=In23.Cu
Type=0
Enabled=0
[pcbnew/Layer.In24.Cu]
Name=In24.Cu
Type=0
Enabled=0
[pcbnew/Layer.In25.Cu]
Name=In25.Cu
Type=0
Enabled=0
[pcbnew/Layer.In26.Cu]
Name=In26.Cu
Type=0
Enabled=0
[pcbnew/Layer.In27.Cu]
Name=In27.Cu
Type=0
Enabled=0
[pcbnew/Layer.In28.Cu]
Name=In28.Cu
Type=0
Enabled=0
[pcbnew/Layer.In29.Cu]
Name=In29.Cu
Type=0
Enabled=0
[pcbnew/Layer.In30.Cu]
Name=In30.Cu
Type=0
Enabled=0
[pcbnew/Layer.B.Cu]
Name=B.Cu
Type=0
Enabled=1
[pcbnew/Layer.B.Adhes]
Enabled=1
[pcbnew/Layer.F.Adhes]
Enabled=1
[pcbnew/Layer.B.Paste]
Enabled=1
[pcbnew/Layer.F.Paste]
Enabled=1
[pcbnew/Layer.B.SilkS]
Enabled=1
[pcbnew/Layer.F.SilkS]
Enabled=1
[pcbnew/Layer.B.Mask]
Enabled=1
[pcbnew/Layer.F.Mask]
Enabled=1
[pcbnew/Layer.Dwgs.User]
Enabled=1
[pcbnew/Layer.Cmts.User]
Enabled=1
[pcbnew/Layer.Eco1.User]
Enabled=1
[pcbnew/Layer.Eco2.User]
Enabled=1
[pcbnew/Layer.Edge.Cuts]
Enabled=1
[pcbnew/Layer.Margin]
Enabled=1
[pcbnew/Layer.B.CrtYd]
Enabled=1
[pcbnew/Layer.F.CrtYd]
Enabled=1
[pcbnew/Layer.B.Fab]
Enabled=1
[pcbnew/Layer.F.Fab]
Enabled=1
[pcbnew/Layer.Rescue]
Enabled=0
[pcbnew/Netclasses]
[pcbnew/Netclasses/Default]
Name=Default
Clearance=0.15
TrackWidth=0.15
ViaDiameter=0.5
ViaDrill=0.2
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25

27
cpld/RAM4GS.mif Executable file
View File

@ -0,0 +1,27 @@
-- Copyright (C) 1991-2013 Altera Corporation
-- Your use of Altera Corporation's design tools, logic functions
-- and other software and tools, and its AMPP partner logic
-- functions, and any output files from any of the foregoing
-- (including device programming or simulation files), and any
-- associated documentation or information are expressly subject
-- to the terms and conditions of the Altera Program License
-- Subscription Agreement, Altera MegaCore Function License
-- Agreement, or other applicable license agreement, including,
-- without limitation, that your use is for the sole purpose of
-- programming logic devices manufactured by Altera and sold by
-- Altera or its authorized distributors. Please refer to the
-- applicable agreement for further details.
-- Quartus II generated Memory Initialization File (.mif)
WIDTH=16;
DEPTH=512;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENT BEGIN
[000..0FD] : 0000;
0FE : 7FFF;
[0FF..1FF] : FFFF;
END;

30
cpld/RAM4GS.qpf Executable file
View File

@ -0,0 +1,30 @@
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2013 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II 32-bit
# Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version
# Date created = 21:16:34 March 08, 2020
#
# -------------------------------------------------------------------------- #
QUARTUS_VERSION = "13.0"
DATE = "21:16:34 March 08, 2020"
# Revisions
PROJECT_REVISION = "RAM4GS"

213
cpld/RAM4GS.qsf Executable file
View File

@ -0,0 +1,213 @@
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2013 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II 32-bit
# Version 13.0.1 Build 232 06/12/2013 Service Pack 1 SJ Full Version
# Date created = 21:16:34 March 08, 2020
#
# -------------------------------------------------------------------------- #
#
# Notes:
#
# 1) The default values for assignments are stored in the file:
# RAM4GS_assignment_defaults.qdf
# If this file doesn't exist, see file:
# assignment_defaults.qdf
#
# 2) Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus II software
# and any changes you make may be lost or overwritten.
#
# -------------------------------------------------------------------------- #
set_global_assignment -name FAMILY "MAX II"
set_global_assignment -name DEVICE EPM240T100C5
set_global_assignment -name TOP_LEVEL_ENTITY RAM4GS
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "21:16:34 MARCH 08, 2020"
set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1"
set_global_assignment -name SDC_FILE constraints.sdc
set_global_assignment -name VERILOG_FILE RAM4GS.v
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 100
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 5
set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR "-1"
set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE BALANCED
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS OFF
set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO PATHS AND MINIMUM TPD PATHS"
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON
set_global_assignment -name FITTER_EFFORT "STANDARD FIT"
set_global_assignment -name ALLOW_POWER_UP_DONT_CARE OFF
set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER OFF
set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE "12.5 %"
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC OFF
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF
set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT NORMAL
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS OFF
set_global_assignment -name SMART_RECOMPILE OFF
set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 10
set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 10
set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING "PACK ALL IO REGISTERS"
set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY ON
set_global_assignment -name SAFE_STATE_MACHINE ON
set_location_assignment PIN_12 -to RCLK
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RCLK
set_location_assignment PIN_52 -to PHI2
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to PHI2
set_location_assignment PIN_67 -to nCRAS
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nCRAS
set_location_assignment PIN_53 -to nCCAS
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nCCAS
set_location_assignment PIN_48 -to nFWE
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nFWE
set_location_assignment PIN_49 -to MAin[0]
set_location_assignment PIN_51 -to MAin[1]
set_location_assignment PIN_50 -to MAin[2]
set_location_assignment PIN_71 -to MAin[3]
set_location_assignment PIN_70 -to MAin[4]
set_location_assignment PIN_69 -to MAin[5]
set_location_assignment PIN_72 -to MAin[6]
set_location_assignment PIN_68 -to MAin[7]
set_location_assignment PIN_73 -to MAin[8]
set_location_assignment PIN_74 -to MAin[9]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MAin
set_location_assignment PIN_54 -to CROW[0]
set_location_assignment PIN_55 -to CROW[1]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to CROW
set_location_assignment PIN_35 -to Din[2]
set_location_assignment PIN_36 -to Din[1]
set_location_assignment PIN_37 -to Din[3]
set_location_assignment PIN_38 -to Din[5]
set_location_assignment PIN_39 -to Din[4]
set_location_assignment PIN_40 -to Din[7]
set_location_assignment PIN_41 -to Din[6]
set_location_assignment PIN_42 -to Din[0]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to Din
set_location_assignment PIN_33 -to Dout[0]
set_location_assignment PIN_57 -to Dout[1]
set_location_assignment PIN_56 -to Dout[2]
set_location_assignment PIN_47 -to Dout[3]
set_location_assignment PIN_44 -to Dout[4]
set_location_assignment PIN_28 -to Dout[5]
set_location_assignment PIN_34 -to Dout[6]
set_location_assignment PIN_43 -to Dout[7]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to Dout
set_location_assignment PIN_8 -to RCKE
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RCKE
set_location_assignment PIN_3 -to nRCS
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nRCS
set_location_assignment PIN_100 -to nRWE
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nRWE
set_location_assignment PIN_6 -to nRRAS
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nRRAS
set_location_assignment PIN_4 -to nRCAS
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to nRCAS
set_location_assignment PIN_5 -to RBA[0]
set_location_assignment PIN_14 -to RBA[1]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RBA
set_location_assignment PIN_18 -to RA[0]
set_location_assignment PIN_20 -to RA[1]
set_location_assignment PIN_30 -to RA[2]
set_location_assignment PIN_27 -to RA[3]
set_location_assignment PIN_26 -to RA[4]
set_location_assignment PIN_29 -to RA[5]
set_location_assignment PIN_21 -to RA[6]
set_location_assignment PIN_19 -to RA[7]
set_location_assignment PIN_17 -to RA[8]
set_location_assignment PIN_15 -to RA[9]
set_location_assignment PIN_16 -to RA[10]
set_location_assignment PIN_7 -to RA[11]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RA
set_location_assignment PIN_2 -to RDQMH
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RDQMH
set_location_assignment PIN_98 -to RDQML
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RDQML
set_location_assignment PIN_96 -to RD[0]
set_location_assignment PIN_90 -to RD[1]
set_location_assignment PIN_89 -to RD[2]
set_location_assignment PIN_99 -to RD[3]
set_location_assignment PIN_92 -to RD[4]
set_location_assignment PIN_91 -to RD[5]
set_location_assignment PIN_95 -to RD[6]
set_location_assignment PIN_97 -to RD[7]
set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to RD
set_global_assignment -name MIF_FILE RAM4GS.mif
set_instance_assignment -name PAD_TO_CORE_DELAY 0 -to nCRAS
set_instance_assignment -name PAD_TO_CORE_DELAY 0 -to nCCAS
set_instance_assignment -name PAD_TO_CORE_DELAY 1 -to nFWE
set_instance_assignment -name PAD_TO_CORE_DELAY 0 -to MAin
set_instance_assignment -name PAD_TO_CORE_DELAY 1 -to CROW
set_instance_assignment -name PAD_TO_CORE_DELAY 1 -to Din
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to Dout
set_instance_assignment -name SLOW_SLEW_RATE OFF -to Dout
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to RCKE
set_instance_assignment -name SLOW_SLEW_RATE OFF -to RCKE
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to RCKE
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to nRCS
set_instance_assignment -name SLOW_SLEW_RATE OFF -to nRCS
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to nRCS
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to nRWE
set_instance_assignment -name SLOW_SLEW_RATE OFF -to nRWE
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to nRWE
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to nRRAS
set_instance_assignment -name SLOW_SLEW_RATE OFF -to nRRAS
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to nRRAS
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to nRCAS
set_instance_assignment -name SLOW_SLEW_RATE OFF -to nRCAS
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to nRCAS
set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to RBA
set_instance_assignment -name SLOW_SLEW_RATE OFF -to RBA
set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to RBA
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to RA
set_instance_assignment -name SLOW_SLEW_RATE OFF -to RA
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to RDQMH
set_instance_assignment -name SLOW_SLEW_RATE OFF -to RDQMH
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to RDQML
set_instance_assignment -name SLOW_SLEW_RATE OFF -to RDQML
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to RD
set_instance_assignment -name SLOW_SLEW_RATE ON -to RD
set_instance_assignment -name PAD_TO_CORE_DELAY 0 -to RD
set_global_assignment -name QIP_FILE UFM.qip

BIN
cpld/RAM4GS.qws Executable file

Binary file not shown.

436
cpld/RAM4GS.v Executable file
View File

@ -0,0 +1,436 @@
module RAM4GS(PHI2, MAin, CROW, Din, Dout,
nCCAS, nCRAS, nFWE,
RBA, RA, RD, nRCS, RCLK, RCKE,
nRWE, nRRAS, nRCAS, RDQMH, RDQML);
/* 65816 Phase 2 Clock */
input PHI2;
/* Async. DRAM Control Inputs */
input nCCAS, nCRAS;
/* Synchronized PHI2 and DRAM signals */
reg PHI2r, PHI2r2, PHI2r3;
reg RASr, RASr2, RASr3;
reg CASr, CASr2, CASr3;
reg FWEr;
reg CBR;
/* 65816 Data */
input [7:0] Din;
output [7:0] Dout = RD[7:0];
/* Latched 65816 Bank Address */
reg [7:0] Bank;
/* Async. DRAM Address Bus */
input [1:0] CROW;
input [9:0] MAin;
input nFWE;
reg n8MEGEN = 0;
reg XOR8MEG = 0;
/* SDRAM Clock */
input RCLK;
/* SDRAM */
reg RCKEEN;
output reg RCKE = 0;
output reg nRCS = 1, nRRAS = 1, nRCAS = 1, nRWE = 1;
output reg [1:0] RBA;
reg nRowColSel;
reg RA11;
reg RA10;
reg [9:0] RowA;
output [11:0] RA;
assign RA[11] = RA11;
assign RA[10] = RA10;
assign RA[9:0] = ~nRowColSel ? RowA[9:0] : MAin[9:0];
output RDQML = ~nRowColSel ? 1'b1 : ~MAin[9];
output RDQMH = ~nRowColSel ? 1'b1 : MAin[9];
reg [7:0] WRD;
inout [7:0] RD = (~nCCAS & ~nFWE) ? WRD[7:0] : 8'bZ;
/* UFM Interface */
reg UFMD = 0; // UFM data register bit 15
reg ARCLK = 0; // UFM address register clock
// UFM address register data input tied to 0
reg ARShift = 0; // 1 to Shift UFM address in, 0 to increment
reg DRCLK = 0; // UFM data register clock
reg DRDIn = 0; // UFM data register input
reg DRShift = 0; // 1 to shift UFM out, 0 to load from current address
reg UFMErase = 0; // Rising edge starts erase. UFM+RTP must not be busy
reg UFMProgram = 0; // Rising edge starts program. UFM+RTP must not be busy
reg UFMOscEN = 0; // UFM oscillator enable
wire UFMBusy; // 1 if UFM is doing user operation. Asynchronous
wire RTPBusy; // 1 if real-time programming in progress. Asynchronous
wire DRDOut; // UFM data output
// UFM oscillator always enabled
wire UFMOsc; // UFM oscillator output (3.3-5.5 MHz)
UFM UFM_inst ( // UFM IP block (for Altera MAX II and MAX V)
.arclk (ARCLK),
.ardin (1'b0),
.arshft (ARShift),
.drclk (DRCLK),
.drdin (DRDIn),
.drshft (DRShift),
.erase (UFMErase),
.oscena (UFMOscEN),
.program (UFMProgram),
.busy (UFMBusy),
.drdout (DRDOut),
.osc (UFMOsc),
.rtpbusy (RTPBusy));
reg UFMBusyReg = 0; // UFMBusy registered to sync with RCLK
reg RTPBusyReg = 0; // RTPBusy registered to sync with RCLK
/* UFM State */
reg UFMInitDone = 0; // 1 if UFM initialization finished
reg UFMReqErase = 0; // 1 if UFM requires erase
/* UFM Command Interface */
reg C1Submitted = 0;
reg ADSubmitted = 0;
reg CmdEnable = 0;
reg CmdSubmitted = 0;
reg Cmdn8MEGEN = 0;
reg CmdDRCLK = 0;
reg CmdDRDIn = 0;
reg CmdUFMErase = 0; // Set by user command. Programs UFM
reg CmdUFMPrgm = 0; // Set by user command. Erases UFM
wire ADWR = Bank[7:0]==8'hFB & MAin[7:0]==8'hFF & ~nFWE;
wire C1WR = Bank[7:0]==8'hFB & MAin[7:0]==8'hFE & ~nFWE;
wire CMDWR = Bank[7:0]==8'hFB & MAin[7:0]==8'hFD & ~nFWE;
/* State Counters */
reg InitReady = 0; // 1 if ready for init sequence
reg Ready = 0; // 1 if done with init sequence
reg [1:0] S = 0; // post-RAS State counter
reg [17:0] FS = 0; // Fast init state counter
reg [3:0] IS = 0; // Init state counter
reg WriteDone;
/* Synchronize PHI2, RAS, CAS */
always @(posedge RCLK) begin
PHI2r <= PHI2; PHI2r2 <= PHI2r; PHI2r3 <= PHI2r2;
RASr <= ~nCRAS; RASr2 <= RASr; RASr3 <= RASr2;
CASr <= ~nCCAS; CASr2 <= CASr; CASr3 <= CASr2;
end
/* Latch 65816 bank when PHI2 rises */
always @(posedge PHI2) begin
if (Ready) RA11 <= (Din[6] & ~n8MEGEN) ^ XOR8MEG; // Set RA11
else RA11 <= 1'b0; // Reserved in mode register
Bank[7:0] <= Din[7:0]; // Latch bank
end
/* Latch bank address, row address, WE, and CAS when RAS falls */
always @(negedge nCRAS) begin
if (Ready) begin
RBA[1:0] <= CROW[1:0];
RowA[9:0] <= MAin[9:0];
end else begin
RBA[1:0] <= 2'b00; // Reserved in mode register
RowA[9] <= 1'b1; // "1" for single write mode
RowA[8] <= 1'b0; // Reserved
RowA[7] <= 1'b0; // "0" for not test mode
RowA[6:4] <= 3'b010; // "2" for CAS latency 2
RowA[3] <= 1'b0; // "0" for sequential burst (not used)
RowA[2:0] <= 3'b000; // "0" for burst length 1 (no burst)
end
FWEr <= ~nFWE;
CBR <= ~nCCAS;
end
/* Latch write data when CAS falls */
always @(negedge nCCAS) begin
WRD[7:0] <= Din[7:0];
end
/* State counter from RAS */
always @(posedge RCLK) begin
if (~RASr2) S <= 0;
else if (S==2'h3) S <= 2'h3;
else S <= S+1;
end
/* Init state counter */
always @(posedge RCLK) begin
// Wait ~4.178ms (at 62.5 MHz) before starting init sequence
FS <= FS+1;
if (FS[17:10] == 8'hFF) InitReady <= 1'b1;
end
/* SDRAM CKE */
always @(posedge RCLK) begin
// Only 1 LUT4 allowed for this function!
RCKE <= ((RASr | RASr2) & RCKEEN) | (~RASr2 & RASr3);
end
/* SDRAM command */
always @(posedge RCLK) begin
if (Ready) begin
if (S==0) begin
if (RASr2) begin
if (CBR) begin
// AREF
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b0;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end else begin
// ACT
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // Bank RA10 consistently "1"
end
// Enable clock only for reads
RCKEEN <= ~CBR & ~FWEr;
end else if (RCKE) begin
// PCall
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b1;
nRWE <= 1'b0;
RA10 <= 1'b1; // "all"
RCKEEN <= 1'b1;
end else begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
RCKEEN <= 1'b1;
end
nRowColSel <= 1'b0; // Select registered row addres
end else if (S==1) begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
nRowColSel <= 1'b1; // Select asynchronous column address
RCKEEN <= ~CBR; // Disable clock if refresh cycle
end else if (S==2) begin
if (~FWEr & ~CBR) begin
// RD
nRCS <= 1'b0;
nRRAS <= 1'b1;
nRCAS <= 1'b0;
nRWE <= 1'b1;
RA10 <= 1'b1; // Auto-precharge
end else begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end
nRowColSel <= 1'b1; // Select asynchronous column address
RCKEEN <= ~CBR & FWEr; // Enable clock only for writes
end else if (S==3) begin
if (CASr2 & ~CASr3 & ~CBR & FWEr) begin
// WR
nRCS <= 1'b0;
nRRAS <= 1'b1;
nRCAS <= 1'b0;
nRWE <= 1'b0;
RA10 <= 1'b1; // Auto-precharge
end else begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end
nRowColSel <= ~(~FWEr | CASr3 | CBR);
RCKEEN <= ~(~FWEr | CASr2 | CBR);
end
end else if (InitReady) begin
if (S==0 & RASr2) begin
if (IS==0) begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end else if (IS==1) begin
// PC all
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b1;
nRWE <= 1'b0;
RA10 <= 1'b1; // "all"
end else if (IS==9) begin
// Load mode register
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b0;
nRWE <= 1'b0;
RA10 <= 1'b0; // Reserved in mode register
end else begin
// AREF
nRCS <= 1'b0;
nRRAS <= 1'b0;
nRCAS <= 1'b0;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end
IS <= IS+1;
end else begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
end
if (S==3 & ~RASr2 & IS==15) Ready <= 1'b1;
nRowColSel <= 1'b0; // Select registered row address
RCKEEN <= 1'b1;
end else begin
// NOP
nRCS <= 1'b1;
nRRAS <= 1'b1;
nRCAS <= 1'b1;
nRWE <= 1'b1;
RA10 <= 1'b1; // RA10 is don't care
nRowColSel <= 1'b0; // Select registered row address
RCKEEN <= 1'b0;
end
end
/* Submit command when PHI2 falls */
always @(negedge PHI2) begin
// Magic number check
if (C1WR & Din[7:0]==8'hC1) begin // "C1" magic number
if (ADSubmitted) begin
CmdEnable <= 1'b1;
UFMOscEN <= 1'b1;
end
C1Submitted <= 1'b1;
ADSubmitted <= 1'b0;
end else if (ADWR & Din[7:0]==8'hAD) begin // "AD" magic number
if (C1Submitted) begin
CmdEnable <= 1'b1;
UFMOscEN <= 1'b1;
end
ADSubmitted <= 1'b1;
C1Submitted <= 1'b0;
end else if (C1WR | ADWR) begin // wrong magic number submitted
CmdEnable <= 1'b0;
C1Submitted <= 1'b0;
ADSubmitted <= 1'b0;
end else if (CMDWR) CmdEnable <= 1'b0;
// Submit command
if (CMDWR & CmdEnable) begin
if (Din[7:4]==4'h0) begin
XOR8MEG <= Din[0];
end else if (Din[7:4]==4'h1) begin
Cmdn8MEGEN <= ~Din[0];
CmdSubmitted <= 1'b1;
end else if (Din[7:4]==4'h2) begin
Cmdn8MEGEN <= n8MEGEN;
CmdUFMErase <= Din[3];
CmdUFMPrgm <= Din[2];
CmdDRCLK <= Din[1];
CmdDRDIn <= Din[0];
CmdSubmitted <= 1'b1;
end
end
end
/* UFM Control */
always @(posedge RCLK) begin
if (~Ready) begin
if (~UFMInitDone & FS[17:16]==2'b00) begin
// Shift 0 into address register
ARCLK <= FS[3]; // Clock address register
ARShift <= 1'b1; // Shift 0 into address register
DRCLK <= 1'b0; // Don't clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b0; // DRShift is don't care
end else if (~UFMInitDone & FS[17:16]==2'b01 & FS[7:4]==4'h0) begin
// Parallel transfer UFM data to shift register
ARCLK <= 1'b0; // Don't clock address register
ARShift <= 1'b0; // ARShift is don't care
DRCLK <= FS[3]; // Clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b0; // Parallel transfer to data register
end else if (~UFMInitDone & FS[17:16]==2'b01 & FS[7:4]==4'h4) begin
// Shift UFM
ARCLK <= 1'b0; // Don't clock address register
ARShift <= 1'b0; // ARShift is don't care
DRCLK <= FS[3]; // Clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b1; // Shift data register
// Capture bit 15 of this UFM word in UFMD register
if (FS[3:0]==4'h7) UFMD <= DRDOut;
end else if (~UFMInitDone & FS[17:16]==2'b01 & FS[7:4]==4'h5) begin
// Check saved capacity entry
if (UFMD) UFMInitDone <= 1'b1; // If erased, quit iterating
else begin // If valid setting here
n8MEGEN <= ~DRDOut; // Set capacity setting
// If last byte in sector, mark need to erase
if (FS[15:8]==8'hFF) begin
UFMReqErase <= 1'b1; // Mark need to wrap around
UFMInitDone <= 1'b1; // Quit iterating
end
end
end else if (~UFMInitDone & FS[17:16]==2'b01 & FS[7:4]==4'h6) begin
// Increment UFM address
ARCLK <= FS[3]; // Clock address register
ARShift <= 1'b0; // Increment UFM address
DRCLK <= 1'b0; // Don't clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b0; // DRShift is don't care
end else if (FS[17:16]==2'b10 & UFMReqErase) begin
// Shift 0 into address register
ARCLK <= FS[3]; // Clock address register
ARShift <= 1'b1; // Shift 0 into address register
DRCLK <= 1'b0; // Don't clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b0; // DRShift is don't care
end else begin
// Don't do anything with UFM
ARCLK <= 1'b0; // Don't clock address register
ARShift <= 1'b0; // ARShift is don't care
DRCLK <= 1'b0; // Don't clock data register
DRDIn <= 1'b0; // DRDIn is don't care
DRShift <= 1'b0; // DRShift is don't care
end
// Don't erase or program UFM during initialization
UFMErase <= 1'b0;
UFMProgram <= 1'b0;
end else begin
// Can only shift UFM data register now
ARCLK <= 1'b0;
ARShift <= 1'b0;
DRShift <= 1'b1;
// Set user command signals after PHI2 falls
if (~PHI2r2 & PHI2r3 & CmdSubmitted) begin
n8MEGEN <= Cmdn8MEGEN;
DRCLK <= CmdDRCLK;
DRDIn <= CmdDRDIn;
end
// UFM programming sequence
if (CmdUFMPrgm | CmdUFMErase) begin
if (~UFMBusyReg & ~RTPBusyReg) begin
if (UFMReqErase | CmdUFMErase) UFMErase <= 1'b1;
else if (CmdUFMPrgm) UFMProgram <= 1'b1;
end else if (UFMBusyReg) UFMReqErase <= 1'b0;
end
end
end
endmodule

3
cpld/UFM.qip Executable file
View File

@ -0,0 +1,3 @@
set_global_assignment -name IP_TOOL_NAME "ALTUFM_NONE"
set_global_assignment -name IP_TOOL_VERSION "13.0"
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "UFM.v"]

268
cpld/UFM.v Executable file
View File