1. 程式人生 > >System Generator從入門到放棄(八)-使用多時鐘域實現多速率系統設計

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.zipLab4中找到,由於官方在設計時將一些變數寫到.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並設定相關時鐘

在這裡插入圖片描述
儲存
執行模擬,將得到和之前相同的結果