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

📄 pci_pio2.abl

📁 不足20元的PCI设计
💻 ABL
字号:
MODULE PCI_PIO2
TITLE 'PCI PIO with only one chip of CPLD';

"   CLK, RST#       ____________________
"   -------------->|                    |
"   FRAME#, IRDY#  |                    |  XOUT[31:0]
"   -------------->|                    |============>
"   DEVSEL#, TRDY# |                    |
"   <--------------|        CPLD        |
"   C/BE[3:0]#     |                    |  XIN[31:0]
"   ==============>|                    |<============
"   AD[31:0]       |                    |
"   <=============>|                    |
"                   ~~~~~~~~~~~~~~~~~~~~
"   This design can be fitted to ispLSI2128.


" PCI BUS
CLK, !RES        pin;
!FRAME, !IRDY    pin;
!DEVSEL, !TRDY   pin istype 'reg,pos';
CB0..CB3         pin;
AD0..AD31        pin istype 'reg_l';

" External I/O ports
XOUT0..XOUT31    pin istype 'reg_g';
XIN0..XIN31      pin;

" Intrenal state counter
S0..S2           node istype 'reg';



" Constants and Symbols

DEVADDR = ^h0000f300;  " Device address

SC = [S2..S0];

CMD_IOR   = ([FRAME,IRDY, [CB3..CB0], [AD31..AD0].pin] == [1,0, ^b0010, DEVADDR]);
CMD_IOW   = ([FRAME,IRDY, [CB3..CB0], [AD31..AD0].pin] == [1,0, ^b0011, DEVADDR]);
BUS_IDLE  = ([FRAME,IRDY         ] == [0,0  ]);
BUS_XFER  = ([      IRDY,TRDY.pin] == [  1,1]);
LAST_XFER = ([FRAME,IRDY,TRDY.pin] == [0,1,1]);


EQUATIONS
   [DEVSEL, TRDY, SC, XOUT0..XOUT31].clk = CLK;

   [AD31..AD0].d = [XIN31..XIN0];
   [XOUT31..XOUT0].d = [AD31..AD0].pin;



STATE_DIAGRAM SC;
   State 0:
      if      RES      then 0;
      else if BUS_IDLE then 4;
      else                  0;

   State 4:
      if      RES      then 0;
      else if CMD_IOW  then 2 with DEVSEL := 1; TRDY := 1;
      else if CMD_IOR  then 5;
      else if BUS_IDLE then 4;
      else                  0;

   State 2:
      DEVSEL.oe = 1; TRDY.oe = 1;
      [XOUT7..XOUT0].ce   = BUS_XFER & !CB0;
      [XOUT15..XOUT8].ce  = BUS_XFER & !CB1;
      [XOUT23..XOUT16].ce = BUS_XFER & !CB2;
      [XOUT31..XOUT24].ce = BUS_XFER & !CB3;
      if      RES       then 0;
      else if LAST_XFER then 3;
      else                   2 with DEVSEL := 1; TRDY := 1;

   State 3:
      DEVSEL.oe = 1; TRDY.oe = 1;
      if      RES     then 0;
      else if CMD_IOW then 2 with DEVSEL := 1; TRDY := 1;
      else if CMD_IOR then 5;
      else                 4;

   State 5:
      if      RES then 0;
      else             6 with DEVSEL := 1; TRDY := 1;

   State 6:
      DEVSEL.oe = 1; TRDY.oe = 1; [AD31..AD0].oe = 1; [AD31..AD0].le = 1;
      if      RES       then 0;
      else if LAST_XFER then 7;
      else                   6 with DEVSEL := 1; TRDY := 1;

   State 7:
      DEVSEL.oe = 1; TRDY.oe = 1;
      if     RES then 0;
      else            4;

   State 1:
      goto 0;

END

⌨️ 快捷键说明

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