姓名 | 學號 |
---|---|
劉永勝 | F94089032 |
蔡宗瑾 | E14083137 |
李宇洋 | E24099025 |
pynq-z2_v1.0.xdc
內容,我們在top.v
引入了output led4
和led5
的rgb控制項,並透過LED.v
的內部邏輯進行顏色變換的控制。sw
進行顏色切換,LED.v
內部電路設計的邏輯為判定switch input後更改顏色。一樣透過修改pynq-z2_v1.0.xdc
內容,我們在top.v
引入了input控制項add
, sub
, c_rst
,其中c_rst
為原本Problem 1中的button 0的位置,為調整秒數狀態的重置訊號。rst
則被更改至button 3的位置(rst
是global reset的訊號)。
LED.v
內部的電路設計流程如下:
switch type命名方式如下:
每當切換狀態時就會將下個狀態應該要有的秒數assign給Counter,並且在每個Cycle不斷減少Counter的數字直到為0。
counter_red
or counter_green
or counter_yellow
內儲存的當前調整秒數assign給4-bit led作為output。在此Design中,因為counter與state在調整模式並不會被影響到,所以當switch從調整模式切換回正常運作模式時仍然會保留其在切換前的狀態與秒數。
為什麼要加入"blinky.xdc" ?
該限制檔有下方兩個command,分別功用為:
create_clock
在板子上,有一個產生clk的源頭(sysclk),稱為primary clock。timing constraints都是以此為基準來計算slack。因此,為了確保時序不被摻雜額外延遲,要把自己設計電路的clk定義在sysclk上。但這並不代表我們的系統和sysclk之間完全沒有延遲,而是藉由這條指令忽略clk硬體延遲,達到準確的timing分析。
create_generated_clock
此指令可用於自行產生的clk。在自行生成不同頻率或offset的clk時,需要一個master clk,用來給自行產生的clk參考。因此先透過create_clock生成以sysclk為基準的master clk,之後再讓generated_clk做為參考,產生出divider clk。
Vivado的開發流程中, Synthesis和Implementation的結果差異在哪?
Sythesis是將RTL轉成實際的邏輯接線(netlist),之後implementation是將前一步驟產生的netlist做placement、rounting優化。
下圖為Implementation後Device截圖:
在Synthesis後,只會確定邏輯合成,所以Device上只有IO的位置被確定(最右側橘色亮點)。而Implementation後,電路擺放、繞線已經完成,因此可以看到下圖藍色亮點出現,為邏輯電路實際擺放位置。