⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pp.abl

📁 自制pcmcia并口vhdl代码
💻 ABL
字号:
"""""""""""""""""""""""""""""""""""""""
"   PCMCIA PP CPLD ABEL Source Code   "
"   Version: 1.10                     "
"   Device: XC9572-TQ100              "
"   Designer: Hangzhou ZEC            "
"   Date: 2003/06/27                  "
"""""""""""""""""""""""""""""""""""""""

module PP

title 'PCMCIA Interface & Printed Port'


DECLARATIONS
"---------------------------------------- INPUTS ----------------------------"

"-- PCMCIA Interface Line (See PC Card Standard--Electrical Specification)
    [A9..A0]      PIN 23, 20, 17, 16, 15, 13, 12, 10, 8, 6;
                                            "Address Line
    REGn          PIN 9;                    "Register select & I/O Enable
    OEn           PIN 27;                   "Output Enable
    CE1n          PIN 29;                   "Card Enable 1
    CE2n          PIN 28;                   "Card Enable 2
    WEn      	  PIN 18;                   "Write Enable
    IORDn         PIN 25;                   "I/O Read
    IOWRn         PIN 22;                   "I/O Write
    Reset         PIN 14;                   "Card Reset

"-- Printed Port Simulator Line
    [PS7..PS3]    PIN 65, 53, 52, 50, 68;   "PP STATUS Line: : 379H, 279H, 3BDH

    [PIN2..PIN0]  PIN 49, 77, 78;

"---------------------------------------- OUTPUTS ---------------------------"

"-- PCMCIA Interface Line (See PC Card Standard--Electrical Specification)
    INPACKn       PIN 11 ISTYPE 'COM';      "Input Port Acknowledge
    [D7..D0]      PIN 30, 32, 33, 35, 36, 1, 3, 4 ISTYPE 'COM'; "Data Port
    
"-- Printed Port Simulator Line
    [PB7..PB0]    PIN 54, 55, 56, 58, 59, 61, 64, 67 ISTYPE 'REG_D'; "PP Data Port: 378H, 278H, 3BCH
    [PC3..PC0]    PIN 60, 63, 66, 76 ISTYPE 'REG_D';   "PP Control Line: 37AH, 27AH, 3BEH

    PIN_O         PIN ISTYPE 'COM';

"---------------------------------------- Node ------------------------------"
    IORn          NODE ISTYPE 'COM';        "I/O Read Select
    IOWn          NODE ISTYPE 'COM';        "I/O Write Select
    CIS_CS        NODE ISTYPE 'COM';        "Card Information Structure Select

    sel200        NODE ISTYPE 'COM';        "Configuration Register-0 Select
    
    selDat        NODE ISTYPE 'COM';        "PPS Data Port Select
    selSts        NODE ISTYPE 'COM';        "PPS Status Port Select
    selCtl        NODE ISTYPE 'COM';        "PPS Control Port Select

    DOE	          NODE ISTYPE 'COM';        "PCMCIA I/F Data Port Output Enable

    [CREG7..CREG0]  NODE ISTYPE 'REG_D';    "Configuration Register-0
 

"---------------------------------------- GROUPS ----------------------------"
ADDR = [A9..A0];                            "Common Address Groups
IOADDR = [CREG1, CREG0, REGn, A9..A0];      "I/O PPS Address Groups
DAT = [D7..D0];                             "PCMCIA Data Port Groups
DAT_L = [D3..D0];
DAT_H = [D7..D3];
PBDat = [PB7..PB0];                         "PP Data Port Groups
PCDat = [PC3..PC0];                         "PP CTRL Port Groups
PSDat = [PS7..PS3];                         "PP STA Port Groups
CREG_bus = [CREG7..CREG0];                  "Configuration Register-0 Groups

X = .X.;



EQUATIONS
"----------------------------------------------------------------------------"
PIN_O = PIN2 & PIN1 & PIN0;
"Attribute Memory Handler"    
"(See PC Card Standard--Electrical Specification)
CIS_CS = !REGn & CE2n & !CE1n & !OEn & WEn & !A0 ;


"8-Bit Input / Output Handler"
"(See PC Card Standard--Electrical Specification)
IORn = !REGn & CE2n & !CE1n & !IORDn & IOWRn;
IOWn = !REGn & CE2n & !CE1n & IORDn & !IOWRn;
INPACKn = !IORn & !IOWn;


"Card Configuration Registers Handler"
"(See PC Card Standard--Electrical Specification)
sel200 = !REGn & CE2n & !CE1n & OEn & !WEn & A9 & !A8 & !A7 & !A6 & !A5 & !A4 & !A3 & !A2 & !A1 & !A0;


"8-Bit Input / Output PPS Address Decode"
WHEN IOADDR==^H0B78 THEN selDat=1;          "PPS 378H
WHEN IOADDR==^H0B79 THEN selSts=1;          "PPS 379H
WHEN IOADDR==^H0B7A THEN selCtl=1;          "PPS 37AH

WHEN IOADDR==^H1278 THEN selDat=1;          "PPS 278H
WHEN IOADDR==^H1279 THEN selSts=1;          "PPS 279H
WHEN IOADDR==^H127A THEN selCtl=1;          "PPS 27AH

WHEN IOADDR==^H1BBC THEN selDat=1;          "PPS 3BCH
WHEN IOADDR==^H1BBD THEN selSts=1;          "PPS 3BDH
WHEN IOADDR==^H1BBE THEN selCtl=1;          "PPS 3BEH


"Configuration Register-0 Operating"
CREG_bus.D = DAT;
CREG_bus.CLK  = !sel200;
CREG_bus.ACLR = Reset;

"PPS Data Port Register Operating"
PBDat.D = DAT;
PBDat.CLK = !(IOWn & selDat);
PBDat.ACLR = Reset;

"PPS STB Register Operating"
PC0.D = !D0;
PC1.D = !D1;
PC2.D = D2;
PC3.D = !D3;
PCDat.CLK = !(IOWn & selCtl);
PCDat.ACLR = Reset;

"PCMCIA I/F Data Port Output Enable Handler"
DOE = CIS_CS # (IORn & selDat) # (IORn & selSts) # (IORn & selCtl);
DAT.OE = DOE;


"Card Information Structure Body"
"(See PC Card Standard--Metaformat Specification)
WHEN ADDR==00*2 THEN DAT=^H01 ; "CISTPL_DEVICE=01H: Device Information Tuple
WHEN ADDR==01*2 THEN DAT=^H03 ; "TPL_LINK=03H: Link to Next Tuple
WHEN ADDR==02*2 THEN DAT=^H00 ; "DEVICE INFO1=00H: No Device in Common Memory
WHEN ADDR==03*2 THEN DAT=^H00 ; "00H: Empty Block of 512 bytes
WHEN ADDR==04*2 THEN DAT=^HFF ; "FFH: End of Device Info Field

WHEN ADDR==05*2 THEN DAT=^H15 ; "CISTPL_VERS_1=15H: Level 1 Version / Product Information Tuple
WHEN ADDR==06*2 THEN DAT=^H17 ; "TPL_LINK=17H: Link to Next Tuple
WHEN ADDR==07*2 THEN DAT=^H04 ; "TPLLV1_MAJOR=04H: Major Revision Number
WHEN ADDR==08*2 THEN DAT=^H01 ; "TPLLV1_MINOR=01H: Minor Revision Number
WHEN ADDR==09*2 THEN DAT=^H2A ; "2AH: '*'
WHEN ADDR==10*2 THEN DAT=^H5A ; "5AH: 'Z'
WHEN ADDR==11*2 THEN DAT=^H45 ; "45H: 'E'
WHEN ADDR==12*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==13*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==14*2 THEN DAT=^H46 ; "46H: 'F'
WHEN ADDR==15*2 THEN DAT=^H4A ; "4AH: 'J'
WHEN ADDR==16*2 THEN DAT=^H42 ; "42H: 'B'
WHEN ADDR==17*2 THEN DAT=^H20 ; "20H: ' '
WHEN ADDR==18*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==19*2 THEN DAT=^H61 ; "61H: 'a'
WHEN ADDR==20*2 THEN DAT=^H72 ; "72H: 'r'
WHEN ADDR==21*2 THEN DAT=^H64 ; "64H: 'd'
WHEN ADDR==22*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==23*2 THEN DAT=^H46 ; "46H: 'J'
WHEN ADDR==24*2 THEN DAT=^H43 ; "43H: 'C'
WHEN ADDR==25*2 THEN DAT=^H31 ; "31H: '1'
WHEN ADDR==26*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==27*2 THEN DAT=^H41 ; "41H: 'A'
WHEN ADDR==28*2 THEN DAT=^H00 ; "00H: Terminator
WHEN ADDR==29*2 THEN DAT=^HFF ; "FFH: End of List

WHEN ADDR==30*2 THEN DAT=^H1A ; "CISTPL_CONF=1AH: Configuration Tuple
WHEN ADDR==31*2 THEN DAT=^H05 ; "TPL_LINK=05H: Link to Next Tuple
WHEN ADDR==32*2 THEN DAT=^H01 ; "TPCC_SZ=01H: Two bytes of Address
WHEN ADDR==33*2 THEN DAT=^H03 ; "TPCC_LAST=03H: 03(3BCH) is Last entry in Configuration Table
WHEN ADDR==34*2 THEN DAT=^H00 ; "TPCC_RADR=00H: Configuration Register Base Address LSB
WHEN ADDR==35*2 THEN DAT=^H02 ; "TPCC_RADR=20H: Configuration Register Base Address MSB
WHEN ADDR==36*2 THEN DAT=^H01 ; "TPCC_RMSK=01H: One Configuration Register

WHEN ADDR==37*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==38*2 THEN DAT=^H08 ; "TPL_LINK=08H: Link to Next Tuple
WHEN ADDR==39*2 THEN DAT=^HC1 ; "TPCE_INDX=C1H: Default LPT1(01H), Interface Follows
WHEN ADDR==40*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==41*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==42*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==43*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==44*2 THEN DAT=^H78 ; "TPCE_IO=78H: Start of I/O Addr (LSB)
WHEN ADDR==45*2 THEN DAT=^H03 ; "TPCE_IO=03H: Start of I/O Addr (MSB)
WHEN ADDR==46*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3

WHEN ADDR==47*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==48*2 THEN DAT=^H08 ; "TPL_LINK=08H: Link to Next Tuple
WHEN ADDR==49*2 THEN DAT=^HC2 ; "TPCE_INDX=C2H: LPT2(02H), Interface Follows
WHEN ADDR==50*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==51*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==52*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==53*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==54*2 THEN DAT=^H78 ; "TPCE_IO=78H: Start of I/O Addr (LSB)
WHEN ADDR==55*2 THEN DAT=^H02 ; "TPCE_IO=02H: Start of I/O Addr (MSB)
WHEN ADDR==56*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3

WHEN ADDR==57*2 THEN DAT=^H1B ; "CISTPL_CE=1BH: Configuration Entry Tuple
WHEN ADDR==58*2 THEN DAT=^H08 ; "TPL_LINK=05H: Link to Next Tuple
WHEN ADDR==59*2 THEN DAT=^HC3 ; "TPCE_INDX=C3H: LPT3(03H), Interface Follows
WHEN ADDR==60*2 THEN DAT=^H01 ; "TPCE_IF=01H: I/O
WHEN ADDR==61*2 THEN DAT=^H08 ; "TPCE_FS=08H: Feature Selection Byte
WHEN ADDR==62*2 THEN DAT=^HAA ; "TPCE_IO=AAH: 8 Bit I/O, 10 Bit I/O Addr
WHEN ADDR==63*2 THEN DAT=^H60 ; "TPCE_IO=60H: 1 Range, I/O Addr=2 bytes
WHEN ADDR==64*2 THEN DAT=^HBC ; "TPCE_IO=BCH: Start of I/O Addr (LSB)
WHEN ADDR==65*2 THEN DAT=^H03 ; "TPCE_IO=03H: Start of I/O Addr (MSB)
WHEN ADDR==66*2 THEN DAT=^H02 ; "TPCE_IO=02H: Length of Range = 3

WHEN ADDR==67*2 THEN DAT=^HFF ; "CISTPL_END=FFH: End of Tuple Chain


"PCMCIA I/F Data Port Output Operating"
WHEN ADDR==^H200 THEN DAT=CREG_bus.Q;

WHEN ADDR==^H378 THEN DAT=PBDat.Q;
WHEN ADDR==^H379 THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H37A THEN DAT_L=PCDat $ ^H0B;

WHEN ADDR==^H278 THEN DAT=PBDat.Q;
WHEN ADDR==^H279 THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H27A THEN DAT_L=PCDat $ ^H0B;

WHEN ADDR==^H3BC THEN DAT=PBDat.Q;
WHEN ADDR==^H3BD THEN DAT_H=PSDat $ ^H10;
WHEN ADDR==^H3BE THEN DAT_L=PCDat $ ^H0B;

END                             "End of ABEL Source Code

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -