陳彬彬,藍(lán)浩宇,程振輝,曾智勇
(北方工業(yè)大學(xué),北京,100144)
當(dāng)今社會(huì),隨著電子技術(shù)的快速發(fā)展,越來(lái)越多的信號(hào)需要使用計(jì)算機(jī)來(lái)處理,在自然界中我們所能接觸到的信號(hào)大多是模擬信號(hào),像溫度的升高和降低,壓力的增加和減少等變化所產(chǎn)生的信號(hào)都是模擬信號(hào),但是計(jì)算機(jī)只能處理數(shù)字信號(hào),所以在進(jìn)行數(shù)字信號(hào)處理的過(guò)程中,我們都是先采用模數(shù)轉(zhuǎn)換裝置(ADC)將采集到的模擬信號(hào)轉(zhuǎn)化成數(shù)字信號(hào),然后對(duì)這些信號(hào)經(jīng)過(guò)一系列的數(shù)字信號(hào)處理(DSP),但由于能被我們聽(tīng)懂的依然是模擬信號(hào)(比如聲音信號(hào)),所以最終我們還要將處理完的數(shù)字信號(hào)通過(guò)數(shù)模轉(zhuǎn)化裝置(DAC)再轉(zhuǎn)化成模擬信號(hào),這就是數(shù)字信號(hào)處理系統(tǒng)(如圖1 所示)的核心內(nèi)容。隨著電子產(chǎn)品的不斷更新,各個(gè)領(lǐng)域?qū)?shù)字信號(hào)處理系統(tǒng)的要求也越來(lái)越高,ADC 和DAC 作為數(shù)字信號(hào)處理中最關(guān)鍵的部分,它們的設(shè)計(jì)和優(yōu)化就變得格外重要,本文主要針對(duì)DAC 的譯碼電路進(jìn)行設(shè)計(jì),不涉及實(shí)體電路的搭建,使用ModelSim 和Quartus II 軟件進(jìn)行聯(lián)合仿真,驗(yàn)證思路的正確性和可行性。
圖1 數(shù)字信號(hào)處理系統(tǒng)的框圖
DAC 的全稱是Digital to Analog Converter,即數(shù)模轉(zhuǎn)換器,它是一種可以實(shí)現(xiàn)將數(shù)字量轉(zhuǎn)換成模擬量的電路結(jié)構(gòu)[9]。作為最基本且最重要的混合信號(hào)構(gòu)建模塊,DAC 由N-2N數(shù)字譯碼電路和模擬等分壓或等分流電路組成,所輸入的N個(gè)數(shù)字碼(bN-1,…,b2,b1,b0)經(jīng)過(guò)譯碼電路生成2N個(gè)開(kāi)關(guān)信號(hào)去控制模擬電路中的等壓或等流電路開(kāi)關(guān),從而輸出相應(yīng)的模擬信號(hào),輸出電壓表達(dá)式如下:
其中k為比例放大系數(shù),Vref為分壓電路的總輸入電壓。
在數(shù)字碼發(fā)生變化的瞬間,DAC 模塊會(huì)產(chǎn)生完全不同的電壓(或電流)輸出,這會(huì)導(dǎo)致輸出的模擬信號(hào)中出現(xiàn)噪聲。消除噪聲的解決方案之一是使用溫度計(jì)碼,溫度計(jì)碼的使用對(duì)譯碼電路而言,當(dāng)輸入的數(shù)字碼數(shù)值增加1 的時(shí)候,所輸出的譯碼結(jié)果中會(huì)多一位1。另外,在芯片加工過(guò)程中,同樣大小的電阻或電容都有一定的誤差,也就是等壓(或等流)電路之間存在一定的工藝誤差,如果輸出碼所控制的模擬電路固定不變,則會(huì)產(chǎn)生較大的工藝匹配誤差帶入到輸出模擬信號(hào)中,為了減少這種誤差,一般采用數(shù)據(jù)權(quán)重平均算法(DWA)來(lái)平均使用分壓電路。
在實(shí)際生產(chǎn)和應(yīng)用中,通信系統(tǒng)的設(shè)計(jì)和研究直接在硬件上實(shí)現(xiàn)起來(lái)不僅復(fù)雜而且昂貴,所以現(xiàn)代通信技術(shù)的系統(tǒng)分析通常使用計(jì)算機(jī)仿真來(lái)進(jìn)行,這樣一來(lái)可以在很大程度上降低設(shè)計(jì)的難度和成本。隨著Verilog 等設(shè)計(jì)語(yǔ)言的出現(xiàn),大大簡(jiǎn)化了包括譯碼電路在內(nèi)的現(xiàn)代通信技術(shù)的設(shè)計(jì)難度,并且隨著 Quartus II 和 ModelSim 等軟件的發(fā)展,采用計(jì)算機(jī)仿真技術(shù)來(lái)進(jìn)行系統(tǒng)設(shè)計(jì),仿真和調(diào)試越來(lái)越普遍。本文通過(guò)使用 Quartus II 和 ModelSim 平臺(tái),采用Verilog語(yǔ)言進(jìn)行隨機(jī)信號(hào)的產(chǎn)生及動(dòng)態(tài)平均信號(hào)的代碼實(shí)現(xiàn)和結(jié)果測(cè)試(即圖1 D/A 轉(zhuǎn)換器的譯碼電路部分)。
本文所設(shè)計(jì)的是用于5 位二進(jìn)制輸入信號(hào)的DAC 芯片開(kāi)關(guān)控制信號(hào)生成電路,它可以將串行輸入的五位數(shù)字碼,以數(shù)值映射的方式譯成不同的溫度計(jì)碼,然后利用隨機(jī)碼生成器所生成的隨機(jī)碼序列借助桶形移位器對(duì)溫度計(jì)碼進(jìn)行動(dòng)態(tài)平均,最終并行輸出動(dòng)態(tài)平均后的開(kāi)關(guān)控制信號(hào),該信號(hào)可用于控制模擬等分壓或等分流電路中電壓源或者電流源的開(kāi)斷,可以達(dá)到良好的動(dòng)態(tài)性能。本文所設(shè)計(jì)的譯碼電路主要由三部分組成,分別為溫度計(jì)碼生成模塊,本地偽隨機(jī)碼發(fā)生器模塊(生成m 序列)和動(dòng)態(tài)平均模塊。總體設(shè)計(jì)思路如圖2 所示。
圖2 DAC 譯碼電路總體設(shè)計(jì)框圖
下面分別介紹每個(gè)模塊的工作原理和輸出信號(hào),在溫度計(jì)碼生成模塊中,串行輸入的5 位數(shù)字碼會(huì)被譯成32 位的溫度計(jì)碼,作為原始的開(kāi)關(guān)選擇信號(hào)。在偽隨機(jī)碼發(fā)生器模塊中,偽隨機(jī)碼發(fā)生器會(huì)根據(jù)給定的本源多項(xiàng)式利用線性反饋移位寄存器生成一個(gè)m 序列,該序列基本符合隨機(jī)數(shù)的要求。在時(shí)鐘信號(hào)的控制下,開(kāi)關(guān)選擇信號(hào)和m 序列分別進(jìn)入不同的寄存器,被鎖存。在規(guī)定的指令下,鎖存器被打開(kāi),開(kāi)關(guān)選擇信號(hào)和m 序列進(jìn)入到動(dòng)態(tài)平均模塊中,這里的動(dòng)態(tài)平均模塊相當(dāng)于一個(gè)桶形移位器(原理圖如圖3 所示),在時(shí)鐘信號(hào)的觸發(fā)下,開(kāi)關(guān)選擇信號(hào)會(huì)根據(jù)m 序列的值進(jìn)行移動(dòng)。m碼為1時(shí)開(kāi)關(guān)控制信號(hào)輸出整體左移一位,為0 時(shí)整體右移一位,循環(huán)時(shí)將上一次輸出值的下一位作為起始位再進(jìn)行循環(huán)移位,最后并行輸出完成權(quán)重平衡之后的開(kāi)關(guān)控制信號(hào),該信號(hào)可輸入到模擬等分壓或等分流電路中控制電壓源或者電流源的開(kāi)斷。因?yàn)閭坞S機(jī)碼產(chǎn)生的低電平和高電平的比例大致相同,所以最終的開(kāi)關(guān)控制信號(hào)在一定的區(qū)間內(nèi)來(lái)回移動(dòng),從而能夠平均使用到每一個(gè)電流源,避免了個(gè)別電流源的閑置或長(zhǎng)期占用。同時(shí),溫度計(jì)碼的使用可以保證當(dāng)數(shù)字輸入碼每增加“1”時(shí),都只會(huì)多打開(kāi)一個(gè)單位電流源,避免了出現(xiàn)大量的電源開(kāi)關(guān)在同一時(shí)刻被開(kāi)啟或者關(guān)斷而引起很大的數(shù)字干擾,有利于使整個(gè)電路達(dá)到良好的動(dòng)態(tài)性能[1]。
圖3 開(kāi)關(guān)控制信號(hào)的循環(huán)圖示
首先來(lái)介紹一下溫度計(jì)碼的組成方法,溫度計(jì)碼類似于一串比特流,它只由“0”和“1”來(lái)構(gòu)成,溫度計(jì)碼的特殊之處在于,在這串比特流中,“1”全部出現(xiàn)在低位,“0”全部出現(xiàn)在高位,而且“0”和“1”都是連續(xù)出現(xiàn)的,不能出現(xiàn)“0”和“1”相間排列的情況,即只能寫(xiě)成00000001、00000111、01111111 或者 11111111 的形式。溫度計(jì)碼的大小只能通過(guò)增加“1”的位數(shù)或者減少“1”的位數(shù)來(lái)改變,就像溫度的變化一樣,故由此得名。
溫度計(jì)碼在本文所設(shè)計(jì)的DAC 譯碼電路中充當(dāng)?shù)氖情_(kāi)關(guān)控制信號(hào)的作用,用于控制DAC 的模擬電路部分中電流源的開(kāi)斷。以常見(jiàn)的二進(jìn)制加權(quán)型電流舵型 DAC 為例,這種DAC 譯碼電路每一位的權(quán)值按照2 的冪遞增,每一位數(shù)字碼所控制的電流的大小按照權(quán)值的依次遞增。例如對(duì)于一個(gè)10 位的二進(jìn)制加權(quán)型電流舵DAC,它的最高位和最低位的電流比值是1024∶1,但是以現(xiàn)在的工藝很難達(dá)到如此高的匹配精度,尤其是在轉(zhuǎn)換的半量程處,即開(kāi)關(guān)控制信號(hào)從011111111111 變化為100000000000 時(shí),大量的電流源同時(shí)開(kāi)斷會(huì)使得輸出的電流出現(xiàn)毛刺,從而影響DAC 的動(dòng)態(tài)性能[1]。溫度計(jì)碼的發(fā)明和設(shè)計(jì)能夠較好地改善二進(jìn)制加權(quán)型電流舵型 DAC 的缺點(diǎn),提高DAC 的分辨率。這樣設(shè)計(jì)出的DAC 譯碼電路不僅可以綜合二進(jìn)制加權(quán)型DAC 結(jié)構(gòu)簡(jiǎn)單、占用版圖面積小的優(yōu)點(diǎn),而且溫度計(jì)碼的結(jié)構(gòu)也提升了動(dòng)態(tài)性能,從而在精度和面積上都得到了優(yōu)化[1]。
圖4 是一個(gè)5 位溫度計(jì)碼型 DAC 的結(jié)構(gòu)簡(jiǎn)圖。圖中每個(gè)電流源所控制的電流值是相同的,每一個(gè)電流源都有一位數(shù)字開(kāi)關(guān)用以控制電流源輸出電流的方向(正相或負(fù)相)。控制這些開(kāi)關(guān)的信號(hào)是由五位二進(jìn)制輸入碼到溫度計(jì)碼譯碼器提供的[1]。
圖4 5 位溫度計(jì)碼型 DAC 的結(jié)構(gòu)簡(jiǎn)圖
本文所介紹的本地偽隨機(jī)碼發(fā)生器模塊的作用是產(chǎn)生m 碼序列,首先介紹一下什么是m 序列,m 序列是最長(zhǎng)線性反饋移位寄存器序列的簡(jiǎn)稱,又叫做偽隨機(jī)碼,是一種可以預(yù)先確定并可以重復(fù)地產(chǎn)生和復(fù)制、又具有隨機(jī)統(tǒng)計(jì)特性的二進(jìn)制碼序列[8]。它容易產(chǎn)生且具有一定的隨機(jī)性,在一定條件下可以作為隨機(jī)碼被使用,是目前廣泛應(yīng)用的一種偽隨機(jī)序列。
圖5 是由5 級(jí)移位寄存器構(gòu)成的偽隨機(jī)碼序列發(fā)生器。寄存器的狀態(tài)取決于時(shí)鐘控制下輸入的信號(hào),例如第2 級(jí)移位寄存器的狀態(tài)取決于第3 級(jí)移位寄存器輸出的信號(hào),B1 是反饋線路,在程序上為異或操作,因此一般形式的表達(dá)式為:
圖5 m 序列的實(shí)現(xiàn)結(jié)構(gòu)
偽隨機(jī)碼的verilog 代碼說(shuō)明:
因?yàn)閞st 為全局異步復(fù)位信號(hào),低電平有效,所以最開(kāi)始將移位寄存器相位復(fù)位成5'b11111,即:
當(dāng)時(shí)鐘的上升沿信號(hào)來(lái)臨時(shí),如圖6 所示,m 序列發(fā)生器中的每一位值進(jìn)行右移操作,最高位的值由初始次高位值和初始最低位值進(jìn)行異或操作后得到,最后將每一次的最低位值賦給輸出變量,進(jìn)行輸出。同時(shí)也可以看出m 序列中高電平和低電平出現(xiàn)的時(shí)刻并沒(méi)有很強(qiáng)的規(guī)律性而且它們所占的比例大致相同,所以基本確定該序列有一定的隨機(jī)性,可以作為偽隨機(jī)碼被使用。
圖6 m 碼序列仿真結(jié)果
本文所設(shè)計(jì)DAC 譯碼電路的動(dòng)態(tài)平均模塊主要利用的是數(shù)據(jù)權(quán)重平均算法(DWA),該算法的基本思想是通過(guò)滾動(dòng)開(kāi)關(guān)信號(hào)的方式來(lái)平均的使用電流源,避免某些電流源被經(jīng)常使用,而某些電流源被經(jīng)常閑置,從而降低由于工藝造成的不匹配性導(dǎo)致單位電流源之間電流值不匹配的影響,以達(dá)到很好的動(dòng)態(tài)性能[1]。
該模塊的具體實(shí)現(xiàn)方法是,基于數(shù)據(jù)權(quán)重平均算法(DWA)的原理,設(shè)計(jì)了一個(gè)方向可調(diào)換的桶行移位器(如圖3 所示),該移位器可以根據(jù)要求改變信號(hào)移動(dòng)的方向和位數(shù),而且在單個(gè)時(shí)鐘周期內(nèi)能使任何位數(shù)的數(shù)據(jù)完成移位或循環(huán)。由于它的移位操作具有圓形特性,故有 “桶形移位器”之名 。在該設(shè)計(jì)模塊中,桶行移位器利用本地偽隨機(jī)碼發(fā)生器模塊所生成的m 碼序列對(duì)溫度計(jì)碼生成模塊輸出的溫度計(jì)碼(即開(kāi)關(guān)控制信號(hào))進(jìn)行滾動(dòng)移位,m 碼為1 時(shí)開(kāi)關(guān)控制信號(hào)輸出整體左移,m 碼為0 時(shí)整體右移,循環(huán)時(shí)將上一次輸出值的下一位作為起始位再進(jìn)行循環(huán)移位。由于偽隨機(jī)碼具有一定的隨機(jī)性,而且通過(guò)仿真結(jié)果(如圖6 所示)可以看到m 碼的高電平和低電平所占的比例大致相同,而且在設(shè)計(jì)時(shí)默認(rèn)每一次都只移動(dòng)一位,所以可以保證開(kāi)關(guān)控制信號(hào)是在一定區(qū)間內(nèi)均勻的滾動(dòng),從而達(dá)到平均使用DAC 模擬電路模塊中電流源的目的。本文所設(shè)計(jì)的桶形移位器的移動(dòng)方式如圖3 所示,該圖以8位控制信號(hào)為例,按照從上到下的順序描述了信號(hào)移動(dòng)的過(guò)程,最前面一列的數(shù)字表示移動(dòng)的位數(shù),最上面的一行數(shù)字表示一共有8 位信號(hào)參與移動(dòng),箭頭表示移動(dòng)的方向。
動(dòng)態(tài)平均模塊輸出的是完成權(quán)重平衡之后的開(kāi)關(guān)控制信號(hào),其仿真結(jié)果如圖7 所示。
圖7 動(dòng)態(tài)平均模塊仿真結(jié)果
由于開(kāi)關(guān)控制信號(hào)移動(dòng)的方向是由動(dòng)態(tài)偽隨機(jī)碼決定的,也就是說(shuō)模擬電路模塊中被打開(kāi)或者被關(guān)閉的電流源或者電壓源的位置也是動(dòng)態(tài)變化的,但由于使用了溫度計(jì)碼,不會(huì)出現(xiàn)大量的開(kāi)關(guān)在同一時(shí)刻做出開(kāi)啟或者關(guān)斷的情況,這樣的設(shè)計(jì)可以保證不僅所有的電源都能夠被動(dòng)態(tài)平均使用,而且整個(gè)DAC 譯碼電路的動(dòng)態(tài)性能也能得到提升。
將用ModelSim 編寫(xiě)的基于DWA 算法的DAC 芯片譯碼電路的設(shè)計(jì)代碼和測(cè)試文件與Quartus II 相關(guān)聯(lián),仿真出譯碼電路從輸入到輸出的時(shí)域波形(如圖8)和總體的硬件電路圖(如圖9 所示)。圖6 為m 序列發(fā)生器產(chǎn)生的偽隨機(jī)碼序列,可以看出序列中高低電平所占的比例大致相同,說(shuō)明該序列具有一定的隨機(jī)性,且由于該序列可以決定開(kāi)關(guān)控制信號(hào)的滾動(dòng)方向,這樣一來(lái)可以保證在一個(gè)穩(wěn)定范圍內(nèi),開(kāi)關(guān)控制信號(hào)將動(dòng)態(tài)平均地使用到每一個(gè)電源。圖8為溫度計(jì)碼生成模塊產(chǎn)生的溫度計(jì)碼的時(shí)域仿真波形,可以看出當(dāng)輸入的五位二進(jìn)制數(shù)值的大小加“1”或減“1”時(shí),輸出的溫度計(jì)碼中“1”的個(gè)數(shù)增加或者減少一位,且“1”的個(gè)數(shù)是從低位到高位連續(xù)增加的,實(shí)現(xiàn)了溫度計(jì)碼的正確輸出。圖9 為動(dòng)態(tài)平均模塊輸出完成權(quán)重平衡之后的開(kāi)關(guān)控制信號(hào),可以看到m 序列的值可以控制溫度計(jì)碼的移位,實(shí)現(xiàn)了基于DWA 算法的DAC 芯片譯碼電路設(shè)計(jì)。本實(shí)驗(yàn)未涉及模擬電路模塊(等分壓或等分流電路)的設(shè)計(jì)。
圖8 溫度計(jì)碼模塊仿真結(jié)果
圖9 系統(tǒng)綜合及實(shí)現(xiàn)結(jié)果圖
使用Quartus II 的RTL Viewer 功能進(jìn)行仿真,可以看到圖9 是仿真搭建的硬件電路圖,圖10 是該電路圖的時(shí)序仿真結(jié)果。
圖10 DAC 譯碼電路總體仿真結(jié)果
本文主要介紹了基于DWA 算法的DAC 芯片譯碼電路的設(shè)計(jì)過(guò)程,首先根據(jù)DAC 譯碼電路的要求構(gòu)建設(shè)計(jì)思路,因?yàn)閭鹘y(tǒng)的二進(jìn)制加權(quán)型譯碼電路具備結(jié)構(gòu)簡(jiǎn)單、占用版圖面積小的優(yōu)點(diǎn),思路清晰且易于實(shí)現(xiàn),所以決定在該電路的設(shè)計(jì)基礎(chǔ)上進(jìn)行缺點(diǎn)的優(yōu)化。然后通過(guò)分析和對(duì)比,為了解決加權(quán)型譯碼電路由于技術(shù)限制所導(dǎo)致的工藝不匹配的問(wèn)題,決定采用溫度計(jì)碼的方式設(shè)計(jì)譯碼電路,由于溫度計(jì)碼在編碼結(jié)構(gòu)上的獨(dú)特性,這里用其作為開(kāi)關(guān)控制信號(hào),可以很好的解決在控制信號(hào)變化前后由于大量的電源頻繁開(kāi)斷可能導(dǎo)致輸出信號(hào)出現(xiàn)毛刺的問(wèn)題。最后基于DWA 算法的原理,以桶形移位器為基礎(chǔ)設(shè)計(jì)了動(dòng)態(tài)平均模塊,實(shí)現(xiàn)了將以溫度計(jì)碼形式輸出的開(kāi)關(guān)控制信號(hào)在偽隨機(jī)碼的控制下在一定范圍內(nèi)循環(huán)滾動(dòng),達(dá)到了平均使用電流源的目的,同時(shí)也提升了DAC 的動(dòng)態(tài)性能。
本電路在設(shè)計(jì)思路的基礎(chǔ)上編寫(xiě)了Verilog 代碼,利用ModelSim 和Quartus II 的平臺(tái)進(jìn)行了仿真。通過(guò)將仿真結(jié)果與設(shè)計(jì)思路進(jìn)行對(duì)比以及對(duì)生成的模塊進(jìn)行功能測(cè)試,邏輯功能基本得到了實(shí)現(xiàn),實(shí)驗(yàn)結(jié)果與預(yù)期值相符合,證明了仿真成功。