# DSP48E1
---
[TOC]
---
## Structure

## I/O port

| 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>|
|CARRYIN | 1|Carry input|
|CARRYINSEL | 3|選擇carry來源<br>|
|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)