最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

3.13插值濾波器設(shè)計(jì)--明德?lián)P科教1(mdy-edu.com)

2023-02-01 09:47 作者:明德?lián)P易老師  | 我要投稿

第十四章?插值濾波器設(shè)計(jì)


本文的文檔編號(hào):002700000026
第1節(jié)?項(xiàng)目背景



1.1?多采樣率數(shù)字濾波器

多采樣率,顧名思義即是有多個(gè)采樣率。上一章節(jié)中講解的FIR、IIR濾波器都只有一個(gè)采樣頻率,采樣率是固定不變的,然而在某些情況的設(shè)計(jì)中需要不同采樣頻率下的信號(hào),此時(shí)需要對采樣率進(jìn)行轉(zhuǎn)換。以一正弦波模擬信號(hào)為例,假定AD采樣速率是F1,但現(xiàn)在需要用到的是采樣頻率為F2的信號(hào),按照傳統(tǒng)的速率轉(zhuǎn)換理論則要將經(jīng)過F1采樣后的信號(hào)進(jìn)行DA轉(zhuǎn)換,再將轉(zhuǎn)換后的模擬信號(hào)進(jìn)行以F2采樣頻率的抽樣,最終得到采樣率為F2的數(shù)字信號(hào),完成采樣頻率的轉(zhuǎn)換。這種傳統(tǒng)方法不僅操作較為復(fù)雜,而且通過這一方式處理的信號(hào)也可能會(huì)由于操作問題受到損傷,因而這一思想現(xiàn)在已經(jīng)被淘汰,取而代之的采樣率轉(zhuǎn)換方法是抽取與內(nèi)插。


1.2?抽取

先來解釋一下抽取的含義:一個(gè)有的正弦波模擬信號(hào)經(jīng)采樣頻率為F1的抽樣信號(hào)抽樣后得到相應(yīng)數(shù)字信號(hào),很明顯這數(shù)字信號(hào)序列是在F1頻率下得到的現(xiàn)在如果隔幾個(gè)點(diǎn)抽取一個(gè)信號(hào),假定選定點(diǎn)數(shù)為5,同學(xué)們來思考一下,每隔5個(gè)點(diǎn)抽取一個(gè)信號(hào)的操作是不是相當(dāng)于采用1/5倍F1的采樣頻率對模擬信號(hào)進(jìn)行采樣?可以看出抽取的過程就是降低抽樣率的過程,但是這一操作是在時(shí)域的抽樣,等于信號(hào)在頻域波形的周期延拓,相應(yīng)的周期即為采樣頻率。因此,為了避免在頻域發(fā)生頻譜混疊,抽樣定理也是設(shè)計(jì)中必須考慮的要素。下面來具體介紹一下這一定理。

圖3.14-1采樣頻率為F1的頻譜圖


如上圖所示,假定所示信號(hào)是某一有信號(hào)經(jīng)采樣頻率F1抽樣得到的頻譜,此時(shí)的采樣頻率為8KHz。從圖中可以看到0到F1的這一段距離上8個(gè)空格,對應(yīng)的每個(gè)空格代表1KHz。有些朋友可能會(huì)問這不是在數(shù)字頻域嗎?單位應(yīng)該π,Hz又是從哪里來的呢沒錯(cuò),這里是數(shù)字頻域,采樣頻率F1處對應(yīng)的是2π,但是為了方便解釋以及讀者理解,這里用模擬頻率來對應(yīng)數(shù)字頻率。


綜上所述,上圖所示的是采樣頻率為8K的數(shù)字信號(hào)頻域圖,現(xiàn)在對這數(shù)字信號(hào)進(jìn)行時(shí)域抽取,從而來降低信號(hào)的采樣率。眾所周知,采樣率是數(shù)字信號(hào)頻域的波形周期,一旦對數(shù)字信號(hào)進(jìn)行時(shí)域抽取,采樣率下降,周期也會(huì)下降。因此在進(jìn)行信號(hào)抽取時(shí)要把控好尺度,在滿足抽樣定理的條件下對信號(hào)進(jìn)行抽取,否則就會(huì)發(fā)生頻譜混疊。

圖3.14-21/5倍F1采樣率的頻譜圖


3.14- 2所示的頻譜圖即是對信號(hào)進(jìn)行了1/5倍的F1采樣頻率抽取,從圖中可見發(fā)生了頻譜混疊現(xiàn)象。這正是因?yàn)?/span>1/5倍的F1是1600Hz,而信號(hào)的頻帶是1000Hz,滿足抽樣定理從而導(dǎo)致了頻譜混疊。為了避免這種情況發(fā)生,除了要滿足抽樣定理即抽樣倍數(shù)不能太高之外,還需要信號(hào)的頻帶設(shè)置在F1/2以下,這樣才能確保信號(hào)不發(fā)生頻譜混疊。因此,在進(jìn)行抽取操作之前需要增加一個(gè)低通濾波器,叫做抗混疊低通濾波器,用限制信號(hào)的頻帶,然后再進(jìn)行抽取?;诖丝梢赃M(jìn)行如下判斷:


低通濾波器的截止頻率是1/2倍的經(jīng)抽取后的采樣速率,即fc = 1/2 *?(F1/M),其中M是抽取倍數(shù)。而1/2*F1對應(yīng)的數(shù)域頻率是π,因此可以確定抗混疊低通濾波器的截止頻率是π/M。



1.3?內(nèi)插

從上一部分內(nèi)容可知抽取的過程是降低采樣率的過程,那么反過來,插值的過程自然就是提高采樣率的過程。同學(xué)們可以這樣來理解插值的思路:對經(jīng)F1抽樣下得到的數(shù)字信號(hào)的每兩個(gè)點(diǎn)之間進(jìn)行插值,插入的值為0,插值之后信號(hào)在單位時(shí)間內(nèi)的采樣點(diǎn)數(shù)增多,自然而然采樣速率也會(huì)提升,信號(hào)的頻譜的周期會(huì)有所增加。

圖3.14-3插值前信號(hào)頻譜圖


需要注意是插值只是在時(shí)域信號(hào)中間插入了D-1個(gè)零值,插值后僅僅采樣率發(fā)生了改變,信號(hào)的信息并沒有改變。因此,信號(hào)頻譜的形狀是不會(huì)改變的,改變的僅僅是周期。如上圖所示F1是插值之前信號(hào)的周期,插值之后信號(hào)頻譜的形狀不變,但其周期變?yōu)镕1*D,其中D是插值倍數(shù)。如果直接用F1*D倍的采樣率采信號(hào),可以從其得到的頻譜看出不會(huì)有中間兩個(gè)波形,也就是說這兩個(gè)波形是多余的,一般其被叫做鏡像頻譜。既然這段波形是多余的,那么就可以將用一個(gè)低通濾波器濾掉,對應(yīng)的低通濾波器就叫做鏡像低通濾波器。

圖3.14-4插值后信號(hào)頻譜圖


同樣地,下面來判斷一下鏡像低通濾波器的截止頻率。如圖3.14- 4所示,假內(nèi)插之后的采樣頻率為F2 =F1*D,fc = 1/2 *F1,則fc =1/2*(F2/D),而1/2*F2對應(yīng)的是π。注意,1/2*F2此時(shí)對應(yīng)的是π而并不是1/2*F1,因?yàn)檫@是完成插值操作采樣率增加后的頻譜,可以得到鏡像低通濾波器的截止頻率為:π/D。


有些讀者朋友可能還是不太理解插值的概念,這里再通俗的表達(dá)一下。大家都知道“點(diǎn)動(dòng)成線”這一概念,歸根結(jié)底圖像都是由點(diǎn)構(gòu)成的,波形的顯示也一樣。但是仔細(xì)思考一下可以發(fā)現(xiàn)信號(hào)轉(zhuǎn)化波形的兩個(gè)點(diǎn)之間是持續(xù)保持上一個(gè)點(diǎn)的狀態(tài)的。如下圖所示,在不同點(diǎn)波形有著對應(yīng)的信號(hào)值,但是兩個(gè)點(diǎn)之間信號(hào)值是保持不變的狀態(tài),直到第二個(gè)點(diǎn)來臨才會(huì)變?yōu)榇它c(diǎn)對應(yīng)的信號(hào)值,再保持此值到下一個(gè)點(diǎn),實(shí)際波形的產(chǎn)生過程中不斷重復(fù)如此循環(huán)??梢园l(fā)現(xiàn),這樣一來無法判斷此波形是正弦波還是三角波,在工作中使用這種波形更是非常的不方便,不能及時(shí)發(fā)現(xiàn)相應(yīng)錯(cuò)誤。




圖3.14-5波形兩點(diǎn)之間信號(hào)值保持不變



那么如何解決這一問題呢?所謂點(diǎn)動(dòng)成線,當(dāng)點(diǎn)越多越密集的時(shí)候,自然而然就可以展現(xiàn)出代表的形狀。如果試著在上圖波形的基礎(chǔ)上多增加一些點(diǎn),如下圖所示,可以看到當(dāng)增加的點(diǎn)足夠多的時(shí)候,就可以判斷出其代表的是什么圖像。

圖3.14-6在波形中增加點(diǎn)數(shù)


當(dāng)然在插值過程中并不能盲目的進(jìn)行加點(diǎn),首先需要設(shè)計(jì)每個(gè)點(diǎn)之間插入幾個(gè)點(diǎn)??梢愿鶕?jù)現(xiàn)實(shí)生活思考一下,當(dāng)兩個(gè)點(diǎn)之間距離越近就越能接近想要的形狀,當(dāng)兩個(gè)點(diǎn)之間距離越遠(yuǎn)就偏離需要的形狀越遠(yuǎn)。因此可以根據(jù)兩點(diǎn)之間距離的不同,插入不同數(shù)量的點(diǎn),距離越遠(yuǎn)需要插入的點(diǎn)越多,距離越近插入的點(diǎn)越少。


根據(jù)選取點(diǎn)的多少,可以得出兩點(diǎn)之間平均的值并以此作為插入點(diǎn)的值。比如點(diǎn)10,點(diǎn)2為100,如果插入一個(gè)點(diǎn)1(1),其對應(yīng)的值即為0+100-0/2=50;如果插入3個(gè)點(diǎn)1(1)、1(2)、1(3)時(shí),點(diǎn)1(1)的值為0+100-0/4=25。


通過在兩點(diǎn)之間插入中間點(diǎn)的方法可以得到更加平滑的圖像,這即為插值濾波器的原理。當(dāng)然這一解釋只是為了方便同學(xué)們更好的明白原理,真正使用的過程中還是需要按照抽取后進(jìn)行內(nèi)插的方法進(jìn)行操作,不可投機(jī)取巧。


第2節(jié)?設(shè)計(jì)目標(biāo)

按照至簡設(shè)計(jì)法的設(shè)計(jì)特色,開始一個(gè)新的設(shè)計(jì)之前首先應(yīng)明確設(shè)計(jì)目標(biāo)。設(shè)計(jì)目標(biāo)是整個(gè)設(shè)計(jì)的核心靈魂,后續(xù)的每個(gè)步驟與操作都是圍繞設(shè)計(jì)目標(biāo)進(jìn)行展開的。至簡設(shè)計(jì)法旨在讓設(shè)計(jì)師在設(shè)計(jì)過程中按照最中的簡單快捷的方式實(shí)現(xiàn)每個(gè)步驟和思路,明確設(shè)計(jì)目標(biāo)正是為了讓后面的每個(gè)階段的工作都有意義,而不去進(jìn)行不必要的工程展開,這樣一來可以少走很多彎路。對于初學(xué)者來說學(xué)習(xí)階段養(yǎng)成好習(xí)慣可以使之后的工程師生涯受益無窮。所以再次強(qiáng)調(diào)在最開始設(shè)計(jì)前一定要將設(shè)計(jì)目標(biāo)分析透徹,認(rèn)真思考本次設(shè)計(jì)最終想要實(shí)現(xiàn)什么目的,達(dá)到什么效果,然后再投入到設(shè)計(jì)中去。

本次設(shè)計(jì)使用采樣率大于100M的雙通道的示波器,將示波器的兩個(gè)通道分別與FPGA的DA通道1和DA通道2相連。FPGA內(nèi)部產(chǎn)生頻率為62.5KHz正弦信號(hào),這一正弦信號(hào)由8個(gè)點(diǎn)組成,該正弦信號(hào)一路輸出給DA通道1,另一路經(jīng)過插值濾波器后輸出給DA通道2。插值濾波器是4倍的插值,即輸入是8個(gè)點(diǎn)的正弦波,輸出的為32個(gè)點(diǎn)的正弦波。插值濾波器的實(shí)現(xiàn)結(jié)構(gòu)圖如下所示。

圖3.14-7插值濾波器實(shí)現(xiàn)結(jié)構(gòu)圖
FPGA開發(fā)板與示波器連接示意圖如下,需要將FPGA的DA通道和AD通道與示波器對應(yīng)通道相連接。

仿真插值濾波器的波形圖如下所示,上面的波形代表插值前的信號(hào),下面的波形代表插值后的信號(hào),可以明顯看出下面的波形的形狀更為光滑。

圖3.14-9插值濾波器波形圖


示波器的最終效果顯示如下圖所示,黃色線為通道1輸出的信號(hào),即未經(jīng)過插值的信號(hào)。藍(lán)色線為通道2的輸出的信號(hào),即插值后的信號(hào)。想要觀看上板演示視頻效果的讀者朋友可以登陸至簡設(shè)計(jì)法官方網(wǎng)站學(xué)習(xí):www.mdy-edu.com/xxxx。

第3節(jié)?設(shè)計(jì)實(shí)現(xiàn)

接下來就進(jìn)入設(shè)計(jì)的實(shí)現(xiàn)階段,本書會(huì)按照步驟和原理分析與讀者分享案例的實(shí)現(xiàn)方法,考慮到初學(xué)者的需要,此部分的內(nèi)容會(huì)比較詳細(xì)。如果基礎(chǔ)知識(shí)掌握得比較牢靠,只想學(xué)習(xí)此設(shè)計(jì)的步驟的同學(xué)可以跳過此部分,后面章節(jié)有簡化版的步驟分享。在此還是建議初學(xué)者不要選擇捷徑,一定按照詳細(xì)分析的內(nèi)容進(jìn)行學(xué)習(xí),只有掌握基礎(chǔ)知識(shí)、打好基礎(chǔ),才可以從容的獨(dú)立完成項(xiàng)目設(shè)計(jì)。


3.1?頂層信號(hào)

新建目錄:D:mdy_bookcic_prj。在該目錄中,新建一個(gè)名為cic_prj.v的文件。用GVIM打開后開始編寫代碼。這里再次強(qiáng)調(diào),建議初學(xué)者按照書中提供的文件路徑以及文件名進(jìn)行設(shè)置,避免后續(xù)跳出未知錯(cuò)誤。

首先來確定頂層信號(hào)。分析設(shè)計(jì)目標(biāo)可知本設(shè)計(jì)需要實(shí)現(xiàn)以下功能:FPGA產(chǎn)生控制DA9709的信號(hào),令通道A輸出未濾波的正弦信號(hào),讓通道B輸出濾波后的正弦信號(hào)。在此過程中,想要控制DA9709的工作模式則需控制DA9709的MODE、SLEEP管腳;想要控制通道A則需控制AD9280的CLK1、WRT1、DB7~0P1管腳;想要控制通道B則需控制AD9280的CLK2、WRT2、DB7~0P2管腳。在設(shè)計(jì)中使用信號(hào)clk連接到晶振表示50M時(shí)鐘的輸入;使用信號(hào)rst_n連接到按鍵表示復(fù)位;將dac_mode信號(hào)連接到DA9709的MODE管腳來控制其工作模式;將dac_sleep信號(hào)連接到DA9709的SLEEP管腳來控制其睡眠模式;將dac_clka信號(hào)連接到DA9709的CLK1管腳來控制通道A的時(shí)鐘;將dac_wra信號(hào)連接到DA9709的WRT1管腳來控制通道A的寫使能;將8位信號(hào)dac_da連接到DA9709的DB7~0P1管腳來控制通道A的寫數(shù)據(jù);將dac_clkb號(hào)連接到DA9709的CLK2腳來控制通道B時(shí)鐘;將dac_wrb信號(hào)連接到DA9709的WRT2腳來控制通道B使能;將8位信號(hào)dac_db接到DA9709的DB7~0P2腳來控制通道B寫數(shù)據(jù)。

綜上所述,本工程需要10個(gè)信號(hào):時(shí)鐘信號(hào)clk,復(fù)位信號(hào)rst_n,dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、dac_clkb、dac_wrb和dac_db信號(hào),其中dac_da和dac_db是8位信號(hào),其它的都是1位信號(hào)。信號(hào)和硬件的對應(yīng)關(guān)系如下表所示。

3.14 - 1信號(hào)和管腳關(guān)系

module的名稱定義為cic_prj,已知該設(shè)計(jì)有10個(gè)信號(hào):clk、rst_n、dac_mode、dac_sleep、dac_clka、dac_wra、dac_da、dac_clkb、dac_wrb和dac_db信號(hào),將與外部相連接的信號(hào)寫入模塊接口列表,具體頂層代碼如下所示:

隨后聲明輸入輸出屬性。這里需要聲明這個(gè)信號(hào)對于FPGA來說屬于輸入還是輸出,如果是輸入信號(hào)則聲明其為input,如果是輸出信號(hào)則聲明其為output。在本設(shè)計(jì)中,由于clk是外部的晶振輸入給FPGA的,因此在FPGA中clk為1位的輸入信號(hào)input;同樣地,rst_n是外部按鍵給FPGA的,因此在FPGA中rst_n是1位輸入信號(hào)input;dac_da和dac_db是8位的輸出信號(hào)output,dac_mode,dac_clka,dac_wra,dac_sleep,dac_clkb,dac_wrb均為是1位輸出信號(hào)output。綜上所述,補(bǔ)充輸入輸出端口定義的代碼如下:

3.2?正弦信號(hào)設(shè)計(jì)

將正弦信號(hào)命名為sin_data信號(hào),sin_data一共有8位,其具體值是從一個(gè)正弦信號(hào)中按照(2*pi/8)的間隔采樣到的。具體的采樣算法參見“信號(hào)發(fā)生器和DA轉(zhuǎn)換”章節(jié),這里不再贅述,最終得出sin_data值如下表所示。

表3.14 –2?不同采樣點(diǎn)的sin_data

定義一個(gè)7位的選擇信號(hào)addr,只要控制好addr,就能方便得到sin_data??梢詫懗鋈缦麓a:

接下來就來確定一下addr信號(hào)。addr是用來控制選擇數(shù)據(jù)的地址的信號(hào),通過控制addr的增加值,就能產(chǎn)生所需要的正弦波。

由設(shè)計(jì)目標(biāo)可知需要產(chǎn)生62.5KHz的正弦信號(hào),該正弦信號(hào)的周期是為1/62500=16000ns。本工程的工作時(shí)鐘是20ns,也就是16000/20=800個(gè)時(shí)鐘輸出一個(gè)正弦信號(hào),即800個(gè)時(shí)鐘完成上表的8個(gè)值輸出一遍的操作,即每800/8=100個(gè)時(shí)鐘輸出一個(gè)addr。

100個(gè)時(shí)鐘輸出一個(gè)值,那意味著此時(shí)需要一個(gè)計(jì)數(shù)器cnt0用來對100個(gè)時(shí)鐘進(jìn)行計(jì)數(shù)。之前的章節(jié)有講過,至簡設(shè)計(jì)法的計(jì)數(shù)器只考慮兩個(gè)因素:加1條件和計(jì)數(shù)數(shù)量,只要可以確定相應(yīng)邏輯,就能設(shè)計(jì)出對應(yīng)的計(jì)數(shù)器代碼。在本設(shè)計(jì)中由于計(jì)數(shù)器cnt0在不停地計(jì)數(shù),永遠(yuǎn)不停止的,因此可以認(rèn)為其加1條件是一直有效的,可寫成:assign add_cnt0==1。通過前面分析可以得出,每數(shù)100個(gè)時(shí)鐘后,輸出一個(gè)值,因此其計(jì)數(shù)數(shù)量為100。

這里有同學(xué)會(huì)提出疑問:加1條件的概念是什么?這里以停車位來進(jìn)行比喻,一般情況下對每個(gè)停車位置會(huì)進(jìn)行對應(yīng)編號(hào),但是如果某個(gè)位置上放置了一塊石頭無法作為停車位時(shí),該位置就不能獲得對應(yīng)的編號(hào)。反之則可以認(rèn)為停車位編號(hào)的加1條件就是:對應(yīng)位置上沒有石頭,它可以繼續(xù)的進(jìn)行編號(hào):assign add_cnt0 =?沒有石頭”。因此如果在設(shè)計(jì)中計(jì)數(shù)器一直沒有阻礙地進(jìn)行計(jì)數(shù)工作,就可以認(rèn)為加1條件是一直有效的。

確定好了加1條件和計(jì)數(shù)數(shù)量后開始進(jìn)行代碼編寫。相信各位往常都是一行行輸入代碼,但是至簡設(shè)計(jì)法有一個(gè)小技巧,可以為大家編寫代碼省去不少時(shí)間,并且一定程度上降低了代碼的出錯(cuò)率。至簡設(shè)計(jì)法將日常代碼中常用到的固定部分做成了模板,進(jìn)行代碼編程時(shí)可以調(diào)用相應(yīng)模板后根據(jù)邏輯輸入對應(yīng)設(shè)計(jì)的變量將代碼補(bǔ)充完整。這里就可以用模板編寫計(jì)數(shù)器代碼,感受一下這個(gè)炫酷的功能。

在命令模式下輸入:Mdyjsq”,點(diǎn)擊回車后就調(diào)出了對應(yīng)模板,如下圖所示。隨后再將本案例中的變量填到模板里面,就可以得到完整正確的計(jì)數(shù)器代碼。

綜上所述,計(jì)數(shù)器cnt0的加1條件是“1”,結(jié)束條件是“數(shù)到100個(gè)”,得到計(jì)數(shù)器cnt0的完整代碼如下:

再來確定addr信號(hào)的代碼表示,已知每100個(gè)時(shí)鐘后addr會(huì)加1。因此addr本身其實(shí)也是一個(gè)計(jì)數(shù)器,其計(jì)數(shù)數(shù)量為8,由于每數(shù)100個(gè)時(shí)鐘addr加1,因此其加1條件是“數(shù)到100個(gè)時(shí)鐘”,即end_cnt0。這里繼續(xù)選擇調(diào)用至簡設(shè)計(jì)法代碼模板,在命令模式下輸入“:Mdyjsq”后點(diǎn)擊回車,調(diào)出計(jì)數(shù)器模板,將“add_cnt1”和“end_cnt1”補(bǔ)充完整,其具體代碼如下:

3.3?CIC濾波器設(shè)計(jì)


3.3.1?新建FPGA工程

打開軟件“Quartus”,點(diǎn)擊“File”菜單下的“New Project Wizard”,如下圖所示。

圖3.14-12QUARTUS新建工程命令界面


彈出Introduction”界面后點(diǎn)擊“Next”,如下圖所示。

圖3.14-13QUARTUS新建工程介紹界面


設(shè)置工程目錄,工程名,頂層模塊名。工程目錄設(shè)置為D:mdy_bookcic_prj,工程名和頂層模塊名均為cic_prj,如下圖所示。填寫完畢后直接點(diǎn)擊“Next”。

圖3.14-14QUARTUS設(shè)置路徑和名稱界面


在設(shè)置新工程類型界面,選擇Empty project”選項(xiàng)建立空白工程,如下圖所示,隨后點(diǎn)擊“Next”。

圖3.14-15QUARTUS設(shè)置新建工程類型界面


錯(cuò)誤!未找到引用源。接著是添加文件界面,此時(shí)不選擇任何文件,直接點(diǎn)擊“Next”,如下圖所示。

圖3.14-16QUARTUS添加文件到新工程界面


在選擇芯片型號(hào)界面選擇“Cyclone ⅣE”,在芯片型號(hào)選擇處選擇“EP4CE15F23C8”,完成后直接點(diǎn)擊“Finish”,如下圖所示。

圖3.14-17QUARTUS設(shè)置新工程的芯片類型


3.3.2?FPGA生成CIC IP核

建立工程后,在軟件“Quartus”中“IP catalog”這一界面下選擇DSP”目錄下“Filter”的“FIR II”選項(xiàng),如下圖所示。

圖3.14-18IP Catalog中查找CIC IP核


進(jìn)入此界面后將新生成的fir濾波器IP核路徑設(shè)置為:D:mdy_bookcic_prj,entity name”處填寫:my_cic,如下圖所示。隨后點(diǎn)擊“OK”進(jìn)入FIR濾波器設(shè)置界面。

圖3.14-19設(shè)置CIC IP核的名稱和路徑


CIC IP核的設(shè)置界面如圖3.14-?20所示,此界面需要進(jìn)行以下設(shè)置:

Filter Type:選擇Interpolator,表示插值濾波器;

Rate change factor:填寫4,表示4倍插值;

output Rounding Method:選擇Truncation,表示輸出的結(jié)果要截?cái)啵?/span>

Output data width:選擇8。表示輸出結(jié)果要截?cái)酁?位;

其它選項(xiàng)默認(rèn),點(diǎn)擊窗口右下角的Generate Hdl”。

圖3.14-20 CIC IP核的設(shè)置界面

選擇后會(huì)彈出如下窗口,注意選擇文件為Verilog”文件,其余不進(jìn)行操作,隨后點(diǎn)擊“Generate”。

圖3.14-21設(shè)置CIC IP核的文件類型和路徑


出現(xiàn)下圖提示則表示CIC IP核生成成功,點(diǎn)擊Finish關(guān)閉CIC濾波器生成窗口。

圖3.14-22CIC IP核生成成功提示界面


如果出現(xiàn)以下提示,就表示需要手動(dòng)將剛才生成的IP核加到本工程。

圖3.14-23將CIC IP核加到新工程提示


Project”菜單中選擇“Add/Remove File to Project”,彈出文件窗口。

圖3.14-24手動(dòng)添加CIC IP核到工程


點(diǎn)擊右上角的?

?按鈕,在彈出來的窗口中,雙擊選擇D:mdy_bookcic_prjmy_cicsynthesis目錄下的my_cic.qip文件。點(diǎn)擊“Add”添加成功,關(guān)閉本窗口。

圖3.14-25添加CIC IP核文件到工程


3.3.3?例化CIC IP

用軟件GVIM”打開D:mdy_bookcic_prjmy_cicsynthesismy_cic.v文件,生成的FIR IP核文件如下圖所示。

圖3.14-26CIC IP核的模塊和輸入輸出信號(hào)


my_fir模塊的各個(gè)信號(hào)的描述見下表。

表3.14 –3 my_fir模塊的各信號(hào)描述



由于濾波器的輸入數(shù)據(jù)和輸出數(shù)據(jù)都是有符號(hào)數(shù)(補(bǔ)碼的形式,-128~127),但是正弦信sin_data是無符號(hào)數(shù)(0~255)。因此需要將sin_data變成有符號(hào)數(shù)后再發(fā)送給FIR進(jìn)行濾波。定義轉(zhuǎn)換后的信號(hào)為cic_din,該信號(hào)位寬為8位。將sin_data減去128轉(zhuǎn)換成有符號(hào)數(shù),即cic_din = sin_data - 128。

生成CIC IP核后需要對其進(jìn)行例化才能使進(jìn)行使用,例化名為u_my_cic,cic的輸出數(shù)據(jù)信號(hào)命名為cic_dout。所謂例化,則是需要把CIC IP核的信號(hào)連接到對應(yīng)的濾波器上。雖然這些信號(hào)是一樣的,但是其在不同模塊上的命名是不同的,如果不進(jìn)行連接,模塊與模塊之間互相不知道對方的存在。因此需要將兩個(gè)相同的信號(hào)連接在一起來達(dá)成同步工作的效果。

在設(shè)計(jì)過程中還需要控制CIC IP核的輸出,使每個(gè)數(shù)據(jù)都能等間隔輸出數(shù)據(jù)。由于CIC濾波器每100個(gè)時(shí)鐘輸入一個(gè)數(shù)據(jù),CIC是4倍速率,因此其輸出是25個(gè)時(shí)鐘一個(gè)數(shù)據(jù),即每25個(gè)時(shí)鐘向out_ready接口輸送一個(gè)有效信號(hào)。此時(shí)需要一個(gè)計(jì)數(shù)器cnt1來計(jì)時(shí)25個(gè)時(shí)鐘,由于該計(jì)數(shù)器在不斷工作永不停止,因此該計(jì)數(shù)器加1條件是“1”,結(jié)束條件是“數(shù)到25個(gè)”。這里可以繼續(xù)調(diào)用模板,在命令模式下輸入“:Mdyjsq”后點(diǎn)擊回車,調(diào)出對應(yīng)模板后將“add_cnt1”和“end_cnt1”補(bǔ)充完整,得到cnt1的代碼為:


有了這些信號(hào)后就可以進(jìn)行CIC IP核的例化。CIC IP核例化具體代碼如下:


3.4?DA接口信號(hào)設(shè)計(jì)

首先設(shè)計(jì)信號(hào)dac_da。dac_da是直接輸出正弦信號(hào),但由于DA的輸出電壓與dac_da是成反比例線性關(guān)系,所以dac_da都是通過(255-sin_data)得到。寫代碼時(shí)可以調(diào)用至簡設(shè)計(jì)法模板,在編輯模式下輸入“Shixu2”,將其補(bǔ)充完整得到dac_da的代碼表示如下:


接下來設(shè)計(jì)信號(hào)dac_sleep,AD是一直工作的,因此dac_sleep一直為0;為了滿足tS的時(shí)間要求,可以讓dac_clka = ~clk,dac_wra信號(hào)可以與dac_clka相同,其具體代碼表示如下:


接下來是設(shè)計(jì)信號(hào)dac_db。dac_db是直接輸出濾波后的信號(hào)cic_dout。需要注意的是cic_dout是有符號(hào)數(shù)(范圍是-128~127),所以要轉(zhuǎn)為無符號(hào)數(shù)(0~255)。假設(shè)轉(zhuǎn)換后的信號(hào)為cic_dout2,則cic_dout2 = cic_dout + 128。由于DA的通道2的輸出電壓與dac_db是成反比例線性關(guān)系,所以dac_db都是通過(255-cic_dout2)得到。寫出dac_db的代碼表示如下:

最后設(shè)計(jì)dac_clkb信號(hào),為了滿足tS的時(shí)間要求,可以讓dac_clkb = ~clk,dac_wrb可以與dac_clkb相同,其具體代碼表示如下:



3.5?信號(hào)定義

接下來是將module補(bǔ)充完整,首先來定義信號(hào)類型。再次強(qiáng)調(diào)一遍,在進(jìn)行reg和wire的判斷的時(shí)候,總?cè)菀状嬖诙嘤嗟穆?lián)想,比如認(rèn)為reg就是寄存器,wire是線;或者認(rèn)為reg會(huì)綜合成寄存器,wire不會(huì)綜合成寄存器。但是這些其實(shí)和reg型還是wire型都并無關(guān)系,在進(jìn)行信號(hào)類型判斷時(shí)不需要做任何的聯(lián)想,只要記住一個(gè)規(guī)則“用always實(shí)現(xiàn)的是reg型,其他都是wire”就可以了。

cnt0是用always產(chǎn)生的信號(hào),因此類型為reg。cnt0計(jì)數(shù)的最大值為99,需要用7根線表示,即位寬是7位。

關(guān)于信號(hào)位寬的獲取,在這里至簡設(shè)計(jì)法分享一個(gè)非常實(shí)用的技巧:打開計(jì)算器,點(diǎn)擊“查看”,選擇“程序員”模式,在“十進(jìn)制”下將信號(hào)值輸入進(jìn)去,就會(huì)獲得對應(yīng)的信號(hào)位寬。利用這一方法將cnt0的最大計(jì)數(shù)值99輸入到計(jì)算器中,如下圖所示,可以看到其位寬為7。

圖3.14-27通過計(jì)算器獲取信號(hào)位寬


add_cnt0和end_cnt0都是用assign方式設(shè)計(jì)的,因此類型為wire。并且其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:


cnt1是用always產(chǎn)生的信號(hào),因此類型為reg。cnt1計(jì)數(shù)的最大值為24,需要用5根線表示,即位寬是5位。

add_cnt1和end_cnt1都是用assign方式設(shè)計(jì)的,因此類型為wire。并且其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:


addr是用assign設(shè)計(jì)的,因此類型為wire。其值最大為7,需要用3根線表示,位寬為3。編輯模式下輸入“Reg3”調(diào)用至簡設(shè)計(jì)法模板,將其補(bǔ)充完整;

add_addr和end_addr都是用assign方式設(shè)計(jì)的,因此類型為wire;并且其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:


sin_data是用always設(shè)計(jì)的,因此類型為reg;其最大值為255,需要用8根線表示,位寬為8,編輯模式下輸入“Reg8”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:



cic_din是用assign設(shè)計(jì)的,因此類型為wire,其位寬為8,編輯模式下輸入“Wire8”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:



cic_dout是例化模塊的輸出,非always設(shè)計(jì)的,因此類型為wire。其位寬為8,編輯模式下輸入“Wire8”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:


cic_dout2是用assign設(shè)計(jì)的,非always設(shè)計(jì)的,因此類型為wire。其位寬為8,編輯模式下輸入“Wire8”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼表示如下:


dac_da是用always設(shè)計(jì)的,因此類型為reg,其位寬為8;

dac_sleep是用assign設(shè)計(jì)的,因此類型為wire,位寬為1;

dac_wra是用assign設(shè)計(jì)的,因此類型為wire,位寬為1;

dac_clka是用assign設(shè)計(jì)的,因此類型為wire,位寬為1;

dac_mode是用assign設(shè)計(jì)的,因此類型為wire,位寬為1。

依舊在編輯模式下輸入“ Reg8”“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:


dac_db是用always設(shè)計(jì)的,因此類型為reg,其位寬為8;

dac_wrb是用assign設(shè)計(jì)的,因此類型為wire,位寬為1;

dac_clkb是用assign設(shè)計(jì)的,因此類型為wire,位寬為1。

在編輯模式下輸入“Reg8”“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:


在代碼的最后一行寫下endmodule


至此,整個(gè)代碼的設(shè)計(jì)工作已經(jīng)完成。完整版的工程代碼如下:


第4節(jié)?綜合與上板

4.1?添加文件

上一節(jié)中已經(jīng)介紹了新建工程的過程,這里就不再贅述了?,F(xiàn)在打開軟件“Quartus”,在“Project”菜單中選擇“Add/Remove File to Project”,如下圖所示,隨后會(huì)彈出文件窗口。

圖3.14-28添加文件命令界面


點(diǎn)擊右上角的?

?按鈕,在彈出來的窗口中雙擊選擇D:mdy_bookcic_prj目錄下的cic_prj.v文件。點(diǎn)擊“Add”添加成功后關(guān)閉本窗口,添加文件成功界面如下圖所示。

圖3.14-29添加文件成功界面


4.2?綜合

編譯界面如下圖所示,在菜單欄中選中Processing后選擇Start Compilation,開始對整個(gè)工程進(jìn)行編譯和綜合。

圖3.14-30編譯命令界面


當(dāng)出現(xiàn)如下圖所示界面時(shí)就說明編譯綜合成功。

圖3.14-31編譯成功界面


4.3?配置管腳

下面需要對相應(yīng)管腳進(jìn)行配置。如下圖所示,在菜單欄中,選中“Assignments”,然后選擇“Pin Planner”,隨后就會(huì)彈出配置管腳的窗口。

圖3.14-32配置管腳命令界面


在配置窗口最下方中的“l(fā)ocation”一列,參考3.2-2信號(hào)和管腳關(guān)系,按照表3.14- 1中最右兩列配置好FPGA管腳,配置管理來源參見管腳配置環(huán)節(jié),最終配置的結(jié)果如圖3.13-34。配置完成后,關(guān)閉Pin Planner,軟件自動(dòng)會(huì)保存管腳配置信息。

圖3.14-33配置管腳界面


3.14–1 信號(hào)和管腳關(guān)系


圖3.14-34配置管腳成功界面




4.4?再次綜合

再次打開“QUARTUS”軟件,在菜單欄中選中“Processing”,然后選擇“Start Compilation”,再次對整個(gè)工程進(jìn)行編譯和綜合,如下圖所示。

圖3.14-35編譯命令界面


當(dāng)出現(xiàn)如3.2-19QUARTUS編譯成功標(biāo)志時(shí)就說明編譯綜合成功。

圖3.14-36編譯成功界面


4.5?連接開發(fā)板

完成編譯后開始進(jìn)行上板調(diào)試操作,開發(fā)板連接方式如下圖所示。將電源接上開發(fā)板,USB BLASTER一端連接到JTAG插口,另一端連到PC的USB接口。將開發(fā)板上的AD接口和DA與示波器的兩個(gè)通道相連,連接完成后再將電源打開。

圖3.14-37教學(xué)板連接示意圖


4.6?上板

“Quartus”的“Task”窗口中,右鍵“Program Device”選擇“Open”進(jìn)入燒錄界面,如下圖所示。

圖3.14-38打開配置程序命令


默認(rèn)會(huì)選中文件output/fir_prj.sof,Hardware Setup的旁邊會(huì)顯示USB-Blaster,如下圖所示。

圖3.14-39配置程序界面


當(dāng)進(jìn)度條到100%提示成功后即可在示波器中觀察相應(yīng)現(xiàn)象。

圖3.14-40配置成功界面

下載完成后,如果操作無誤此時(shí)可以在示波器上看到對應(yīng)的波形。如果沒有顯示成功,就需要返回檢查一下是否連接到位,有沒有寫錯(cuò)代碼了或者軟件參數(shù)選擇有沒有選擇錯(cuò)誤。如果無法自己完成錯(cuò)誤排查的話,可以重新按照步驟操作一遍,相信一定會(huì)達(dá)到想要的效果。


未完請看:3.13插值濾波器設(shè)計(jì)--明德?lián)P科教2(mdy-edu.com)


3.13插值濾波器設(shè)計(jì)--明德?lián)P科教1(mdy-edu.com)的評論 (共 條)

分享到微博請遵守國家法律
界首市| 峨眉山市| 襄垣县| 新巴尔虎右旗| 武定县| 安岳县| 资兴市| 易门县| 高州市| 云南省| 博兴县| 仲巴县| 通江县| 阿合奇县| 宝山区| 诸暨市| 辰溪县| 临湘市| 新田县| 邵东县| 梁山县| 崇明县| 东阳市| 宝山区| 上杭县| 富阳市| 光泽县| 临沭县| 来安县| 广宗县| 乌苏市| 黄浦区| 灵寿县| 天祝| 明光市| 延寿县| 江孜县| 拜泉县| 同心县| 庆城县| 疏勒县|