1. gzyueqian
      13352868059

      FPGA實(shí)現(xiàn)DDS的設(shè)計(jì)

      更新時(shí)間: 2008-01-11 08:59:25來(lái)源: 粵嵌教育瀏覽量:874

        隨著科技的發(fā)展,對(duì)信號(hào)發(fā)生器各方面的要求越來(lái)越高。傳統(tǒng)的信號(hào)發(fā)生器由于波形精度低、頻率穩(wěn)定性差等缺點(diǎn),已經(jīng)不能滿足許多實(shí)際應(yīng)用的需要,所以必須研究新的信號(hào)發(fā)生器以滿足實(shí)際應(yīng)用的要求。近年來(lái),直接數(shù)字頻率合成器(DDS)由于其具有頻率分辨率高、頻率變換速度快、相位可連續(xù)變化等特點(diǎn),在數(shù)字通信系統(tǒng)中已被廣泛采用。隨著微電子技術(shù)的發(fā)展,現(xiàn)場(chǎng)可編程門(mén)陣列( FPGA)器件得到了飛速發(fā)展。由于該器件具有速度快、集成度高和現(xiàn)場(chǎng)可編程的優(yōu)點(diǎn),因而在數(shù)字處理中得到廣泛應(yīng)用,越來(lái)越得到硬件電路設(shè)計(jì)工程師的青睞。

      1 DDS的基本原理
        DDS的主要思想是從相位的概念出發(fā)合成所需的波形,其結(jié)構(gòu)由相位累加器,相位—幅值轉(zhuǎn)換器, D/A轉(zhuǎn)換器和低通濾波器組成,是Tierney, Rader和Gold于1971年提出。它的基本原理框圖如圖1所示。
                 
                         圖1 DDS的原理框圖

        圖1中, fc 為時(shí)鐘頻率, K為頻率控制字, N 為相位累加器的字長(zhǎng), m 為ROM地址線位數(shù), n為ROM的數(shù)據(jù)線寬度(一般也為D/A轉(zhuǎn)換器的位數(shù)) , fo 為輸出頻率, 輸出頻率fo 由fC 和K共同決定: fo = fC×K/2N 。又因?yàn)镈DS遵循奈奎斯特(Nyquist)取樣定律:即的輸出頻率是時(shí)鐘頻率的一半,即fo = fC/2。實(shí)際中DDS的輸出頻率由允許輸出的雜散水平?jīng)Q定,一般取值為fo ≤40% fC。
        對(duì)DDS進(jìn)行優(yōu)化設(shè)計(jì),目的是在保持DDS原有優(yōu)點(diǎn)的基礎(chǔ)上,盡量減少硬件復(fù)雜性,降低芯片面積和功耗,提高芯片速度等。

      2 優(yōu)化構(gòu)想
        為了減小DDS的設(shè)計(jì)成本, 對(duì)其結(jié)構(gòu)進(jìn)行優(yōu)化,優(yōu)化后DDS的核心結(jié)構(gòu)框圖如下所示。
                
                            圖2 優(yōu)化后的DDS核心框圖
        其中的地址轉(zhuǎn)換器是根據(jù)adri[14]的數(shù)值判斷數(shù)值是增長(zhǎng)(0~π/2)或減少(π/2~π) ,數(shù)據(jù)轉(zhuǎn)換器是根據(jù)adri[15]的數(shù)值判斷生成波形的前半個(gè)周期(0~π)或者后半個(gè)周期(π~2π) 。

      2. 1 流水線結(jié)構(gòu)
        將32位累加器分成4條流水線,每條流水線完成8位的加法運(yùn)算,流水線的進(jìn)位進(jìn)行級(jí)聯(lián), 運(yùn)用流水線結(jié)構(gòu)可以提高累加器的運(yùn)算速度3倍多。為了提高運(yùn)算速度,加法器采用的是目前速度快的預(yù)先進(jìn)位算法;為了避免因預(yù)先進(jìn)位傳輸鏈過(guò)長(zhǎng)而影響速度,每8位加法器由兩個(gè)4位加法器實(shí)現(xiàn)。如圖3所示:
                    
                             圖3 流水線加法器框圖

        采用流水線結(jié)構(gòu)可以提高器件的運(yùn)算速度。但是缺點(diǎn)是數(shù)據(jù)需要保持4個(gè)時(shí)鐘周期,降低了系統(tǒng)跳頻的跳變頻率。
      2. 2 加法器位的修正
        提取相位累加器的高16位輸出作為ROM的查找地址,輸出截位減少了ROM的容量,損失的低16位對(duì)生成波精度造成的誤差可以忽略不計(jì);但因此產(chǎn)生的截位誤差卻會(huì)對(duì)頻譜純度和輸出帶寬產(chǎn)生影響。實(shí)驗(yàn)表明當(dāng)頻率控制字K和截位誤差2(32-16) 在為互質(zhì)數(shù)的情況下可以將影響減到小。解決的辦法是在相位累加器的位加入c0,相位累加器的字長(zhǎng)變?yōu)?2 +1位,截位誤差為2(32-16)+1 ,即頻率控制字(奇數(shù))和截位誤差(偶數(shù))之間互質(zhì)。這樣帶來(lái)地址上1/2LSB的誤差影響,但是在實(shí)際應(yīng)用中可以忽略。

      2. 3 ROM的壓縮:三角近似法
        三角近似法是利用三角恒等式近似的方法對(duì)ROM容量進(jìn)行壓縮:因?yàn)閟in(A+B+C) = sin(A+B)cosC + cosAcosBsinC + sinAsinBsinC,當(dāng)A 遠(yuǎn)大于B 和C時(shí),則利用三角近似cosB≈1, sinC≈0 ,上式可以簡(jiǎn)化為: sin(A+B+C) = sin(A+B) + cosAsinC 。這樣可以將ROM轉(zhuǎn)化為兩個(gè)較小的ROM,分別存儲(chǔ)sin (A+B)和cosAsinC的值,這兩個(gè)ROM的總?cè)萘繛?A(2B+2C) 。從頻譜和ROM容量?jī)煞矫孢M(jìn)行考慮,對(duì)于14位地址的分割是: A=5,B=4,C=5。
        對(duì)ROM表的壓縮,是利用相位累加器的次高位來(lái)判斷象限,將正弦合成波合成到0~π范圍;位作為符號(hào)位, 將正弦波合成到0~2π范圍。對(duì)于余弦波,符號(hào)位是由位與次高位異或得到,因?yàn)橛嘞也ㄐ伪日也ㄐ翁崆?pi;/2相位。但是因?yàn)檎液瘮?shù)和余弦函數(shù)關(guān)于π/4對(duì)稱(chēng),因此可以只存儲(chǔ)(0~π/4)的正弦和余弦函數(shù)值,這樣存儲(chǔ)器大小將減小一半。相位累加器的次次高位可以在0~π/4和π/4~π/2之間選擇。實(shí)際電路實(shí)現(xiàn)時(shí),次次高位是與次高位異或產(chǎn)生這個(gè)信號(hào)。另外,為了完成正交輸出,還要增加兩個(gè)2:1多路選擇器電路。

      3 DDS的Verilog HDL實(shí)現(xiàn)
        Verilog HDL語(yǔ)言專(zhuān)門(mén)面向硬件與系統(tǒng)設(shè)計(jì),可以在芯片算法、功能模塊、結(jié)構(gòu)層次、測(cè)試向量等方面進(jìn)行描述,是當(dāng)前ASIC設(shè)計(jì)的主要語(yǔ)言之一。
      3. 1 四位超前進(jìn)位加法器的主要源程序:
        g[i] = a[i]&b[i]; p[i] = a[i] | b[i];
        always@ ( a or b or gnd or g or p )
        begin
        carrychain[0] = g[0] | p[0]&cin;
        sum[0] = p[0] ^cin;
        for (j= 4'1;j<4;j=j+4'b1)
        begin
        carrychain[j] = g[j] | p[j]&carrychain[j-1];
        sum[j] = p[j] ^carrychain[j-1];
        end
        cout = carrychain[3];
        end
      3. 2 流水線加法器陣列及位修正的實(shí)現(xiàn)
        claadd8s U_add1 (pipe1, SYNCFREQ[7:0], gnd,add1,c1);
        claadd8s U_add2 (pipe2, SYNCFREQ[15:8],pipec1,add2,c2);
        claadd8s U_add3 (pipe3, SYNCFREQ[23:16],pipec2,add3,c3);
        claadd8s U_add4 (pipe4, SYNCFREQ[31:24],pipec3,add4,c4);
        在此調(diào)用了8 位超前進(jìn)位加法器,用VerilogHDL 的結(jié)構(gòu)描述方法實(shí)現(xiàn),對(duì)應(yīng)于用電路圖輸入邏輯。四個(gè)加法器在不同的時(shí)鐘控制下工作,實(shí)現(xiàn)流水線結(jié)構(gòu); pipe1、pipe2、pipe3、pipe4分別為各自加法器的和; SYNCFREQ 是32 位頻率控制字, gnd、pipec1、pipec2、pipec3是加法器的輸入進(jìn)位位, c1、c2、c3、c4是加法器的輸出進(jìn)位位。
      3. 3 波形折疊和抬高算法
      3.3.1 波形折疊(地址轉(zhuǎn)換器)
        always@ (adri)
        if (adri[14] )
        adro = 14'h1ff^adri[13:0];
        else
        adro = adri;
        end
        endmodule
      3.3.2 抬高算法(數(shù)據(jù)轉(zhuǎn)換器)
         always@ ( data or adri[15] )   begin
        if (!adri[15] ) sindata = 9'h1ff^data;
        else  sindata= data - 9'h001;
        end
        result = {!adri[15] , sindata};
        end
        根據(jù)adri[14]的數(shù)值判斷地址碼是否需對(duì)π/2進(jìn)行折疊。用^(按位異或) 實(shí)現(xiàn)對(duì)地址碼對(duì)π/2 的折疊:用全1減去adri的數(shù)值,因?yàn)楸粶p數(shù)是確定的而且是全1,所以用異或?qū)崿F(xiàn)減法,比用減法器節(jié)省門(mén)數(shù)。
        根據(jù)adri[15]的數(shù)值判斷波形的正負(fù):若是正,則用全1和從ROM中取出的值相加,相當(dāng)于原數(shù)據(jù)減1后再在位拼接1,以1LSB 的偏移量為代價(jià),省略減法器;若是負(fù),則用按位異或?qū)崿F(xiàn)減法,得到經(jīng)過(guò)抬高處理的數(shù)據(jù)。抬高處理是為了使DAC的輸入全為正數(shù)。
      3. 4 壓縮sin值ROM查值表
        rom1 U_rom1 (QWAVESIN , MODPHASE , SYSCLK , RESETN) ;
        rom2 U_rom2 (product , QWAVESIN2 , QWAVESIN1 , SYSCLK , RESETN) ;
        其中rom1 是sin(A+B) 值的存儲(chǔ)表rom2 是cosAsinC值的存儲(chǔ)表。QWAVESIN是rom1表的輸出,MODEPHASE是從累加器輸出的量化正弦值。p roduct是rom2 的輸出, QWAVESIN2 , QWAVESIN1 分別是cosA和sinC 的值。再由9 位加法器將rom1 和rom2的輸出相加,就可得到正弦查值表的完整輸出。在MAX + PLUSII下的正弦查值表的輸出如下圖所示。
                   
                           圖4 DDS在k = 02時(shí)的仿真時(shí)序圖
        實(shí)驗(yàn)表明,所設(shè)計(jì)的DDS在滿足性能的條件下,提高了芯片工作速度,節(jié)約了芯片面積,改善了頻譜性能。

      4 結(jié)束語(yǔ)
        本文給出了利用Altera 公司的FLEX10K設(shè)計(jì)DDS的方法,并得到了一些改進(jìn):使用流水線算法和輸入寄存器可以在不過(guò)多增加門(mén)數(shù)的條件下,大幅度提高芯片的工作速度;修正加法器位帶來(lái)3dB左右的頻譜性能提高,提高了輸出波形的頻譜純度;壓縮ROM的容量,可以使芯片在滿足性能的基礎(chǔ)上節(jié)約了芯片資源。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 三上悠亚AV福利在线观看 | 最新国产乱子伦视频 | 天天爱天天做久久狠狠做 | 自拍偷精品亚洲手机在线 | 久久婷婷人人喊人人澡人人爽 | 日本一道综合久久久 |