基于FPGA的∑-Δ D/A轉(zhuǎn)換器的設(shè)計(jì)與實(shí)現(xiàn)
關(guān)鍵詞:∑-Δ DAC,F(xiàn)PGA,VerilogHDL,可綜合性
引言
在各類(lèi)電子系統(tǒng)中,數(shù)字電路所占比重越來(lái)越大。這主要是因?yàn)閿?shù)字電路相對(duì)于 電路有一些突出的優(yōu)點(diǎn),例如:1 數(shù)字電路中的有源器件工作在飽和區(qū) 與截止區(qū),工作狀態(tài)穩(wěn)定;2 數(shù)字電路處理的是二值信號(hào),易于存儲(chǔ)和再生;3 數(shù)字電路是由大量相同的基本單元,如門(mén)、觸發(fā)器等所組成,易于大規(guī)模集成,易于自動(dòng)化設(shè)計(jì)工具的應(yīng)用等。再加上數(shù)字計(jì)算機(jī)和數(shù)字信號(hào)處理技術(shù)的迅速發(fā)展,使得數(shù)字電路從集成規(guī)模、應(yīng)用范圍及設(shè)計(jì)自動(dòng)化程度等方面都大大超過(guò)了模擬電路,越來(lái)越多的由模擬電路實(shí)現(xiàn)的功能轉(zhuǎn)由數(shù)字電路實(shí)現(xiàn),進(jìn)入了電子系統(tǒng)設(shè)計(jì)的數(shù)字化時(shí)代。
1 變∑-Δ換的原理
∑-Δ變換采用過(guò)取樣技術(shù),將信號(hào)按時(shí)間分割,保持幅度恒定,具有高取樣率、噪聲整形和比特字長(zhǎng)短的特點(diǎn)。變換可以在低取樣率、高分辨率的量化器或者高取樣率、低分辨率的量化器中進(jìn)行,在數(shù)字音頻中很有用,如用于音頻信號(hào)數(shù)字化的∑-Δ ADC及可將已經(jīng)數(shù)字化處理后的音頻信號(hào)還原為模擬聲音信號(hào)的∑-Δ DAC?!?Δ變換有時(shí)根據(jù)采用的具體結(jié)構(gòu)稱(chēng)為1比特或多比特變換,本文所描述的∑-Δ DAC采用了1比特變換技術(shù),克服了采用較多比特?cái)?shù)時(shí)所帶來(lái)的量化非線性誤差、糾錯(cuò)困難的缺點(diǎn)。
打個(gè)比方來(lái)說(shuō)明如何用1比特替代16或更多比特:傳統(tǒng)的階梯變換器像16個(gè)電燈泡,連接到各自的開(kāi)關(guān)上,每個(gè)都有不同的亮度,用各種組合方式可以得到216(即65536)種不同的亮度。然而,燈泡間的亮度差會(huì)引入誤差,某種組合也并不總是能夠產(chǎn)生所要求的亮度。1比特變換技術(shù)采用完全不同的方法,不用那么多燈泡和開(kāi)關(guān),只用一個(gè)燈泡和一個(gè)開(kāi)關(guān)。房間亮度的變化可以通過(guò)簡(jiǎn)單的改變開(kāi)、關(guān)燈泡的次數(shù)來(lái)得到。如果燈泡開(kāi)的次數(shù)增加,房間的亮度就會(huì)增加。
∑-Δ變換是將信號(hào)按時(shí)間分割,保持信號(hào)幅度恒定。它用高電平或低電平的脈沖表示信號(hào),例如可以采用脈沖密度調(diào)制(PDM),如圖1所示恒定幅度的脈沖信號(hào),不論電平高或低都能夠重建輸出信號(hào)波形。
2 ∑-Δ DAC的結(jié)構(gòu)
傳統(tǒng)的應(yīng)用電流模技術(shù)的DAC當(dāng)位數(shù)達(dá)到10位以上時(shí),要在某一溫度范圍保持精度非常困難。本文的∑-Δ DAC運(yùn)用了數(shù)字技術(shù),因此與電流模DAC相比,不受溫度變化的影響,且能在可編程邏輯器件如FPGA中實(shí)現(xiàn)。∑-Δ DAC實(shí)際上是高速1位DAC,應(yīng)用數(shù)字反饋技術(shù)從輸入二進(jìn)制數(shù)字量產(chǎn)生等幅的脈沖串,脈沖串的平均占空比與輸入二進(jìn)制數(shù)字量成正比,脈沖串再通過(guò)一RC模擬低通濾波器就能重建模擬波形?!?Δ DAC非常適合于低頻、高精度的應(yīng)用,尤其在數(shù)字音頻領(lǐng)域應(yīng)用廣泛。
作為例子,本文中所描述的∑-Δ DAC的二進(jìn)制8位輸入數(shù)字量是無(wú)符號(hào)數(shù),模擬輸出電壓值都是正值。輸入“00000000”產(chǎn)生輸出電壓0V,“11111111”產(chǎn)生輸出電壓的最大值Vmax,Vmax非常接近VCCO,其中VCCO是FPGA芯片I/O端口的供電電壓。
圖1 脈沖密度調(diào)制
圖2 ∑-Δ DAC的內(nèi)部結(jié)構(gòu)圖
術(shù)語(yǔ)“∑-Δ”分別代表算術(shù)和與差,都可用二進(jìn)制加法器來(lái)產(chǎn)生。雖然Δ加法器的輸入是無(wú)符號(hào)數(shù),但Δ和∑兩加法器的輸出被看作有符號(hào)數(shù)。Δ加法器用來(lái)計(jì)算DAC輸入與當(dāng)前DAC輸出之間的差值。由于DAC的輸出只有一位,非0即1,即全0或全1。如圖2 ∑-Δ DAC的結(jié)構(gòu)圖所示,Δ加法器的另一個(gè)輸入值由∑鎖存器最高位L[9]的兩個(gè)拷貝后面跟8個(gè)0產(chǎn)生,這也彌補(bǔ)了DAC輸入值是無(wú)符號(hào)數(shù)的問(wèn)題?!萍臃ㄆ鲗⑺纳弦淮屋敵觯ㄒ呀?jīng)保存在∑鎖存器)與Δ加法器的當(dāng)前輸出求和。
3 ∑-Δ DAC的FPGA實(shí)現(xiàn)
如圖2所示,∑-Δ DAC的內(nèi)部?jī)H由2個(gè)10位的二進(jìn)制加法器,1個(gè)10位的鎖存器和一個(gè)D觸發(fā)器組成,用FPGA實(shí)現(xiàn)時(shí)只需耗費(fèi)極少的邏輯資源,即使用最小的FPGA也能實(shí)現(xiàn),本文采用了Xilinx Virtex FPGA,圖3給出了FPGA實(shí)現(xiàn)的頂層原理圖。輸入信號(hào)有8位寬的二進(jìn)制數(shù)字量DACin[7:0]、時(shí)鐘信號(hào)CLK和復(fù)位信號(hào)Reset;輸出信號(hào)為等幅脈沖串DACout,通過(guò)一個(gè)驅(qū)動(dòng)緩沖器OBUF_F_24(是Xilinx FPGA特有的SelectI/O資源,OBUF表示輸出緩沖器,F(xiàn)表示它的轉(zhuǎn)換速率快,24表示它的驅(qū)動(dòng)能力即輸出驅(qū)動(dòng)電流是24MA,基于LVTTL I/O標(biāo)準(zhǔn))驅(qū)動(dòng)FPGA外部的模擬RC低通濾波器,該緩沖器的輸出端連接到FPGA的I/O端口,則它的驅(qū)動(dòng)電壓即為FPGA的I/O端口的供電電壓VCCO。表1列出了∑-Δ DAC的接口信號(hào)。
圖3 FPGA實(shí)現(xiàn)∑-Δ DAC的頂層原理圖
表1 ∑-Δ DAC的接口信號(hào)
圖3虛線框內(nèi)的電路都在FPGA里面實(shí)現(xiàn),其中的DAC模塊的原理圖見(jiàn)圖2,在本文中是用可以綜合的VerilogHDL語(yǔ)句來(lái)描述的。VerilogHDL描述的可綜合性是指其可被綜合工具所識(shí)別,將其寄存器傳輸級(jí)(RTL)描述綜合成門(mén)級(jí)網(wǎng)表,最終能通過(guò)FPGA的布局布線工具映射到FPGA當(dāng)中成為能完成指定功能的硬件電路。VerilogHDL語(yǔ)言最初是面向建模和仿真的,只有10%可以被綜合稱(chēng)為可綜合子集。對(duì)于不同的綜合工具,可綜合子集的內(nèi)容并不相同。IEEE的一個(gè)工作組目前正在撰寫(xiě)一個(gè)名為IEEE Std 1364.1RTL的綜合子集的規(guī)范,定義了一個(gè)最小的可綜合的Verilog語(yǔ)言要素的子集,以便得到各綜合工具提供商的支持。
圖3中緩沖器的輸出端DACoutDrvr連接到FPGA的輸出引腳上,驅(qū)動(dòng)外部的模擬RC低通濾波器。圖中R=3.3kΩ,C=0.0047μF,VOUT即為最終轉(zhuǎn)換所得的模擬信號(hào)。下面給出了DAC模塊的可綜合的VerilogHDL描述:
‘timescale 100 ps / 10 ps
//This is a Delta-Sigma Digital to Analog Converter
module dac(DACout, DACin, Clk, Reset);
output DACout; // This is the average output that feeds low pass filter
reg DACout;
input [7:0] DACin; // DAC input
input Clk;
input Reset;
reg [9:0] DeltaAdder; // Output of Delta adder
reg [9:0] SigmaAdder; // Output of Sigma adder
reg [9:0] SigmaLatch; // Latches output of Sigma adder
reg [9:0] DeltaB; // B input of Delta adder
always @(SigmaLatch) DeltaB = {SigmaLatch[9],SigmaLatch[9]} << (8);
always @(DACin or DeltaB) DeltaAdder = DACin + DeltaB;
always @(DeltaAdder or SigmaLatch) SigmaAdder = DeltaAdder + SigmaLatch;
always @(posedge Clk or posedge Reset)
begin
if(Reset)
begin
SigmaLatch <= #1 1’bl << (8);
DACout <= #1 1’b0;
end
else
begin
SigmaLatch <= #1 SigmaAdder;
DACout <= #1 SigmaLatch[9];
end
end
endmodule該程序經(jīng)過(guò)Xilinx的FPGA集成開(kāi)發(fā)工具ISE6.2編譯(含綜合過(guò)程)、仿真后,再選擇Virtex系列FPGA芯片進(jìn)行配置。設(shè)置CLK=100MHz(最高可達(dá)219MHz)。
4 結(jié)論
∑-Δ DAC是高速FPGA芯片用于數(shù)字模擬混合信號(hào)系統(tǒng)設(shè)計(jì)的嘗試,可應(yīng)用于可編程電壓源、波形發(fā)生器、聲音發(fā)生器、RGB顏色發(fā)生器和ADC的參考電壓發(fā)生器等,極大的減少了系統(tǒng)的元件數(shù)目,降低了系統(tǒng)的成本,有很好的實(shí)用價(jià)值。