下載
DAC AD5541A Pmod 控制器(頂層檔案):pmod_dac_ad5541a.vhd (7.7 KB)
SPI 主控(也必須包含在專案中):spi_master.vhd (8.8 KB)
特點
- Digilent Pmod DA3(適用於 ADI 的 AD5541A 數位類比轉換器的 Pmod)精簡介面的 VHDL 原始碼
- 透過簡單的平行介面接收資料來控制 DAC
- 包含更新啟用功能,可選擇控制 DAC 輸出更新的時序
- 處理與 DAC Pmod 的所有串列通訊
- 可設定的系統時脈頻率
介紹
本文詳細介紹了一個 VHDL 元件,用於處理與 Digilent DAC AD5541A Pmod 的接口,如圖 1 所示。圖 2 展示了此 DAC Pmod 控制器整合到系統中的典型範例。如圖所示,DAC Pmod 控制器連接到 Pmod 連接埠並執行傳輸以設定 DAC 輸出。資料被閂鎖在一個簡單的平行介面上,該介面可以連接到使用者邏輯或 FPGA 上的輸入連接埠。更新訊號控制 DAC 何時輸出接收到的資料。
圖 1. Digilent DAC AD5541A Pmod
圖 2. 範例實現
背景
DAC AD55541A Pmod 提供單通道 16-bit 數位類比轉換器。該 Pmod 還包含一個 2.5V ADR441 基準電壓源。16-bit 資料解析度相當於每位元約 0.038mV。
工作原理
DAC Pmod 控制器使用一個簡單的狀態機和另一文章中 SPI 主控元件將資料載入到 AD5541A 的資料暫存器中。每當 update_output_n 連接埠為「0」時,AD5541A 的輸出就會從其資料暫存器更新。因此,如果 update_output_n 連接埠保持在「0」,則每當資料暫存器更新時,輸出都會立即更新。或者,也可以向 update_output_n 連接埠發送低脈衝,以控制輸出更新的精確時序。
狀態機
此設計使用圖 3 所示的狀態機來實現其操作。啟動後,組件立即進入 start 狀態。它會在此狀態保持 100us,以確保 Pmod 有足夠的時間完成上電。然後,組件進入 pause 狀態。此時,它確保與 DAC 的傳輸處理間隔至少 20ns(AD5541A 規格書規定最小間隔為 15ns)。然後,它會解除 pause 訊號,以指示 DAC Pmod 控制器已準備好與 DAC Pmod 進行新的傳輸處理,並進入 ready 狀態。它會在 ready 狀態下等待,直到 dac_tx_ena 啟用訊號被置位,此時它會閂鎖新傳輸處理的資料並進入 send_data 狀態。在此狀態下,它會與 Pmod 執行傳輸處理,然後返回 pause 狀態。雖然圖中未顯示,但任何時候重置組件都會使其返回 start 狀態。
圖 3. 狀態圖
SPI 主控
在 send_data 狀態期間,狀態機控制 SPI 主控元件與 Pmod 上的 DAC 進行通訊。SPI 主控的文件可在此處取得。
SPI 主控配置為 CPOL = 0 和 CPHA = 0,以滿足 AD5541A 轉換器的要求。
配置時脈
此 DAC Pmod 控制器的時脈配置是透過為 ENTITY 中定義的 GENERIC 參數 clk_freq 和 spi_clk_div 賦值來實現的。clk_freq 參數必須設定為 clk 輸入連接埠提供的系統時脈頻率(以 MHz 為單位)。公式 1 定義了 spi_clk_div 值的計算方法。
其中 fclk 是提供的系統時脈頻率,以 MHz 為單位。
例如,程式碼中指定的預設值為 spi_clk_div = 1。這是因為該組件是使用 50MHz 的系統時脈進行開發和測試的。50/100 = 0.5,向上捨入為 1。任何 clk_freq ≤ 100MHz 都會導致預設值 spi_clk_div = 1。
公式 2 定義了最終的串列時脈頻率 fsclk。
此計算使串列時脈保持在 DAC 額定最大通訊頻率 50MHz(3.3V 供電時)以下。當輸入時脈頻率(以 MHz 為單位)為 100 的整數倍時,通訊速度最快。
傳輸
DAC Pmod 控制器在其 busy 輸出上指示其可用性。當 busy 訊號為「0」時,控制器已準備好接受要傳送至 DAC Pmod 的傳輸。置位 dac_tx_ena 輸入會閂鎖 dac_data 的目前值。閂鎖後,控制器會置位 busy 訊號,表示傳輸正在進行中,因此目前無法使用。傳輸完成後,控制器會再次置位 busy 訊號,表示已準備好接受另一個要求。
範例傳輸
圖 4 展示了一個範例傳輸。busy 訊號為「0」。然後,使用者邏輯置位 dac_tx_ena 訊號,將 dac_data 匯流排上的資料傳送到 DAC。控制器置位 busy 訊號,表示請求已閂鎖,此時使用者邏輯可以置位 dac_tx_ena 訊號。控制器將串列通訊傳送到 DAC Pmod,然後在完成後置位 busy。
如果 dac_tx_ena 訊號未置位,則新的傳輸請求將被閂鎖,並在控制器可用後立即開始。
在本例中,使用者邏輯在請求向 DAC 發送新資料時將 update_output_n 訊號設定為高電平。因此,DAC 的輸出不會在收到新資料後立即更新。相反,它會在 update_output_n 訊號置位後更新(從而將發送到 DAC 的 ldac_n 訊號置位)。
圖 4. 傳輸範例
連接埠描述
表 1 描述了 DAC Pmod 控制器的連接埠。
表 1. 連接埠描述
連接
此 Pmod 有一個 6 針連接器 J1。表 2 提供了此連接器的引腳排列。DAC Pmod 控制器的連接埠需要指派給連接到此連接器的 FPGA 引腳,具體如下表所示。
表 2. DAC Pmod 引腳排列及與 DAC Pmod 控制器的連接
重置
reset_n 輸入連接埠必須為邏輯高電平,DAC Pmod 控制器元件才能運作。此連接埠上的邏輯低電平會非同步重置元件。重置期間,元件會中止目前與 DAC Pmod 的傳輸,並將 busy 輸出設為高電位以指示其不可用。重置解除後,DAC Pmod 控制器將重新啟動工作。
結論
這款 DAC Pmod 控制器是一款可編程邏輯元件,可與 Digilent 的 DAC AD5541A Pmod 介接。它簡化了與 DAC 的資料交換,並包含一個更新輸出使能功能。