System Generator從入門到放棄(八)-使用多時鐘域實現多速率系統設計
System Generator從入門到放棄(八)-使用多時鐘域實現多速率系統設計
文章目錄
System Generator是Xilinx公司進行數字訊號處理開發的一種設計工具,它通過將Xilinx開發的一些模組嵌入到Simulink的庫中,可以在Simulink中進行定點模擬,可以設定定點訊號的型別,這樣就可以比較定點模擬與浮點模擬的區別。並且可以生成HDL檔案,或者網表,可以在ISE或Vivado中進行呼叫。或者直接生成位元流下載檔案。能夠加快DSP系統的開發進度。
一、使用多時鐘域實現多速率系統設計
1、簡介
多速率的概念是相對於單速率(Single Rate)訊號處理而言的。單速率是指整個訊號處理流程中只有一種資料速率;多速率是指系統中存在多個數據速率。使用多速率訊號處理可以節省儲存空間、減少通訊資料量、減少運算量、減輕設計難度。
比如在DDC(數字下變頻)系統中,前級需要很高的取樣率fs確保ADC採集到訊號的信噪比;而在去載波並提取出低頻的基帶訊號後,訊號有效頻寬已經很小,此時可以滿足要求的取樣率也遠遠低於fs,如果不進行資料速率轉換的處理,會造成許多資源的浪費和設計上的困難
2、建立時鐘域層次結構
按照下圖所示建立一個時鐘域層次Model
PS:這部分例程在官方
ug948-design-files.zip
Lab4中找到,由於官方在設計時將一些變數寫到.m檔案中了,所以需要先執行m檔案,將引數輸入到matlab工作空間,simulink會自動與工作空間進行互動,然後執行模型。
相關的FIX設定如下:
基本Block:
- 增益由POWER_SCALE輸入控制
- 通道濾波器使用經典的多速率濾波器將輸入訊號(491.52MSPS)數字轉換為近基帶(61.44MSPS):使用兩個半帶濾波器,然後抽取2級濾波器,這比單個大濾波器需要更少的係數。
- 輸出部分增益控制將使用資料的後續塊的輸出。
點選Run按鈕進行模擬
顯示多速率執行
在下面的圖中,使用顏色啟用Sample Time Display(在背景右擊>Sample Time Display>Colors)。
系統會針對不同速率進行顏色的分配。
當這樣的多速率設計在硬體中實現時,最優的實現是使用與資料頻率相同的時鐘;然而,時鐘在這種環境中被抽象出來。下面的方法將演示如何以最有效的方式建立以上理想的環境。
要使用System Generator有效地實現多速率(或多時鐘)設計,應該使用自己的System Generator為每個層次結構分配相同的時鐘頻率, 然後將每個層次結構與FIFO連結,就是利用FIFO實現不同時鐘域的連線。
多時鐘域劃分
目前的設計有兩個明顯、一個不太明顯的時鐘域:
- 增益控制輸入POWER_SCALE可以根據CPU配置,因此可以在與CPU相同的時鐘頻率下執行。
- 輸出級上的實際增益控制邏輯應該與來自FIR的輸出資料以相同的頻率執行。這將允許它更有效地連線到系統中的後續Block。
- 不太明顯的區域是濾波器鏈。在之前數字濾波器的例子中,System Generator提供的複雜IP(如FIR濾波器器)會自動利用超頻來執行。 例如,如果時鐘頻率為500 MHz(= 40 * 100/500),FIR濾波器不會使用100MHz執行的40個乘法器,而只使用8個乘法器。 因此,整個濾波器鏈可以分組為單個時鐘域。 第一個FIR濾波器例項將以最大時鐘速率執行,後續例項將自動採用過取樣。
劃分,建立subsystem
選擇下圖Block,右擊–>Create Subsystem
重新命名DDC
選擇output path Block,右擊–>Create Subsystem,;重新命名Gain Control
選擇Gateway In instance POWER_SCALE and Constant,右擊–>Create Subsystem,;重新命名CTRL
當此設計完成時,每個子系統內的邏輯將以不同的時鐘頻率執行, 時鐘域可能彼此不同步。
3、建立非同步通道
在此步驟中,您將使用FIFO在子系統之間實現非同步通道。 FIFO中的資料以先進先出(FIFO)為基礎執行,控制訊號確保僅在存在有效資料時才讀取資料,並且僅在有可用空間時寫入資料。 如果FIFO為空或滿,則控制訊號將使系統停止。 在這種設計中,輸入總是能夠寫入,並且不需要考慮FIFO滿的情況。
兩個地方需要FIFO:
- Data from CTRL to Gain Control.
- Data from DDC to Gain Control.
如下(FIFO為Xilinx BlockAdd):
新增相關控制訊號
下面的幾個訊號需要新增:
-
從CTRL開始,需要寫入啟用。
-
從DDC開始,需要寫入啟用。 來自FIR的data_tvalid可用於此。
-
增益控制必須為兩個FIFO生成讀使能。 將使用來自FIFO的空訊號並將其反轉; 如果有可用資料,該塊將讀取它。
修改CTRL模組
按照下圖進行連線
其中Relational block設定如下:
這將在Out2上建立一個輸出選通,當輸入改變時它將在一個週期內有效,並用作從CTRL到增益控制(頂層FIFO塊)的寫使能。
修改Gain Control模組
新增下訴模組和輸入輸出口:
- a. Inverter
- b. Inverter (for a total of two inverters)
- c. Delay (Xilinx)
按照如下方式連線:
-
來自頂層增益控制FIFO(FIFO)模組的FIFO空訊號只是一個反相器模組,用於為頂層DDC FIFO(FIFO1)建立讀使能。 如果FIFO不為空,則將讀取資料。
-
同樣,來自頂層DDC FIFO(FIFO1)的FIFO空訊號被反轉,以建立FIFO讀使能。
-
此相同訊號將用作新data_tvalid(為In2)。 但是,由於FIFO的延遲為1,因此必須延遲此訊號以確保此控制訊號與資料正確對齊(現在通過FIFO將其延遲1)。
建立好的結構如下:
FIFO Block的連線 -
a. Connect CTRL/Out2 to FIFO/we.
-
b. Connect FIFO/empty to Gain Control/CTRL_Empty.
-
c. Connect Gain Control/CTRL_Read to FIFO/re.
FIFO1 Block的連線 -
a. Connect DDC/Out1 to FIFO1/we.
-
b. Connect FIFO1/empty to Gain Control/In2.
-
c. Connect Gain Control/DDC_Read to FIFO1/re.
最終結果
執行模擬將得到與第一步相同的結果
3、指定時鐘域
指定時鐘域,主要利用頂層 System Generator token使能多時鐘域,其他Subsystem內新增 System Generator token然後取消使能多時鐘域,重新設定時鐘。
頂層 System Generator token使能Enable multiple clock
此時,請注意,FPGA時鐘週期和Simulink系統週期現在變為灰色。 此選項通知System Generator將為每個層次結構單獨指定時鐘速率。 因此,最重要的是隻包含子系統和FIFO; 在多速率設計中,頂層不應存在其他邏輯。
CTRL System Generator token不使能Enable multiple clock並設定相關時鐘
Gain Control System Generator token不使能Enable multiple clock並設定相關時鐘
DDC System Generator token不使能Enable multiple clock並設定相關時鐘
儲存
執行模擬,將得到和之前相同的結果