乐山职业技术学院毕业设计
3.3.1 系统的整体原理框图:
递增斜波模块 时钟 clk 递减斜波模块 三角波模块 复位 reset 波形选择模块 D/A转换器 阶梯波模块 正弦波模块 方波模块 波形选择开关
系统时钟输入后,通过复位开关选择是否产生波形,当各个模块产生相应的信号波形后,通过波形选择模块波形选择开关选泽输出不同的波形,再通过D/A转换器转换,就可以把数字信号(由FPGA输出)变成了相应模拟的信号波形。整个系统设计的核心就是FPGA部分。
7
乐山职业技术学院毕业设计
第4章 各模块程序设计及仿真
根据自上而下的思路进行项目设计。明确每个模块的功能以后,开始编写各个模块的程序。
4.1递增斜波模块
递增斜波icrs的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。
图1 递增斜波模块仿真图
程序设计的当复位信号为0时,输出为0,无对应的波形产生。当复位信号为1时,每当检测到时钟上升沿时,计数器值加1,当增加到最大后清零。计数值增加呈现线性关系,因此输出的波形是递增的斜波。从仿真波形图也能看出这种变化规律。VHDL描述为: IF reset='0' THEN
tmp:= \复位信号清零 ELSIF clk'EVENT AND clk='1' THEN IF tmp=\
tmp:=\递增到最大值清零 ELSE
tmp:=tmp+1;--递增运算
4.2递减斜波模块
递减斜波dcrs的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。
图2 递减斜波模块仿真图
程序设计的是复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当
8
乐山职业技术学院毕业设计
每当检测到时钟上升沿时,计数值减1,当减到0后赋值到最大。计数值减少呈现线性关系,因此输出的波形是递减的斜波。从仿真波形图也能看出这种变化规律。VHDL描述为: IF reset='0' THEN
tmp:=\复位信号置最大值
ELSIF clk'EVENT AND clk='1' THEN--检测时钟上升沿 IF tmp=\
tmp:=\递减到0置最大值 ELSE
tmp:=tmp-1;--递减运算
4.3 三角波模块
三角波delat的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。三角波波形是对称的,每边呈线形变化,所以可以根据数据做简单运算,就可以得到三角波。
图3 三角波模块仿真图
程序设计的是reset复位信号为0时输出为0,无对应的波形产生。当复位信号为1时,当每当检测到时钟上升沿时,当计数的数据不是最大值时,数值做递增运算,当增大到最大时,然后再做递减运算,因此输出的波形便呈现出三角波的形状。从仿真波形图也能看出这种变化规律。VHDL描述如下: IF reset='0' THEN
tmp:=\复位信号为0,置最小值
ELSIF clk'EVENT AND clk='1' THEN--检测时钟上升沿 IF a='0' THEN
IF tmp=\
tmp:=\置最大值 a:='1';
ELSE --不是最大值时递增 tmp:=tmp+1;--递增运算 END IF; ELSE
IF tmp =\tmp:=\置最小值 a:='0';
ELSE --a为1时,执行递减运算 tmp:=tmp-1;--递减运算
9
乐山职业技术学院毕业设计
4.4 阶梯波模块
阶梯波ladder的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。
图4 阶梯波模块仿真图
阶梯波设计的是数据的递增是以一定的阶梯常数向上增加,所以输出的波形呈现是成阶梯状的,而不是,完全呈现是直线增长。从仿真波形图也能看出这种变化规律。VHDL描述如下:
IF reset='0' THEN
tmp:=\复位信号为0,置最小值 ELSIF clk'EVENT AND clk='1' THEN--检测时钟上升沿 IF a='0' THEN--判断a数值,计数。 IF tmp=\tmp:=\计数到最大清零 a:='1'; ELSE
tmp:=tmp+16;--阶梯常数为16,可修改 a:='1'; END IF; ELSE
a:='0';--循环计数标志 END IF; END IF; q<=tmp; END PROCESS; END behave;
4.5正弦波模块
10
乐山职业技术学院毕业设计
正弦波sin的VHDL程序如附录所示,其中clk是输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为八位二进制输出端口。
图5 正弦波模块仿真图
正弦波产生原理:通过循环不断地从波形数据ROM文件中依次读取正弦波一个周期在时域上64个采样点的波形数据送入波形DAC,从而产生正弦波。 4.6方波模块
方波模块的square的VHDL程序描述如下:其中clk为输入时钟端口,sel0、sel1、sel2为选择波形按键值,reset为输入复位端口,q为整数输出端口。
图6 方波模块仿真图
方波模块的设计是当内部计数cnt达到64时,根据输出标志a的数值输出对应的数值,当a=0输出0,也即是方波周期中的低电平,当a=1,输出255,也即是方波周期中的高电平。连续的输出便成了观测到的方波波形。其VHDL描述如下: IF clr='0' THEN a<='0';
ELSIF clk'EVENT AND clk='1' THEN --检测时钟上升沿 IF cnt<63 THEN --计数64个点 cnt:=cnt+1;--计数 ELSE
cnt:=0; --当计数的值大于64时,清零。
a<=NOT a; --对内部a变量取反,a变化启动进程END PROCESS; ............... PROCESS(clk,a) BEGIN
IF clk'EVENT AND clk='1' THEN IF a='1' THEN
q<=255; --a=1,输出一个波形周期内的高电平
11