# DSP48E1 --- [TOC] --- ## Structure ![image](https://hackmd.io/_uploads/SJM3x010a.png) ## I/O port ![image](https://hackmd.io/_uploads/S1WV-AkRp.png) | Reg Ctrl Attribute | Setting | Description | | -------- | -------- | -------- | |ACASCREG | 0, 1, 2 (1)|當AREG=0, ACASCREG=0<br>當AREG=1, ACASCREG=1<br>當AREG=2, ACASCREG=1or2| |ADREG | 0, 1 (1)|選AD有沒有用register| |ALUMODEREG |0, 1 (1)|選ALUMODE有沒有用register| |AREG |0, 1, 2 (1)|選A用哪個register| |BCASCREG | 0, 1, 2 (1)|當BREG=0, BCASCREG=0<br>當BREG=1, =BCASCREG=1<br>當BREG=2, BCASCREG=1or2| |BREG | 0, 1, 2 (1)|選B用哪個register| |CARRYINREG |0, 1 (1)|選CARRYIN有沒有用register| |CARRYINSELREG |0, 1 (1)|選CARRYINSEL有沒有用register| |CREG |0, 1 (1)|選C有沒有用register| |DREG |0, 1 (1)|選D有沒有用register| |INMODEREG |0, 1 (1)|選INMODE有沒有用register| |MREG |0, 1 (1)|選M有沒有用register| |OPMODEREG |0, 1 (1)|選OPMODE有沒有用register| |PREG |0, 1 (1)|選P有沒有用register| |USE_DPORT |TRUE, FALSE (FALSE)|是否pre-adder和D port有被用到| | Input Port | Bit Width | Description | | -------- | -------- | -------- | |CLK | 1|clock| |A | 30|Pre-adder的主要input之一,出Pre-adder之後會進Multiplier| |B | 18|Multiplier的input之一| |C | 48|| |D | 25|Pre-adder的主要input之一,出Pre-adder之後會進Multiplier| |OPMODE | 7|決定X, Y, Z output <br><br>X mode:<br>7'bxxx_xx00=>0 <br> 7'bxxx_0101=>M <br> 7'bxxx_xx10=>P <br> 7'bxxx_xx11=>A:B <br><br> Y mode:<br>7'bxxx_00xx=>0 <br> 7'bxxx_0101=>M <br> 7'bxxx_10xx=>48'ffff_ffff_ffff <br> 7'bxxx_11xx=>C <br><br> Z mode:<br>7'b000_xxxx=>0<br>7'b001_xxxx=>PCIN<br>7'b010_xxxx=>P<br>7'b011_xxxx=>C<br>7'b100_1000=>P<br>7'b101_xxxx=>17-bit shift(PCIN)<br>7'b110_xxxx=>17-bit shift(P)<br>7'b111_xxxx=>xx| |ALUMODE | 4|opmode與alumode共同決定<br>![image](https://hackmd.io/_uploads/SJPhddlJC.png)| |CARRYIN | 1|Carry input| |CARRYINSEL | 3|選擇carry來源<br>![image](https://hackmd.io/_uploads/HkFCuOl10.png)| |INMODE | 5|5個bits分別代表選擇pre-adder/A/B/D/input register| |CEA1 | 1|A的第一個register的clock enable。必須AREG=2或INMODE[0]=1| |CEA2 | 1|A的第二個register的clock enable。必須AREG=1或INMODE[0]=0| |CEB1 | 1|B的第一個register的clock enable。必須BREG=2或INMODE[4]=1| |CEB2 | 1|B的第二個register的clock enable。必須BREG=1或BREG=2或INMODE[4]=0| |CEC | 1|C的register的clock enable| |CED | 1|D的register的clock enable| |CEM | 1|M的register的clock enable和內部Multiplier CARRYIN的register的clock enable| |CEP | 1|P的register的clock enable| |CEAD | 1|AD的register的clock enable| |CEALUMODE | 1|ALUMODE的register的clock enable| |CECTRL | 1|OPMODE和CARRYINSEL的register的clock enable| |CECARRYIN | 1|CARRYIN的register的clock enable| |CEINMODE | 1|INMODE的register的clock enable| |RSTA | 1|A的reset signal| |RSTB | 1|B的reset signal| |RSTC | 1|C的reset signal| |RSTD | 1|D的reset signal| |RSTM | 1|M的reset signal| |RSTP | 1|P的reset signal| |RSTCTRL | 1|OPMODE和CARRYINSEL的reset signal| |RSTALLCARRYIN| 1|Carry和CARRYIN的reset signal| |RSTALUMODE | 1|ALUMODE的reset signal| |RSTINMODE | 1|INMODE的reset signal| |ACIN | 30|從另一個DSP的ACOUT傳來| |BCIN | 18|從另一個DSP的BCOUT傳來| |PCIN | 48|從另一個DSP的PCOUT傳來| |CARRYCASCIN | 1|從另一個DSP的CARRYCASCOUT傳來| |MULTSIGNIN | 1|從另一個DSP的乘積output傳來,用於MACC擴展| | Output Port | Bit Width | Description | | -------- | -------- | -------- | |P | 48|最主要的output,從加減法器和邏輯函數輸出| |OVERFLOW | 1|設定pattern時,判定有沒有overflow| |UNDERFLOW | 1|設定pattern時,判定有沒有underflowflow| |ACOUT | 30|傳到另一個DSP的ACIN| |BCOUT | 18|傳到另一個DSP的BCIN| |PCOUT | 48|傳到另一個DSP的PCIN| |CARRYOUT | 4|48bits拆成4個12bits,分別用到1bit CARRYOUT,這4段會進到累加器/加法器/邏輯單元| |CARRYCASCOUT | 1|cascade到另一個DSP的CARRYCASCIN,在內部反饋到同一個DSP的CARRYINSEL mux input| |MULTSIGNOUT | 1|累加到另一個DSP成績output,用於MACC ext| |PATTERNDETECT | 1|P與pattern之間的match indicator| |PATTERNBDETECT| 1|P與pattern bar之間的match indicator| ## Reference [DSP48E1 Slice User Guide](https://docs.xilinx.com/v/u/en-US/ug479_7Series_DSP48E1)