# **[LPHP Lab M0]** IC Design Contest 2023 <style> .red { color: red; } </style> ## **題目要求簡述:** - 本題假設在 16x16 的面積固定有 40 個標的物,在此面積上只能使用兩發雷射,雷射形狀為半徑 4 的圓形,請找出這兩個圓的圓心位置,讓這兩個圓能達到最大量的標的物覆蓋。(圖1)  ## ***目標:*** - 以這年的評比策略來說,需要注意的關鍵為電路面積的規劃需小於$28,000 um^2$、以及能否達到170/170 (最佳覆蓋率)並使一組測資的執行cycle數小於50000個cycle便有高機率能進入複賽。 ## **State Graph:**  - 這次的電路設計思路相對簡單,在使用題幹提供的迭代演算法的基礎上去做index的調整,達到能夠不須將整張圖掃描便能找到最佳覆蓋的圓心。 - 從State Graph中可以看到我在RST跟READ以及CLEAR_CTR後有一個INI_C_HITCOUNT的State,這個State是用來符合題幹中提到的在初始時要把圓一的index設為(0, 0)因此我先跑了將圓心設在(0, 0)時會覆蓋哪幾個個點並將他記錄下來。 - 後面的部分就與題目敘述中提供的演算法相同,透過將圓心設在圖像的各點上去看哪個圓心的覆蓋率最大便能透過迭代的方式得到最佳兩圓心。 <span class="red">**注意**</span> - 若整張圖掃描會至少有 256 X 40 個cycle才能找到一個圓,一組迭代需要兩個圓且測試過後至少需要三次迭代才能找到170/170的兩個圓心。 - --> $256 * 40 * 2 * 3 = 61440 > 50000 --> 違反規定。 - 因此在半徑一定為4的情況下我將圓心的初始迭代條件設在 (2, 2)的位置從(2, 2)跑到 (13, 12)便能在不失去一般性的情況下完成對整張圖的掃描,得到當下最高覆蓋率的圓。 ## **電路特殊設計:** ### 1. 判斷標的物使否於圓內 - 當在計算各標的物是否位於現在indexX, Y的圓內時,可以不用使用傳統的L2距離(Euclidean Distance)運算而是透過以下展示的方式去判斷該標的物是否位於圓內。 - Schematic  - Code Example:  ### 2. 紀錄圓一與圓二的迭代結果 - 在執行演算法的過程中,為了含括另一圓的覆蓋結果並不重複計算。我使用了4個Register去儲存這些資料。示意圖如下: - 當固定其中一圓時(假設固定圓1)則在圓2的圓心移動尋找此圓1下最佳圓2時。max_shade1會有上一個迭代結果的圓1所覆蓋的點,搭配各圓2圓心的shade2便可得到此兩圓下的覆蓋率且不會重複計算。並且只有當總覆蓋率大於上一個迭代結果的覆蓋率時,max_shade2才會更新使稍後迭代圓1時可以記錄最佳的圓2。 - Schematic:  - Code Example:  ## **結果討論:** - 這次的題目因為去年已經寫過因此我著重的點在於使用更少cycle且覆蓋率更高的演算法去做修改。在第二次寫這個題目後,我發現其實這些題目都並不是太難,主要困難的點在於一開始我選擇的演算法到底可不可行以及要先規劃好大概需要的cycle與經驗累積起來的對timing大概的掌握再去下手,會比較不會花太多時間在演算法的改善與糾錯上。 - 經驗紀錄: 8ns 下可以在一個cycle做4個hierachy的加法。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up