【正文】
第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 圖 DDS波形發(fā)生器的仿真波形 。 dout=Rom(conv— integer(address))。 end process。 else phase— shift=counter+p。039。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 process begin wait until clk′event and clk=′1′。 end if。 if rst=′1′then counter=( others=′0′)。 signal address :std— logic— vector(7 downto 0)。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 signal counter :std— logic— vector(7 downto 0)。 architecture arc ofdds is typeRom256x8 isarray(0to255) ofstd— logic— vector(7 downto 0)。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 dout:outstd— logic— vector(7 downto 0) )。 k:instd— logic— vector(7 downto 0)。 entity dds is port(rst:instd— logic。 use — logic— 。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) ( 1 )參數(shù)選取 這里選擇 N = 8 , D = 8 , f c = 4 M H z ,則 A .所需存儲器大小為: 256 8 b i t B .頻率步進(jìn) K H zffNc??? ,此時 K = 1 C .當(dāng)每周期采樣 8 點(diǎn)時, 3282??NK , K H zKffNco5002?? D .相位步進(jìn)為: 256/2 ? 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 2 按照上面的參數(shù)進(jìn)行設(shè)計(jì), VHDL library ieee。因此,為了取出主頻 f0,必須在 D/A轉(zhuǎn)換器的輸出端接入截止頻率為 fc/2 在上面幾部分電路中,累加器、控制相位的加法器和ROM存儲器可以在 FPGA內(nèi)部實(shí)現(xiàn),而 D/A轉(zhuǎn)換器和低通濾波器包含模擬電路,不能在 FPGA內(nèi)部實(shí)現(xiàn)。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 6 對 D/A輸出的階梯波 S(t)進(jìn)行頻譜分析可知, S(t)中除主頻 f0外,還存在分布在 fc, 2fc, … 兩邊 177。轉(zhuǎn)換之后輸出波形變成了包絡(luò)為正弦波的階梯波S(t)。若 ROM的數(shù)據(jù)位寬為 D,則 2N個樣點(diǎn)的幅值以 D位二進(jìn)制數(shù)值存在 ROM中,按照地址的不同可以輸出相應(yīng)相位的正弦信號的幅值。 ~ 360176。如果相位調(diào)節(jié)器的字長為 N,則當(dāng)相位控制字由 0變?yōu)?P時,輸出信號的相位增加 2πP/2N 4 用相位調(diào)節(jié)器輸出的數(shù)據(jù)作為波形存儲器的取樣地址,進(jìn)行波形數(shù)據(jù)的尋址,即可確定輸出波形的取樣幅度。因此每來一個時鐘,相位累加器的輸出就增加一個步長的相位增量,當(dāng)相位累加到滿量程時便產(chǎn)生一次溢出,完成 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 3) 相位調(diào)節(jié)器將相位累加器的輸出數(shù)據(jù)和相位控制字 P相加,實(shí)現(xiàn)信號的相位調(diào)節(jié)。每來一個時鐘作用沿,加法器將頻率控制字 K與寄存器輸出的數(shù)據(jù)相加,再把相加的結(jié)果送至寄存器輸入端。要改變 DDS的輸出頻率,只要改變頻率控制字 K即可。輸出信號的頻率與時鐘頻率之間的關(guān)系為 c0 NfKf=2 其中 ,f0為輸出信號的頻率, fc為時鐘頻率, N為相位累加器的位數(shù)。下面我們以正弦波為例介紹 DDS的波形產(chǎn)生原理。 ROM輸出 D位的幅度碼 S(n),經(jīng) D/A轉(zhuǎn)換后變成模擬信號 S(t),再經(jīng)過低通濾波器平滑后就可以得到合成的信號波形。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 圖 DDS的原理框圖 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 圖中, K為頻率控制字, P為相位控制字,相位累加器的字長為 N位, ROM及 D/A轉(zhuǎn)換器的位寬為 D位。一個數(shù)字頻率合成器由相位累加器、加法器、波形存儲ROM、 D/A轉(zhuǎn)換器和低通濾波器( LPF)構(gòu)成。該函數(shù)屬于 std— logic— arith庫,所以在最前面庫的包含里必須有 use — logic— arith,否則仿真工具或綜合工具都會提示出錯。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 在上面的硬件語言描述中使用了一個函數(shù) conv— std—logic— vector( a,b),其作用是將 interger類型的數(shù)據(jù)轉(zhuǎn)換成 std— logic— vector類型的數(shù)據(jù)。 en d pro ces s 。 when others =qout=conv — s td — logic — vec tor (q — sin,8)。 when ″ 01 ″ = qo ut =q — tri an gle 。 s el 的值選擇 4 種波形中的一個輸出到 D/A p roc ess be gin wait until clk ′ event and clk = ′ 1 ′ 。 end cas e 。 wh en 63=q — sin =11 5。 when 61=q — sin=90。 when 59=q — sin =6 7 。 wh en 57=q — sin =46 。 when 55=q — sin=28。 w he n 53= q — s i n = 14。 w he n 51= q — s i n = 5。 when 49=q — sin=0。 when 47 =q — sin=0。 wh en 45=q — sin =5。 when 43=q — sin=15。 when 41=q — sin =2 9 。 wh en 39=q — sin =46 。 when 37=q — sin=67。 whe n 35=q — sin = 91。 wh en 33=q — sin =11 5。 when 31=q — sin=140。 whe n 29=q — sin = 165 。 wh en 27=q — sin =18 8。 when 25=q — sin=209。 whe n 23=q — sin = 22 7。 wh en 21=q — sin =24 0。 when 19=q — sin= whe n 17=q — sin = 255 。 wh en 15=q — sin =25 5。 when 13=q — sin=when 11=q—sin=240。 when 9=q— sin=226。when 7=q— sin=209。when 5=q—sin=188。 when 3=q— sin=165。when 1=q— sin=140。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 sin 將一個周期的正弦波(共 64點(diǎn))的幅度值直接送給信號 q— sin process begin wait until clk′event and clk=′1′。 end if。 ifcounter=conv— std— logic— vector(127,8)then q— square=X″FF″。 end process。 else q— triangle=q— triangle1。 process begin wait until clk′event and clk=′1′。 end process。 begin process begin 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 wait until clk′event and clk=′1′。 signalq— sin:integerrange0to255。 signalq— triangle:std— logic— vector(7 downto 0)。 end waveform。 sel:instd— logic— vector(1 downto 0)。 use — logic— 。 use — logic— 。 四種波形數(shù)據(jù)產(chǎn)生以后,由 sel[ 1..0]選擇輸出哪種波形數(shù)據(jù)。數(shù)據(jù)線采用 8位寬度,因此每種波形幅度的最大值不超過 255。 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 圖 函數(shù)信號發(fā)生器的電路框圖 第 11章 VHDL數(shù)字系統(tǒng)設(shè)計(jì)實(shí)例 各種波形示意圖如圖 。本節(jié)描述的函數(shù)信號發(fā)生器可產(chǎn)生 4種波形,分別是:鋸齒波、三角波、方波和正弦波,通過選擇器選擇以后送給 D/A轉(zhuǎn)換器產(chǎn)生相應(yīng)的信號波形輸出,具體如圖 。 end behav。 QL=couL。 end if。 process(couL,couH) begin if(couL=0 andcouH=0)then