i2cramout.tdf

来自「基于fpga的屏幕测试程序」· TDF 代码 · 共 89 行

TDF
89
字号
INCLUDE "lpm_ram_dq";PARAMETERS   (   SUBADDRESS=0,   SUBADDRESSBITS=8,   -- lpm_dq_ram related   LPM_WIDTH=8,   LPM_WIDTHAD=8,    LPM_NUMWORDS=256,    LPM_OUTDATA="REGISTERED",   LPM_FILE="",   USE_EAB="ON"   );CONSTANT I2CBUSWIDTH = SUBADDRESSBITS+20;CONSTANT LASTADD = SUBADDRESS+LPM_NUMWORDS-1;SUBDESIGN i2cRamOut   (   sysclk: INPUT;   i2cBusIn[I2CBUSWIDTH-1..0]: INPUT;   i2cBusOut[I2CBUSWIDTH-1..0]: OUTPUT;   address[LPM_WIDTHAD-1..0]: INPUT;   dataOut[LPM_WIDTH-1..0]: OUTPUT;   dummyOut: OUTPUT; -- to get rid of warnings : please ignore   )VARIABLE   add[SUBADDRESSBITS-1..0]: NODE;   dummyAdd[SUBADDRESSBITS-1..0]: NODE;   clk,wr,rd: NODE;   sel: SOFT;   waitCounter[1..0]: DFF;   myRam:      lpm_ram_dq         WITH (LPM_WIDTH=LPM_WIDTH,               LPM_WIDTHAD=LPM_WIDTHAD,                LPM_NUMWORDS=LPM_NUMWORDS,                LPM_INDATA="REGISTERED",                LPM_ADDRESS_CONTROL="REGISTERED",                LPM_OUTDATA=LPM_OUTDATA,               LPM_FILE=LPM_FILE,               USE_EAB=USE_EAB);BEGIN-- dissecting the i2c busclk=i2cBusIn[0];wr=i2cBusIn[1];rd=i2cBusIn[2];add[]=i2cBusIn[I2CBUSWIDTH-1..20];-- wait logicwaitCounter[].clk=sysCLk;sel=(rd # wr) & add[]>=SUBADDRESS & add[]<=LASTADD;IF (sel) THEN   IF (waitCounter[]<3) THEN      waitCounter[]=waitCounter[]+1;   ELSE      waitCounter[]=waitCOunter[];   END IF;ELSE   waitCounter[]=0;END IF;-- the ram itselfmyRam.inclock=clk;myRam.outclock=sysclk;myRam.data[]=i2cBusIn[11..4];myRam.we=sel & wr;dataOut[]=myRam.q[];dummyAdd[]=add[]-SUBADDRESS;IF sel THEN   myRam.address[]=dummyAdd[LPM_WIDTHAD-1..0];ELSE   myRam.address[]=address[];END IF;i2cBusOut[19..12]=i2cBusIn[19..12] & (myRam.q[] # !sel # !rd);i2cBusOut[2..0]=i2cBusIn[2..0];i2cBusOut[3]=(waitCounter[]!=3 & sel) # i2cBusIn[3];i2cBusOut[11..4]=i2cBusIn[11..4];i2cBusOut[I2CBUSWIDTH-1..20]=i2cBusIn[I2CBUSWIDTH-1..20];dummyOut=dummyadd[]==0;END;

⌨️ 快捷键说明

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