---
# System prepended metadata

title: 2015 IC Design Contest Preliminary 研究所類標準元件數位電路設計-指定集合內覆蓋之元素個數計數器

---

# 2015 IC Design Contest Preliminary 研究所類標準元件數位電路設計-指定集合內覆蓋之元素個數計數器
## 總覽
在進行題目深度閱讀以前，先詳看評分標準，此題明顯不在乎整體模擬時間，重點在合成面積以及clk rate。根據題目公式得知我們在針對某一點和特定圓心的距離時需要進行三個乘法的運算，分別是x平方項，y平方項以及r平方項，而當要進行三個圓的距離運算時，如果寫法不好，很容易就產生數量可觀的乘法器，造成電路面積過於龐大的問題，所以我們設計須著重在如何減少乘法器的數量，因此**共享資源**(resource sharing)，和**資料排程**顯得相形重要。
## 乘法器設計
根據公式: $(x-x_{1})^{2} + (y-y_{1})^{2} \lt= r^{2}$，$(x-x_{1})^{2}$ 可被視為Sub_X項，$(y-y_{1})^{2}$ 可被視為Sub_Y項，其中$x， y$ 為卡式座標的輸入點，$x_{1}，y_{1}$ 可視不同mode運算分別在**不同時間**給圓A，圓B以及圓C的座標，注意是不同的時間點。
乘法分成兩個階段，第一階段用Multiplier_1進行各圓心半徑的運算，運算完成後就不需要再進行半徑的乘法，並在第二階段將兩個乘法器都用在Sub_X和Sub_Y的平方乘法上，第二階段是卡式座標與各圓心距離的計算。
第一階段的乘法，一個cycle運算一個圓的半徑平方，幾個cycle依據mode而變，例如mode為2'b11時需要3個cycle。待半徑平方運算完後，開始進行第二階段程法，用Multiplier_1進行Sub_X平方的運算，Multiplier_2進行Sub_Y平方的運算，兩項乘法同時進行。
![](https://i.imgur.com/M8rPAFe.png)
## 時序圖(Timing)
圓半徑平方項的計算使用Multiplier_1，點與圓心的距離計算同時使用Multiplier_1以及Multiplier_2。組合電路進行比較距離的步驟是在當前卡式座標點與各個圓心距離計算完成後的下一個cycle才進行。
mode = 2'b00:![](https://i.imgur.com/TBrBCMw.png)
mode = 2'b01和2'b10:![](https://i.imgur.com/Z1yX6rs.png)
mode = 2'b11:![](https://i.imgur.com/UpD5Xcz.png)
## FSM
![](https://i.imgur.com/OW7lTWl.png)
CORNER是為了當座標跑到(8,8)時delay一個cycle做最後比對用的。

## 問題討論
餵給減法器的訊號如$x_{1}和 y_{1}$都是用組合電路立即給值，而減法器的輸出訊號Sub_X，Sub_Y，也都是用組合電路的方式立即給值，如同下面的波型圖所示，x_op和y_op分別是$x_{1}和 y_{1}$，mul_1_op就是sub_X，mul_1_out和mul_2_out是乘法器的輸出，square_add是兩乘法的相加，可以看到他們都是立即性產生值的，在mode == 2'b00時，我會使用當前的square_add去判斷candidate，所以目前不確定square_add在合成後會不會有無法穩定的問題導致candidate結果錯誤。
![](https://i.imgur.com/vIZEDcb.png)








