VHDL语言设计信号发生器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四用VHDL设计多功能信号发生器
一、设计任务
基于《VHDL语言》,通过给定的仪器(EDA6000试验箱)设计一个多功能信号发生器,要求:
(1)能产生周期性正弦波、方波、三角波、锯齿波以及用户自己编辑的特定波形(选作);
(2)输出信号的频率范围为100Hz~200KHz,且输出频率可以调节;
(3)具有显示输出波形、频率的功能。

(选作)
二、系统顶层框图
弦波的数字幅度信息,每个查找表的地址对应正(余)弦波幅度信号,同时输出到数模转换器(DAC)输入端,DAC输出的模拟信号经过低通滤波器(LPF),可以得到一个频谱纯净的正(余)弦波。

二、设计步骤
用VHDL语言结合原理图设计实现一个函数信号发生器,输出正弦波、方波和三角波三种波形。

将频率控制、分频、三角波、正弦波、方波发生邓各个模块分别用VHDL语言编程为一个子程序,并把每一个模块转换成图形文件,然后在原理图编辑框调用这些图形模块,连接电路如上图系统顶层框图所示。

通过按键1到按键8控制频率调节f〔7...0〕,用按键6、按
键7、按键8控制dlt 、sin 、sqr 波形选通,最后把八位输出接DAC0832通过D/A 转换,从示波器上就能看到波形输出。

按下不同的按键输出不同的波形及频率。

三、系统设计
(1)数控分频器模块
在时钟的作用下,通过预置分频数DIN ,来改变输出频率。

假如分频系数为N ,波形存储模块存储一个周期的波形,实验里按照一个周期波形采样64个点存储在波形存储模块里。

则输出频率N f f clk
out .64=
(2).数据存储模块 (存储波形数据)
数据存储模块主要存的是正弦波、三角波、锯齿波等一个周期的采样点。

三角波模块可设计一个可逆计数器实现,设计时设置一变量作为工作状态标志,在此变量为0时,当检测到时钟的上升沿进行加同一个数操作;为1时,进行减同一个数操作。

DA 转换采用的DA0832,输入有8个数据端,范围是0到255;而且设置64个时钟周期为一个三角波周期,所有每次加、减为8.
锯齿波的存储数据与三角波类似。

方波可以通过交替输出全0和全1,并给以32个周期的延时来实现。

正弦波:要通过波形变换实现把a sin 变换成5.127*)1(cos +a 的形式进行采样,然后变换成8位二进制码,存储在波形存储器里。

(3)数据选择器模块
在波形开关的控制下,选择相应的波形输出。

可以用3个按键来控制波形选择(4).LED 显示模块 (选作)
LED 显示模块主要是完成频率控制字的显示,由于本次实验采用八位的由键盘输入的频率控制字,累计寻址,读取8位地址长度256点的一个周期波形的数字幅度信息,所以频率控制字控制着频率的大小,而恰好此时的频率控制字就是系统输出波形的频率,所以,LED 显示的也是波形的频率。

此模块主要的功能是将外部键盘的8位二进制数转换成三位BCD 码。

四、实验内容
设计程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Vhdl1 is
port(clk,sel :in std_logic;
pout: out integer range 255 downto 0);
end;
architecture dacc of Vhdl1 is
signal q: integer range 63 downto 0;
signal q1: integer range 2 downto 0;
signal d: integer range 255 downto 0;
begin
process(clk)
begin
if clk'event and clk='1' then
if q<63 then q<=q+1;
else q<=0;
end if;
end if;
end process;
process(sel)
begin
if sel'event and sel='1' then
if q1<3 then q1<=q1+1;
else q1<=0;
end if;
end if;
end process;
process(q,q1)
begin
case q1 is
when 0=> 正弦波
case q is
when 00=>d<=255; when 01=>d<=254; when 02=>d<=252; when 03=>d<=249; when 04=>d<=245; when 05=>d<=239; when 06=>d<=233; when 07=>d<=225; when 08=>d<=217; when 09=>d<=207; when 10=>d<=197; when 11=>d<=186; when 12=>d<=174; when 13=>d<=162; when 14=>d<=150; when 15=>d<=137; when 16=>d<=124; when 17=>d<=112; when 18=>d<=99; when 19=>d<=87; when 20=>d<=75; when 21=>d<=64; when 22=>d<=53; when 23=>d<=43; when 24=>d<=34; when 25=>d<=26; when 26=>d<=19; when 27=>d<=13; when 28=>d<=8; when 29=>d<=4; when 30=>d<=1; when 31=>d<=0;
when 63=>d<=255; when 62=>d<=254; when 61=>d<=252; when 60=>d<=249; when 59=>d<=245; when 58=>d<=239; when 57=>d<=233; when 56=>d<=225; when 55=>d<=217; when 54=>d<=207; when 53=>d<=197; when 52=>d<=186; when 51=>d<=174; when 50=>d<=162; when 49=>d<=150; when 48=>d<=137; when 47=>d<=124; when 46=>d<=112; when 45=>d<=99; when 44=>d<=87; when 43=>d<=75; when 42=>d<=64; when 41=>d<=53; when 40=>d<=43; when 39=>d<=34; when 38=>d<=26; when 37=>d<=19; when 36=>d<=13;
when 35=>d<=8; when 34=>d<=4; when 33=>d<=1; when 32=>d<=0;
when others=>null;
end case;
when 1=> 方波
case q is
when 00=>d<=255; when 01=>d<=255; when 02=>d<=255; when 03=>d<=255; when 04=>d<=255; when 05=>d<=255; when 06=>d<=255; when 07=>d<=225; when 08=>d<=255; when 09=>d<=255; when 10=>d<=255; when 11=>d<=255; when 12=>d<=255; when 13=>d<=255; when 14=>d<=255; when 15=>d<=255; when 16=>d<=255; when 17=>d<=255; when 18=>d<=255; when 19=>d<=255; when 20=>d<=255; when 21=>d<=255; when 22=>d<=255; when 23=>d<=255; when 24=>d<=255; when 25=>d<=255; when 26=>d<=255; when 27=>d<=255; when 28=>d<=255; when 29=>d<=255; when 30=>d<=255; when 31=>d<=255;
when 63=>d<=0; when 62=>d<=0; when 61=>d<=0; when 60=>d<=0;
when 59=>d<=0; when 58=>d<=0; when 57=>d<=0; when 56=>d<=0;
when 55=>d<=0; when 54=>d<=0; when 53=>d<=0; when 52=>d<=0;
when 51=>d<=0; when 50=>d<=0; when 49=>d<=0; when 48=>d<=0;
when 47=>d<=0; when 46=>d<=0; when 45=>d<=0; when 44=>d<=0;
when 43=>d<=0; when 42=>d<=0; when 41=>d<=0; when 40=>d<=0;
when 39=>d<=0; when 38=>d<=0; when 37=>d<=0; when 36=>d<=0;
when 35=>d<=0; when 34=>d<=0; when 33=>d<=0; when 32=>d<=0;
when others=>null;
end case;
when 2=> 三角波
case q is
when 00=>d<=0; when 01=>d<=1; when 02=>d<=2; when 03=>d<=3;
when 04=>d<=4; when 05=>d<=5; when 06=>d<=6; when 07=>d<=7;
when 08=>d<=8; when 09=>d<=9; when 10=>d<=10; when 11=>d<=11;
when 12=>d<=12; when 13=>d<=13; when 14=>d<=14; when 15=>d<=15;
when 16=>d<=16; when 17=>d<=17; when 18=>d<=18; when 19=>d<=19;
when 20=>d<=20; when 21=>d<=21; when 22=>d<=22; when 23=>d<=23; when 24=>d<=24; when 25=>d<=25; when 26=>d<=26; when 27=>d<=27;
when 28=>d<=28; when 29=>d<=29; when 30=>d<=30; when 31=>d<=31;
when 62=>d<=0; when 61=>d<=1; when 60=>d<=2;
when 59=>d<=3; when 58=>d<=4; when 57=>d<=5; when 56=>d<=6;
when 55=>d<=7; when 54=>d<=8; when 53=>d<=9; when 52=>d<=10;
when 51=>d<=11; when 50=>d<=12; when 49=>d<=13; when 48=>d<=14; when 47=>d<=15; when 46=>d<=16; when 45=>d<=17; when 44=>d<=18; when 43=>d<=19; when 42=>d<=20; when 41=>d<=21; when 40=>d<=22; when 39=>d<=23; when 38=>d<=24; when 37=>d<=25; when 36=>d<=26; when 35=>d<=27; when 34=>d<=28; when 33=>d<=29; when 32=>d<=30; when others=>null;
end case;
when 2=> 锯齿波
case q is
when 00=>d<=0; when 01=>d<=3; when 02=>d<=6; when 03=>d<=9;
when 04=>d<=12; when 05=>d<=15; when 06=>d<=18; when 07=>d<=21; when 08=>d<=24; when 09=>d<=27; when 10=>d<=30; when 11=>d<=33; when 12=>d<=36; when 13=>d<=39; when 14=>d<=42; when 15=>d<=45; when 16=>d<=44; when 17=>d<=43; when 18=>d<=42; when 19=>d<=41; when 20=>d<=40; when 21=>d<=39; when 22=>d<=38; when 23=>d<=37; when 24=>d<=36; when 25=>d<=35; when 26=>d<=34; when 27=>d<=33; when 28=>d<=32; when 29=>d<=31; when 30=>d<=30; when 31=>d<=29;
when 62=>d<=28; when 61=>d<=27; when 60=>d<=26;
when 59=>d<=25; when 58=>d<=24; when 57=>d<=23; when 56=>d<=22; when 55=>d<=21; when 54=>d<=20; when 53=>d<=19; when 52=>d<=18; when 51=>d<=17; when 50=>d<=16; when 49=>d<=15; when 48=>d<=14; when 47=>d<=13; when 46=>d<=12; when 45=>d<=11; when 44=>d<=10; when 43=>d<=9; when 42=>d<=8; when 41=>d<=7; when 40=>d<=6; when 39=>d<=5; when 38=>d<=4; when 37=>d<=3; when 36=>d<=2;
when 35=>d<=1; when 34=>d<=0; when 33=>d<=0; when 32=>d<=0; when others=>null;
end case;
end case;
end process;
pout<=d;
end;
五、实验结果
当a=0时,显示正弦波当a=0时,显示方波
当a=0时,显示三角波当a=0时,显示锯齿波
六、参考资料
《EDA技术实用教程》科学出版社。

相关文档
最新文档