【正文】
在設(shè)計的過程中,也遇到了很多問題,在同學和指導老師的幫助下,都一一得到了解決。 wen4: sin port map(clr=resel,clk= sin, q= d2)。 17 signal ladder :std_logic。 end ponent ladder。 ponent delta is port(clk,reset:in std_logic。 end li。 end one。 q:out std_logic_vector(7 downto 0))。 q=tmp。 then tmp:=00000000。 use 。 when 63=d=255。 when 55=d=217。 when 47=d=124。 when 39=d=34。 when 31=d=0。 when 23=d=43。 when 15=d=137。 when 07=d=225。 end if。 begin if clr=39。 其仿真波形如圖 5所示: 圖 5 三角波仿真圖 其生成元器件如圖 6所示: 12 圖 6 三角波元器件生成圖 該模塊產(chǎn)生以 64個時鐘為一個周期的正弦波。 else tmp:=tmp39。 a:=39。039。 use 。 then q=255。 end if。 then a=39。 entity square is port(clk,clr:in std_logic。039。139。 full=39。 begin p_reg: process(clk) variable t8:std_logic_vector(3 downto 0)??梢杂?3個按鍵來控制波形選擇 8 4 代碼及仿真結(jié)果 的實現(xiàn) 其 VHDL 代碼如下 : library ieee。假如分頻系數(shù)為 N,波形存儲模塊存儲一 個周期的波形,實驗里按照一個周期波形采樣 64個點存儲在波形存儲模塊里。 3) 通過這一部分的學習,對 VHDL語言的設(shè)計方法進行進一步的學習,對其相關(guān)語言設(shè)計規(guī)范進行更深層次的掌握,能夠更加熟練的做一些編程設(shè)計。它能夠產(chǎn)生多種波形,如三角波、矩形波(含方波)、正弦波等,在電路實驗和設(shè)備檢測中具有十分廣泛的用途。按信號波形可分為正弦信號、函數(shù)(波形)信號、脈沖信號和隨機信號發(fā)生器等四大類。這次設(shè)計主要是練習了分頻電路的設(shè)計, ROM的設(shè)計,計數(shù)器的設(shè)計、選擇電路的設(shè)計和數(shù)碼顯示的設(shè)計。 它 能夠產(chǎn)生多種波形,如三角波、鋸齒波、矩形波(含方波)、正弦波 等, 在電路實驗和設(shè)備檢測中具有十分廣泛的用途。 3 1 設(shè)計意義 本次課設(shè)要求設(shè)計一個函數(shù)信號發(fā)生器。對我以后的電路設(shè)計生涯都是有所幫助的! 函數(shù)信號發(fā)生器是應(yīng)用了 VHDL語言,通過數(shù)模轉(zhuǎn)換來顯示波形,實現(xiàn)了數(shù)模轉(zhuǎn)換的應(yīng)用。凡是產(chǎn)生測試信號的儀器,統(tǒng)稱為信號源,也稱為信號發(fā)生器,它用于產(chǎn)生被測電路所需特定參數(shù)的電測試信號。 4 2 設(shè)計說明 要求 : 基于《 VHDL語言》,通過給定的儀器( EDA6000試驗箱 ) 設(shè)計一個多 功能信號發(fā)生器, ( 1) 能產(chǎn)生周期性正弦波、方波、三角波、鋸齒波以及用戶自己編輯的特定波形; ( 2) 輸出信號的頻率范圍為 100Hz~200KHz,且輸出頻率可以調(diào)節(jié); ( 3) 具有顯示輸出波形、頻率的功能。通過按鍵 1 到按鍵 8 控制頻率調(diào)節(jié) f〔 7...0〕 ,用按鍵 按鍵 按鍵 8 控制 dlt、 sin、 sqr波形選通 ,最后把八位輸出接 DAC0832通過 D/A轉(zhuǎn)換 ,從示波器上就能看到波形輸出。 方波可以通過交替輸出全 0和全 1,并給以 32個周期的延時來實現(xiàn)。 d_out:out std_logic)。 full=39。 p_div:process(full) variable t2:std_logic。139。 頻率為 1MHz 的分頻波形圖: 9 其生成元器件如圖 2所示: 圖 2 數(shù)控分頻器器件生成圖 產(chǎn)生方波,是通過交替送出全 0和全 1實現(xiàn),每 32 個時鐘翻轉(zhuǎn)一次。 begin process(clk,clr) variable t:integer range 0 to 31。 then if t31 then t:=t+1。139。 end one。 architecture delta_arc of delta is begin 11 process(clk,reset) variable tmp:std_logic_vector(7 downto 0)。 then if a=39。 else if tmp=00000001 then tmp:=00000000。 q=tmp。 d:out integer range 0 to 255)。139。 when 04=d=245。 when 12=d=174。 when 20=d=