i2cramin.tdf

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

TDF
87
字号
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 i2cRamIn   (   sysclk: INPUT;   i2cBusIn[I2CBUSWIDTH-1..0]: INPUT;   i2cBusOut[I2CBUSWIDTH-1..0]: OUTPUT;   address[LPM_WIDTHAD-1..0]: INPUT;   dataIn[LPM_WIDTH-1..0]: INPUT;   we: INPUT;   )VARIABLE   add[SUBADDRESSBITS-1..0]: NODE;   shiftedAdd[SUBADDRESSBITS-1..0]: NODE;   clk,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];rd=i2cBusIn[2];add[]=i2cBusIn[I2CBUSWIDTH-1..20];-- wait logicwaitCounter[].clk=cLk;sel=rd & 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=sysClk;myRam.data[]=dataIn[];myRam.we=we;myRam.outclock=clk;shiftedAdd[]=add[]-SUBADDRESS;IF sel THEN   myRam.address[]=shiftedAdd[LPM_WIDTHAD-1..0];ELSE   myRam.address[]=address[];END IF;i2cBusOut[19..12]=i2cBusIn[19..12] & (myRam.q[] # !sel); -- data outi2cBusOut[2..0]=i2cBusIn[2..0]; -- rd/wr/clki2cBusOut[3]=(waitCounter[]!=3 & sel) # i2cBusIn[3]; -- waiti2cBusOut[11..4]=i2cBusIn[11..4]; -- data ini2cBusOut[I2CBUSWIDTH-1..20]=i2cBusIn[I2CBUSWIDTH-1..20]; -- addressEND;

⌨️ 快捷键说明

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