FPGA Lab0
報告連結
FSM 說明
此個數計數器共有4種模式,分別計算不同區域內的座標點個數。而我們是以逐點座標計算的方式來實作,亦即從座標(1,1)~(8,8)逐點計算與圓心的距離,並同時計算半徑平方。經過距離比對後,決定計數器是否加一,大致流程如下:
- 從tb取圓心、半徑的資料。
- 從座標(1,1)~(8,8)逐點計算與圓心距離(不同模式下,計算距離的數量不同,詳見狀態說明)。
- 距離符合該模式下之區塊,則計數器加一,否則計數器不變。接著回到第2步驟,計算下一座標點。
- 座標點(8,8)計算完成,輸出計數器結果。
state |
說明 |
IDLE |
閒置狀態。當接收到輸入en訊號時,接收並儲存圓心、半徑資料開始工作。 |
BUSY |
逐點計算,從座標(1,1)~(8,8)計算與圓心之間的距離,並與半徑比對。比對符合該模式條件,則計數器加一。 |
LAST |
與BUSY功能相同,但此狀態為最後座標點(8,8)與圓心之距離計算結果。 |
OUTPUT |
輸出計數器累計結果到RAM中。 |
BUSY
狀態中計算座標點(1,1)~(8,8)之距離,共64點。但該狀態不是固定64個cycle完成。隨著mode不同所需的cycle數也不同。若是該mode下需要判斷兩個圓,則需要;若是需要判斷3個圓則需要。這與時間換面積的方式有關,詳見問題討論。
模擬結果
波行解釋
拉拉拉
問題討論
- 如何節省面積?
在mode=4時,需要一次計算座標與3個圓心的距離,而一次的距離計算則需要2個4-bit乘法器,3個圓的就需要6個乘法器。再加上半徑平方的計算,則總共需要6 + 3 = 9個乘法器,這會需要非常大的面積。
我用時間換面積,如下圖timing所示,原先需要在同一clk cycle產生的3個distance,我使用3個cycle依序計算3個distance,第4個cycel則可以開始比較3個distance與半徑之大小。此外,會有pipline的概念加入,第4個cycle乘法器閒置,則開始計算下一個座標的distance 1。
block diagram解釋在乘法器的輸入端依序給3個Circle對應的圓心座標,則可控制此模塊的距離計算。
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →