基于eda智能函数发生器的设计内容摘要:

测调试的优点,因此本设计的函数发生器选择方案四完成波形发生的全部功能。 波形函数输出控制方式选择 方案一:控制多路 D/A 开关输出方式 此种方案为每一路输出的波形函数使用一路 D/A 转换后输出,通过控制开关控制每一路 D/A是否工作,决定输出的波形。 此种方案可以同时输出多路波形,但是需 要路 D/A 转化器,外围电路复杂,制作成本较高而且控制复杂。 方案二:采用数据选择器方式 D/A 转换 波形发生模块 时钟 clk 复位 reset 波形输出选择模块 5 此种方案可以利用 VHDL 语言写出数据选择器,然后每种函数发生器的输出和数据选择器输入相连接,通过控制开关选择对应的波形输出。 方案二完全可以得到方案一的设计要求,而且只需一个 D/A 转换器就可以。 电路不需要外部搭建,节约成本且控制简单方便。 方案三:采用数据分配器方式 此种方案利用数据分配器的功能,通过控制开关选择相应的函数发生器模块,使之产生相应的波形输出,并通过数据分配器的使能复位控制决定是否输出波形, 此种方案和方案二很 相似,也能够实现设计的功能也具有方案二的优点。 基于方案二的设计简便、节约制作元件和成本、控制简便等优点,选择方案二作为波形函数输出控制方式。 通过以上各个模块的分析最终确定函数信号发生器的自顶向下的细化框图为: 系统的整体原理框图: 系统时钟输入后,通过复位开关选择是否产生波形,当各个模块产生相应的信号波形后,通过波形选择模块波形选择开关选泽输出不同的波形,再通过 D/A 转换器转换,就可以把数字信号(由 FPGA 输出 )变成了相应模拟的信号波形。 整个系统设计的核心就是 FPGA部分。 第 4 章 各模块程序设计及仿真 根据自上而下的思路进行项目设计。 明确每个模块的功能以后,开始编写各个模块的程序。 递增斜波 icrs 的 VHDL 程序如附录所示,其中 clk 是输入时钟端口, sel0、 sel sel2为选择波形按键值, reset 为输入复位端口, q为八位二进制输出端口。 图 1 递增斜波模块仿真图 程序设计的当复位信号为 0 时,输出为 0,无对应的波形产生。 当复位信号为 1时,每当检测到时钟上升沿时,计数器值加 1,当 增加到最大后清零。 计数值增加呈现线性关系,因此输出的波形是递增的斜波。 从仿真波形图也能看出这种变化规律。 VHDL 描述为: IF reset=39。 039。 THEN tmp:= 00000000。 复位信号清零 ELSIF clk39。 EVENT AND clk=39。 139。 THEN IF tmp=11111111 THEN tmp:=00000000。 递增到最大值清零 ELSE tmp:=tmp+1。 递增运算 递减斜波 dcrs 的 VHDL 程序 如附录所示,其中 clk 是输入时钟端口, sel0、 sel sel2为选择波形按键值, reset 为输入复位端口, q为八位二进制输出端口。 波形选 择模块 递增斜波模块 递减斜波模块 三角波模块 阶梯波模块 正弦波模块 方波模块 时钟 clk 复位 reset 波形选择开关 D/A转换器 6 图 2 递减斜波模块仿真图 程序设计的是复位信号为 0 时输出为 0,无对应的波形产生。 当复位信号为 1 时,当每当检测到时钟上升沿时,计数值减 1,当减到 0 后赋值到最大。 计数值减少呈现线性关系,因此输出的波形是递减的斜波。 从仿真波形图也能看出这种变化规律。 VHDL 描述为: IF reset=39。 039。 THEN tmp:=11111111。 复位信号置最大值 ELSIF clk39。 EVENT AND clk=39。 139。 THEN检测时钟上升沿 IF tmp=00000000 THEN tmp:=11111111。 递减到 0 置最大值 ELSE tmp:=tmp1。 递减运算 三角波模块 三角波 delat 的 VHDL 程序如附录所示,其中 clk是输入时钟端口, sel0、 sel sel2为选择波形按键值, reset 为输入复位端口, q 为八位二进制输出端口。 三角波波形是对称的,每边呈线形变化,所以可以根据数据做简单运算,就可以得到三角波。 图 3 三角波模块仿真图 程序设计的是 reset 复位信号为 0 时输出为 0,无对应的波形产生。 当复位信号为 1时,当每当检测到时钟上升沿时,当计数的数据不是最大值时,数值做递增运算,当增大到最大时,然后再做递减运算,因此输出的波形便呈现出三角波的形状。 从仿真波形图也能看出这种变化规律。 VHDL 描述如下: IF reset=39。 039。 THEN tmp:=00000000。 复位信号为 0,置最小值 ELSIF clk39。 EVENT AND clk=39。 139。 THEN检测时钟上升沿 IF a=39。 039。 THEN IF tmp=11111110 THEN tmp:=11111111。 置最大值 a:=39。 139。 ELSE 不是最大值时递增 tmp:=tmp+1。 递增运算 END IF。 ELSE IF tmp =00000001 THEN tmp:=00000000。 置最小值 a:=39。 039。 ELSE a 为 1 时,执行递减运算 tmp:=tmp1。 递减运算 阶梯波模块 阶梯波 ladder 的 VHDL 程序如附录所示,其中 clk 是输入时钟端口, sel0、 sel sel2为选择波形按键值, reset 为输入复位端口, q为八位二进制输出端口。 图 4 阶梯波模块仿真图 7 阶梯波设计的是数据的递增是以一定的阶梯常数向上增加,所以输出的波形呈现是成阶梯状的,而不是,完全呈现是直线增长。 从仿真波形图也能看出这种变化规律。 VHDL 描述如下: IF reset=39。 039。 THEN tmp:=00000000。 复位信号为 0,置最小值 ELSIF clk39。 EVENT AND clk=39。 139。 THEN检测时钟上升沿 IF a=39。 039。 THEN判断 a数 值,计数。 IF tmp=11111111 THEN tmp:=00000000。 计数到最大清零 a:=39。 139。 ELSE tmp:=tmp+16。 阶梯常数为 16,可修改 a:=39。 139。 END IF。 ELSE a:=39。 039。 循环计数标志 END IF。 END IF。 q=tmp。 END PROCESS。 END behave。 正弦波 sin的 VHDL 程序如附录所示,其中 clk 是输入时钟端口, sel0、 sel sel2为选择波形按 键值, reset 为输入复位端口, q为八位二进制输出端口。 图 5 正弦波模块仿真图 正弦波产生原理:通过循环不断地从波形数据 ROM 文件中依次读取正弦波一个周期在时域上 64个采样点的波形数据送入波形 DAC,从而产生正弦波。 方波模块 方波模块的 square 的 VHDL 程序描述如下:其中 clk 为输入时钟端口, sel0、 selsel2 为选择波形按键值, reset 为输入复位端口, q为整数输出端口。 图 6 方波模块仿真图 方波模块的设计是当内部计数 t 达到 64 时,根据输出标志 a 的数值输出对应的数值,当 a=0 输出 0,也即是方波周期中的低电平,当 a=1,输出 255,也即是方波周期中的高电平。 连续的输出便成了观测到的方波波形。 其 VHDL 描述如下: 8 IF clr=39。 039。 THEN a=39。 039。 ELSIF clk39。 EVENT AND clk=39。 139。 THEN 检测时钟上升沿 IF t63 THEN 计数 64 个点 t:=t+1。 计数 ELSE t:=0。 当计数的值大于 64 时,清零。 a=NOT a。 对 内部 a 变量取反, a 变化启动进程 END PROCESS。 ............... PROCESS(clk, a) BEGIN IF clk39。 EVENT AND clk=39。 139。 THEN IF a=39。 139。 THE。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。