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