如何在eclipse Z7上創(chuàng)建基本設(shè)計,以便在自定義項目中使用AWG Zmod
作為該設(shè)計在硬件中所做的工作的高級描述,Zmod AWG控制器IP在針對eclipse Z7的Vivado項目的塊設(shè)計中實例化,其輸入通過AXI DMA控制器直接從DDR內(nèi)存中提供值。這允許運行在Zynq的arm核心處理器上的C應(yīng)用程序?qū)⒍M制代碼值寫入DDR,然后讀取到Zmod AWG控制器IP。
如果還沒有,那么創(chuàng)建一個新的針對eclipse Z7的Vivado 2022.1項目,并將Digilent Vivado庫作為存儲庫添加到項目中。關(guān)于這些步驟,請參閱我之前的項目帖子。
維瓦多硬件設(shè)計
Zmod AWG控制器IP可以直接在HDL中實例化或在塊設(shè)計中實例化。由于Vivado中的塊設(shè)計工作流中有許多方便的功能,例如連接自動化和目標板外設(shè)的自動連接,因此我使用塊設(shè)計工作流。根據(jù)添加到模塊設(shè)計中的IP模塊,我將這一節(jié)分成了幾個小節(jié)。希望這對那些將Zmod AWG添加到現(xiàn)有設(shè)計中的人有所幫助。
Zynq處理系統(tǒng)
首先,Zynq Processing System IP需要被實例化,這樣設(shè)計才會有面向arm核心處理器的鉤子。添加Zynq PS IP后,將出現(xiàn)運行Block Automation的選項,該選項將應(yīng)用Zynq特定于eclipse Z7板的設(shè)置。
在運行Zynq PS的Block Automation之后,在圖中雙擊它以打開其配置窗口。為了使PL中的DMA控制器能夠訪問DDR,需要一個高性能的AXI端口,因此在PS-PL Configuration > HP Slave AXI Interface下,啟用S AXI HP0接口:
然后在MIO Configuration > I/O Peripherals > GPIO下,啟用EMIO GPIO,寬度為2(這將在后面的步驟中解釋):
在Vivado 2022.1中開始使用eclipse Z7 + AWG Zmod
本項目介紹了如何在eclipse Z7上創(chuàng)建基本設(shè)計,以便在自定義項目中使用AWG Zmod。
最近,我做了一個項目教程,介紹了如何在eclipse Z7上集成Diligent的新Digitizer Zmod到Vivado/Vitis 2022.1的自定義設(shè)計中,我想繼續(xù)這個線程,同時也展示了如何在自定義設(shè)計中使用他們的AWG Zmod。
Digilent的模擬波形發(fā)生器(AWG) Zmod是一款兼容syzygy的雙通道14位數(shù)模轉(zhuǎn)換器模塊,我再次在基于Zynq-7000的eclipse Z7 FPGA開發(fā)板和Vivado/Vitis 2022.1上使用。
AWG Zmod中的DAC模塊接收與特定模擬值輸出相關(guān)的數(shù)字二進制“代碼”。在給定的模式中改變二進制代碼是如何使用DAC在DAC芯片和支持電路的規(guī)格限制內(nèi)創(chuàng)建任何所需波形的。有很多很棒的文章和資源解釋了dac的操作理論,所以我就不再贅述了
接下來,添加Constant IP。打開其配置窗口并將其值設(shè)置為0。也可以將其命名為“gnd”。
DMA控制器
將AXI DMA控制器添加到塊設(shè)計并打開其配置窗口。禁用分散收集引擎,除非您計劃特別使用它。此外,除非特別計劃使用寫通道,否則也只啟用讀通道,并啟用選項以允許對讀通道進行非對齊傳輸。
在DMA的配置窗口上單擊OK以保存/應(yīng)用更改。窗口關(guān)閉后,稍后將出現(xiàn)連接自動化的選項。使用Vivado想要應(yīng)用的默認設(shè)置運行這個生成的連接自動化。
時鐘的向?qū)?/strong>
而不是添加一個時鐘向?qū)褂?按鈕或添加IP…選項,切換Board選項卡以從eclipse Z7連接電路板組件/外設(shè)。
在時鐘下,右鍵單擊系統(tǒng)時鐘,選擇連接板組件…選擇將系統(tǒng)輸入時鐘clock_CLK_IN1連接到一個新的時鐘向?qū)P。
打開“時鐘向?qū)А钡呐渲么翱?,進行以下更改:
?啟用頻率為100MHz,相位為0的clk_out1
?啟用頻率為100MHz,相位為90的clk_out2
?將復位更改為低電平以匹配設(shè)計的其余部分。
AXIS數(shù)據(jù)FIFO
在模塊設(shè)計中添加一個AXIS數(shù)據(jù)FIFO,并啟用主/從AXIS端口的獨立時鐘選項。
這是為了處理穿過二進制代碼的時鐘域,從DDR出來并進入Zmod AWG控制器。
為了詳細說明這一點,Zmod AWG控制器要求DAC_Clk與DAC_InIO_Clk具有相同的100MHz頻率,但與DAC_InIO_Clk相位差為90度。為了生成與另一個給定時鐘有90度相位偏移的時鐘,同時保持與之同步,我發(fā)現(xiàn)最簡單的方法是使用時鐘向?qū)е械腗MCM。但是,您不能使用Zynq PS中的PL時鐘(FCLK_CLK)來驅(qū)動時鐘向?qū)У腸lk_in,因為這會導致Vivado工具中PL時鐘的重新定義。這就是為什么我必須使用eclipse板的系統(tǒng)時鐘來驅(qū)動時鐘向?qū)А?
這意味著Zmod AWG控制器的所有時鐘都由sys_clock時鐘,將其置于FCLK_CLK0域中的AXI DMA控制器的單獨時鐘域中。簡單地使用具有獨立時鐘的FIFO比試圖將所有內(nèi)容轉(zhuǎn)換為sys_clock的時鐘域要容易得多(我猜它會有一些自己的問題,試圖將DMA放在上面,因為sys_clock來自以太網(wǎng)PHY而不是eclipse板上的Zynq)。
將FIFO的S_AXIS連接到DMA控制器的M_AXIS_MM2S,將s_axis_aclk連接到Zynq PS的FCLK_CLK0,將s_axis_aresetn連接到處理器系統(tǒng)重置的peripheral_aresetn(這將從運行AXIS DMA控制器的連接自動化中生成),并將m_axis_aclk連接到時鐘向?qū)У腸lk_out1。
Zmod AWG控制器
現(xiàn)在終于到了展示明星的時候了:將Zmod AWG控制器添加到塊設(shè)計中并打開其配置窗口。
禁用外部增益配置信號,外部校準信號和SPI間接訪問端口的選項,除非您特別計劃使用它們。使這些端口處于啟用狀態(tài)和未連接狀態(tài)會導致工具嘗試猜測如何將它們連接起來,以防止意外行為(通常是將它們連接到地面),這也可能導致意外行為。
將InputDataStream連接到AXIS數(shù)據(jù)FIFO的M_AXIS,將SysClk100和DAC_InIO_Clk連接到時鐘向?qū)У腸lk_out1,將DAC_Clk連接到時鐘向?qū)У腸lk_out2,將sDAC_EnIn連接到時鐘向?qū)У膌ocked(如果時鐘運行不穩(wěn)定,啟用DAC的輸出是沒有意義的)。
將aRst_n連接到處理器系統(tǒng)重置的peripheral_aresetn(它將從運行AXIS DMA控制器的連接自動化中生成)。
然后將sTestMode連接到“gnd”常量。驅(qū)動測試模式信號低只是硬編碼Zmod AWG控制器在正常運行。測試模式僅用于DAC的校準/歸零。
添加一個Concat塊,并將sInitDoneDAC和sConfigError連接到它的輸入。
將Concat' sout[1:0]連接到Zynq PS的GPIO_I[1:0],同時不連接GPIO_O[1:0]和GPIO_T[1:0]。這就是Zynq PS在操作期間如何從Zmod AWG控制器讀取DAC的狀態(tài)。
最后,將Zmod AWG控制器輸出的其余部分連接到外部端口(右鍵單擊并選擇“Make external”)。
整體塊體設(shè)計結(jié)果如下:
驗證塊設(shè)計以確認沒有錯誤或嚴重警告,然后保存塊設(shè)計。保存后,創(chuàng)建一個HDL包裝器實例化它的設(shè)計(我已經(jīng)展示了如何創(chuàng)建一個HDL包裝器在許多過去的項目帖子)。
Vivado約束
創(chuàng)建三個約束文件(這只是個人偏好,可以都在一個文件中):一個用于SYZYGY端口a特定信號,SYZYGY端口B特定信號,一個用于eclipse Z7特定信號:
從eclipse Z7信號的約束開始,不要指定eclipse Z7系統(tǒng)時鐘的周期。只需指定FPGA封裝引腳和IO電壓(3.3v)。
指定系統(tǒng)時鐘周期會導致硬件中的路由問題,因為Vivado會覆蓋eclipse的板預(yù)置文件中的底層板約束文件中的設(shè)置,即使您為時鐘周期指定了完全相同的值。
我猜這是2022.1的一個奇怪現(xiàn)象,因為Digilent的Github倉庫中eclipse Z7的主約束文件指定了系統(tǒng)時鐘的周期。盲目地復制+粘貼它將導致在實現(xiàn)的設(shè)計中出現(xiàn)神秘的方法論關(guān)鍵警告,以及硬件中的意外行為,因為sys時鐘驅(qū)動的時鐘向?qū)峁┑膬蓚€時鐘需要同步。
我在SYZYGY端口B上使用AWG Zmod,而在SYZYGY端口A上沒有任何東西,我已經(jīng)附上了我在下面為您創(chuàng)建的eclipse SYZYGY端口B上的AWG Zmod的約束文件。
出口的硬件
隨著設(shè)計的完成,運行合成,實現(xiàn),并生成一個比特流。打開實現(xiàn)的設(shè)計,看看時序結(jié)果如何,以及使用了多少可編程邏輯:
最后,選擇File > export > export hardware,按照提示窗口導出硬件設(shè)計,包括比特流。
本文編譯自hackster.io