数电综合实验简易函数发生器Word文档格式.docx

上传人:b****5 文档编号:15749362 上传时间:2022-11-15 格式:DOCX 页数:13 大小:1.05MB
下载 相关 举报
数电综合实验简易函数发生器Word文档格式.docx_第1页
第1页 / 共13页
数电综合实验简易函数发生器Word文档格式.docx_第2页
第2页 / 共13页
数电综合实验简易函数发生器Word文档格式.docx_第3页
第3页 / 共13页
数电综合实验简易函数发生器Word文档格式.docx_第4页
第4页 / 共13页
数电综合实验简易函数发生器Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数电综合实验简易函数发生器Word文档格式.docx

《数电综合实验简易函数发生器Word文档格式.docx》由会员分享,可在线阅读,更多相关《数电综合实验简易函数发生器Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

数电综合实验简易函数发生器Word文档格式.docx

4.熟悉D/A变换电路的设计;

二、任务要求

基本任务:

设计制作一个简易函数发生器。

1.输出波形为方波和三角波,频率范围为1kHZ-2kHZ;

2.频率可进行调节并用数码管显示,加、减步进均为100HZ;

3.输出三角波的峰峰值为4-5V,方波幅度为TTL电平的大小;

提高要求:

1.产生频率范围为1kHZ-2kHZ、峰峰值为4-5V的正弦波信号;

2.产生占空比可调的矩形波或其它波形;

3.自拟其它功能。

三、系统设计

1.设计思路

用VHDL语言结合原理图编辑方式设计实现一个函数信号发生器,输出频率可调方波和三角波,正弦波三种波形。

将波形选择、频率控制与分频、三角波、正弦波、方波发生各个模块分别用VHDL语言编程为一个子程序,并把每一个模块转换成图形文件,然后在原理图编辑框调用这些图形模块。

由于考虑到按键开关工作的不确定性,通过拨码开关模块的SW0到SW3控制频率调节f〔3...0〕,用SW4、SW5控制DELTA、SINE、SQUARE波形选通,最后把八位输出经过并串转换,接到开发板上的DA模块(TLV5638),通过D/A转换,从示波器上就能看到波形输出。

2.总体设计框图

(图一:

系统设计框图)

3.分块设计

本设计共使用了六个模块,分别解释如下:

a)分频模块:

本模块主要功能是输出两个分频时钟clk_m和clk_p,前者用于波形的每一点的并行值输出频率,后者是前者的32倍频,用于并串转换(16bit并行输入转串行输出,并且要输出一个二分频时钟)。

经过多方考虑(受制于DA芯片的最高工作频率),选择波形分辨率为64点(即一个周期取样64次)。

这里输出的1KHz到2KHz的频率(步进100Hz)都是近似的。

frq.vhd文件还包含了数码管输出的功能。

采用高频时钟(50M)扫描cat,输出当前的频率值。

这里不再分析。

b)三角波产生模块:

这个模块输出三角波波形。

每次clk_m上升沿输出一个8bit的数据。

周期分辨率为64点。

c)方波产生模块:

本模块输出占空比可调的方波。

默认占空比为50%。

按键调节占空比,步进增/减幅度为12.5%。

d)选波模块:

本模块根据用户操作拨码开关来选择输出的波形。

默认输出低电平。

e)正弦波产生模块:

本模块输出周期分辨率为64点的正弦波。

用Excel或者Matlab算出二进制8bit的正弦波的取样值,然后采用在程序里查表的方式输出数据。

这要比用程序直接计算正弦波的值快捷和简便得多,虽然损失一定精度,但换回的是程序执行的时间和空间资源。

f)并串转换模块:

本模块将上级输入的8bit并行数据信号转换为串行输出,以供TLV5638进行DA转换。

每次系统重置后(reset按键被按下),系统经过两次状态转换。

state0是一个等待状态,系统等待4个并行周期之后进入state1,这个状态主要用来写TLV5638的控制寄存器。

这里我们将它的参考电平设为2.048V。

接着,系统将把TLV5638的触发信号置成有效电平。

接着系统进入state2,这个状态是系统真正进行并串转换的状态。

在TLV5638自身允许输入的状态下,此进程将设置TLV5638,使其依次使用DAC_A和DAC_B输出数据。

在它自身禁止输入的状态下,进程将TLV5638的触发信号置成无效电平,并不输出。

本模块使用例化TLV5638这一器件,具体并串转换的过程将在TLV5638.vhd中实现。

具体流程如下:

每次外部复位信号(reset_i)或者内部复位信号(reset_int)有效时,系统进行各信号清零复位的工作。

cs_o信号作用是对TLV5638的片选,cs_o的下降沿触发TLV5638的数据写入,cs_o上升沿时TLV5638停止数据写入(数据锁存)。

系统默认状态为IDLE(空闲),不进行任何操作。

当DA工作触发信号(start_i)有效时,系统被触发,进入BUSY(工作)状态。

系统状态为BUSY时,进行一次16bit输入数据的并串转换,使用输入并行数据频率的32倍频,将其二分频后输出给TLV5638作为时钟信号。

输出16bit数据后,系统将cs_o复位(停止数据写入芯片),并且将eoc置位(进行一次各信号清零复位的工作)。

系统输出串行数据时首先输出并行输入数据的高位。

四、程序框图

(图二:

系统操作流程图)

五、总体电路图及管脚信息

(图三:

系统电路图)

(图四:

管脚连接信息)

六、源程序

adjust.vhd:

choose_wave.vhd:

dlt_gen.vhd:

frq:

sin_gen.vhd:

sqr_gen.vhd:

tlv5638.vhd:

七、功能说明及操作步骤

1.功能

该工程实现一个简易函数信号发生器的功能。

系统上电后,默认输出低电平(无波形),默认初始频率为1KHz。

波形输出频率可由开发板上的拨码开关SW0~SW3调节,可调范围为1KHz到2KHz,步进量为100Hz。

波形由开发板上的DAC_A口输出。

共有方波和三角波,正弦波三种波形可供选择,用户只需将开发板上的拨码开关SW6~SW7置成不同取值组合,就可以输出不同波形。

其中方波的占空比可以用开发板上的按键开关BTN0~BTN1调节。

系统重置按键为开发板上的按键开关BT7。

另外,实验验收后我继续加入了锯齿波输出的功能。

用户可以在示波器上看到波形输出。

2.操作步骤

上电后用户首先选择波形,使用SW6~SW7选择,具体对应关系如下:

SW7SW6

输出波形

00

无波形(低电平)

01

占空比可调的方波

10

三角波

11

正弦波

波形选择好后,将示波器探头接入开发板的DAC_A与GND之间,即可在示波器上看到相应的波形。

用户可以通过改变SW0~SW3来改变输出波形的频率,具体对应关系如下:

SW3..SW0

输出频率

0000

1.0KHz

0001

1.1KHz

0010

1.2KHz

……

依次递增

1010

2.0KHz

1011

1100

不变

1111

其中,特别的,在输出方波波形时,用户可以按下BT0/BT1来增/减方波的占空比。

系统重置按键为BTN7。

(图五:

实际波形图以及系统连接示意图)

八、资源利用率

(图六:

宏单元占用情况)

(图七:

系统资源利用情况)

九、仿真波形

1.三角波输出仿真情况(状态不全)

2.方波输出仿真情况

3.正弦波输出仿真情况(状态不全)

4.选波模块输出仿真情况

5.并串转换输出仿真情况

6.分频输出仿真情况(以输出方波为例)

十、元件清单

1.计算机;

2.示波器;

3.直流稳压电源;

4.万用表;

5.EDA开发板及相应元器件。

十一、关键技术、遇到的问题及解决方案的详述

1.正弦波输出问题

解决方案:

采用查数据表的模式,既保证了一定数据的精度,同时也替系统节约了大量资源。

这样输出时不必花费时间计算每点不同的sinx值,只需读取ROM里的数据,节省时间,可以达到实时输出。

2.DA转换问题

加入并串转换模块,该模块使用产生并行数据的时钟频率的32倍频,将每一clk_m周期输入的8bit并行数据经32个clk_p时钟周期输出,一共串行输出16bit数据(包括控制位),同时产生16个clko的脉冲供DA芯片使用。

十二、实验结论及总结

今天写这个结题报告的时候回想起来,自己在最开始学习这门课程时,对VHDL语言的理解就完全错误了。

仅仅认为这是一门计算机语言,而忽视了VHDL的定义:

硬件描述语言。

它讲求的是描述某个硬件功能的准确性和规范性,而我却认为只要程序写出来以后逻辑正确就OK了。

譬如,若是纯粹从逻辑上理解,一个触发器完全可以由一个取值有限的信号循环自加来实现。

但是触发器是一个时序逻辑电路,这样描述的器件只是一个累加器。

要在其外部加入触发条件(clk’eventandclk=’1’),累加器才能够行使触发器的功能。

终于认识到这一点,我对VHDL的许多其他误解也消除了。

在仅仅考虑逻辑的前提下,我很迷惑为什么编程过程中有时会出现这样的情况:

一句语句放在进程前面或者进程后面会有完全不同的效果;

两个进程合并成一个也会使功能改变等等。

这些错误都是由于对硬件电路不敏感、不理解状态机概念造成的。

我也更加赞同那句话:

“不学好模拟电路,无法在数字电路领域有深的理解”。

今后的VHDL编程过程中,我将更加注重描述准确这一要点,要时时留意语句实现的硬件电路的性质,编程时多多结合RTL电路,分析排错。

另外一个很深的感触就是VHDL语言编写实时控制程序很有用。

简易函数发生器这个工程触及到时序控制的地方就是并串转换模块。

比较遗憾的是,自己并没有独立的完成这部分的编程工作。

不过,老实说,学习、借鉴其他人写的并串转换程序,是完成这次实验过程中个人感觉收获最大的一个阶段。

自己在VHDL编程的一些“素养”方面确实不足,通过学习网上的一些资料和论文,我反倒学到了很多时序逻辑电路编程方面的知识。

总之,这次综合实验加深了我对VHDL的理解。

我明白仅仅一学期的数电理论学习是远远不够的,甚至连数字电路设计的门槛都不能踏入,所以日后我还要多学习,多了解,多实践,加深对这一领域的认识。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1