提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 前言
- 一、pandas是什么?
- 二、使用步驟
- 1.引入庫
- 2.讀入數據
- 總結
前言
這是B站傅里葉的貓視頻的筆記
一、建立工程
以Vivado的wave_gen為例子。為了引入異步時鐘域,我們在此程序上由增加了另一個時鐘--clkin2
,該時鐘產生脈沖信號pulse
,samp_gen
中在pulse
為高時才產生信號。
二、梳理時鐘樹
我們首先要做的就是梳理時鐘樹,就是工程中用到了哪些時鐘,各個時鐘之間的關系又是什么樣的,如果自己都沒有把時鐘關系理清楚,不要指望綜合工具會把所有問題暴露出來。
??在我們這個工程中,有兩個主時鐘,四個衍生時鐘,如下圖所示。
主時鐘是FPGA設計中最頂層的時鐘源,通常由以下兩種方式提供:
-
外部時鐘源:通過FPGA的專用時鐘引腳(如全局時鐘輸入引腳)輸入,例如晶振、時鐘發生器芯片等。
-
FPGA內部固定時鐘:少數FPGA內置的固定頻率時鐘(如某些器件的片上振蕩器)。
關鍵特性
-
無需依賴其他時鐘:主時鐘是設計的根時鐘,其周期和邊沿由物理硬件直接決定。
-
全局性:通常通過全局時鐘網絡(Global Clock Buffer,如BUFG)分配到整個芯片,以降低抖動和偏斜(Skew)。
-
約束語法示例(XDC格式):
create_clock -name sys_clk -period 10 [get_ports CLK_IN]
這里
CLK_IN
是外部時鐘輸入引腳,周期為10ns。
衍生時鐘
是通過主時鐘或其他衍生時鐘經過FPGA內部邏輯(如分頻、倍頻、相位調整)生成的時鐘信號。常見的生成方式包括:
-
分頻/倍頻:通過PLL(鎖相環)、MMCM(混合模式時鐘管理器)或寄存器分頻(如計數器)產生。
-
例如:主時鐘100MHz → 通過PLL生成50MHz時鐘。
-
-
門控時鐘:通過邏輯門(如與門)使能/禁用時鐘(需謹慎使用,易導致時序問題)。
-
相位偏移:通過時鐘管理單元調整相位(如90°相移時鐘)。
關鍵特性
-
依賴主時鐘:衍生時鐘的時序必須相對于其父時鐘(主時鐘或其他衍生時鐘)進行約束。
-
需顯式定義:工具無法自動識別衍生時鐘,必須手動約束。
-
約束語法示例:
create_generated_clock -name clk_div2 -source [get_pins PLL/CLKOUT] -divide_by 2 [get_pins DIV_REG/Q]
這里從PLL的輸出時鐘(
CLKOUT
)分頻2倍,生成clk_div2
。
實際應用注意事項
-
避免衍生時鐘的衍生時鐘:過度嵌套會增加時序復雜性,建議扁平化時鐘結構。
-
謹慎使用組合邏輯生成時鐘:可能導致毛刺,推薦使用專用時鐘管理單元(PLL/MMCM)。
-
驗證時鐘關系:通過
report_clocks
命令檢查時鐘樹是否按預期約束。
確定了主時鐘和衍生時鐘后,再看各個時鐘是否有交互,即clka產生的數據是否在clkb的時鐘域中被使用。
??這個工程比較簡單,只有兩組時鐘之間有交互,即:
-
clk_rx
與clk_tx
-
clk_samp
與clk2
其中,clk_rx
和clk_tx
都是從同一個MMCM輸出的,兩個頻率雖然不同,但他們卻是同步的時鐘,因此他們都是從同一個時鐘分頻得到(可以在Clock Wizard的Port Renaming中看到VCO Freq的大小),因此它們之間需要用set_false_path
來約束;而clk_samp
和clk2
是兩個異步時鐘,需要用asynchronous
來約束。