📄 i2cregout.tdf
字号:
INCLUDE "i2cRegOut";INCLUDE "posedge"; --positive edge of clockPARAMETERS ( SUBADDRESS=0, SUBADDRESSBITS=8, OUTBITS=8, INITIALVALUE=0, RW="YES" );CONSTANT I2CBUSWIDTH = SUBADDRESSBITS+20;CONSTANT HIGHINITVALUE=FLOOR(INITIALVALUE DIV 256) MOD (2^OUTBITS);CONSTANT LOWINITVALUE= INITIALVALUE MOD (2^OUTBITS); SUBDESIGN i2cRegOut ( i2cBusIn[I2CBUSWIDTH-1..0]: INPUT; i2cBusOut[I2CBUSWIDTH-1..0]: OUTPUT; out[OUTBITS-1..0]: OUTPUT; read: OUTPUT; write: OUTPUT; )VARIABLE IF (OUTBITS>8) GENERATE highI2cOutReg: i2cRegOut WITH (SUBADDRESS=SUBADDRESS+1,SUBADDRESSBITS=SUBADDRESSBITS,INITIALVALUE=HIGHINITVALUE,OUTBITS=OUTBITS-8); lowI2cOutReg: i2cRegOut WITH (SUBADDRESS=SUBADDRESS ,SUBADDRESSBITS=SUBADDRESSBITS,INITIALVALUE=LOWINITVALUE,OUTBITS=8); END GENERATE; IF (OUTBITS<=8) GENERATE reg[OUTBITS-1..0]: DFFE; add[SUBADDRESSBITS-1..0]: NODE; dat[OUTBITS-1..0]: NODE; clk,wr,rd: NODE; sel: SOFT; initialValueNode[OUTBITS-1..0]: NODE; END GENERATE;BEGINIF (OUTBITS>8) GENERATE lowI2COutReg.i2cBusIn[]=i2cBusIn[]; highI2COutReg.i2cBusIn[]=lowI2COutReg.i2cBusOut[]; i2cBusOut[]=highI2CoutReg.i2cBusOut[]; out[]=(highI2CoutReg.out[],lowI2COutReg.out[]); IF used(read) GENERATE read=highI2COutReg.read; END GENERATE; read=highI2COutReg.read; IF used(write) GENERATE write=highI2COutReg.write; END GENERATE;END GENERATE;IF (OUTBITS<=8) GENERATE IF (OUTBITS>1) GENERATE initialValueNode[]=LOWINITVALUE; END GENERATE; IF (OUTBITS==1) GENERATE initialValueNode0=LOWINITVALUE!=0; END GENERATE; clk=i2cBusIn[0]; wr=i2cBusIn[1]; rd=i2cBusIn[2]; add[]=i2cBusIn[I2CBUSWIDTH-1..20]; dat[]=i2cBusIn[OUTBITS+3..4]; sel=(rd # wr) & add[]==SUBADDRESS; reg[].clk=clk; reg[].ena=sel & wr; reg[].d=dat[] $ initialValueNode[]; out[]=reg[].q $ initialValueNode[]; IF (RW=="YES") GENERATE IF (OUTBITS<8) GENERATE i2cBusOut[19..12]=i2cBusIn[19..12] & ((0,(reg[] $ initialValueNode[])) # !sel # !rd); END GENERATE; IF (OUTBITS==8) GENERATE i2cBusOut[19..12]=i2cBusIn[19..12] & ((reg[] $ initialValueNode[]) # !sel # !rd); END GENERATE; END GENERATE; IF (RW!="YES") GENERATE i2cBusOut[19..12]=i2cBusIn[19..12]; END GENERATE; i2cBusOut[11..0]=i2cBusIn[11..0]; i2cBusOut[I2CBUSWIDTH-1..20]=i2cBusIn[I2CBUSWIDTH-1..20]; IF used(write) GENERATE write=posEdge(.clk=clk, .in=!(sel & wr)); END GENERATE; IF used(read) GENERATE read=posEdge(.clk=clk, .in=!(sel & rd)); END GENERATE;END GENERATE;END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -