一、频率计数器参数:
- 测量频率范围: 1Hz~40MHz
- 输入电压范围: 0~5V
- 测量精度: 1Hz
二、数字示波器参数:
- 输入电压范围: 0~5V
- 分辨率: 8位数据精度
- 输入信号带宽: 0~2.8MHz
- VGA分辨率: 640×480(像素)
- 最高采样速率: 40MS/s
三、信号发生器参数:
- 支持输出波形: 正弦波
- 最高输出频率: 3MHz/s
- 最高输出频率精度: 10位数据精度
- 支持输出电压幅度: 0~5V
- 支持双路: 支持
四、数字万用表参数:
- 支持测量类型: 电压、电容
- 测量电压范围: 0~5V
- 测量电阻范围: 1nF~100nF
- 测量精度: 12位数据精度
五、频谱分析仪参数:
六、系统电源参数:
七、系统环境参数:
- 工作温度: -10~45°C
- 相对湿度: 20%~80%
八、部分器件参数:
- TLC5540: 最高采样速率40MS/s、8位数据精度
- THS5651: 最高转换速率120MS/s、8位数据精度
- LM6172: 最高转换速率160MS/s
九、系统资源利用情况:
图3.1显示的是DE2开发板上EP2C35F672C6型FPGA的资源利用情况。

图——3.1
本系统的特点是外设众多,且多涉及高速的、大数据量的处理任务。所幸,DE2开发板为我们提供了强有力的硬件支持,原有的外围设备可以集成到DE2上,甚至直接放置到FPGA内部。为了完成大量重复性的数据处理,我们在系统中大量使用了自定义外设,将软件的处理任务转入底层的硬件来处理,这不仅提高了数据处理的速度,更优化了系统的性能。而NiosII软处理器的引入,我们才可以从容地管理这些复杂的外设,使得我们在这么短的时间就完成了这一项工程的开发。
说明:以上参数即是本系统的实际性能参数,我们基本实现了设计的功能与参数要求。
(Revision: 6 / 2009-09-15 00:11:46)
“个人电子实验室”每一个模块都遵循信号的采集、数据处理、结果显示的基本流程。
一、数据采集模块
所有的模块都使用了自定义外设的方法,以SOPC组件的形式加载到Avalon总线上。
1. 本系统使用TLC5540高速AD芯片作为高速数模转换模块,控制时序如图5.1。

图——5.1
2. 系统使用MAX196作为高精度数模转换模块,实现电压的测量,其控制时序如图5.2。
.jpg)
图——5.2
3. 并使用FPGA的On-chip FIFO作为高速的数据缓冲存储器,时序如图5.3。

图——5.3
4. 电容测量模块使用了一个震荡模块使电容的值转换为频率值,然后才进行测量,如图5.4。

图——5.4
5. 逻辑分析仪模块则直接将逻辑电平信号接入到FPGA的GPIO端口。
二、数据处理部分
1. 使用自定义指令实现AUTOSET功能
当AD转换器写满FIFO后,CPU以极快的速度将数据读出,并控制FIFO进行下一次数据的写入。在AD将数据写满之前,CPU就必须将FIFO里面2048个数据的均值、方差、幅度、频率等等计算出来,并显示到VGA上面。如果使用纯软件来计算的话,VGA画面将每隔3秒钟左右更新一次,这显然不符合我们的设计要求。我们使用自定义指令将连加、求根等等运算硬件化,这使得运算在几十个CPU时钟里面就可以完成。实测结果也表明,画面的更新速度有了显著的提高。在此基础上,我们再利用自定义指令实现了示波器的AUTOSET功能,在读出FIFO的数据后,使用硬件快速地从2048个数据中找出两个周期的波形数据,并将其合理地显示。

图——5.5
图5.6和图5.7是自定义指令的调用情况:

图——5.6

图——5.7
2. 使用C2H实现FFT功能
在设计频谱分析仪的时候,由于FFT涉及到大量的乘除运算,这使得VGA画面的更新速度大大降低。我们尝试过直接对FFT函数进行硬件加速,但由于FFT函数里涉及到浮点运算而不能进行硬件加速。所以我们对FFT的C语言算法进行了修改,将浮点运算转变为了整数运算,并最终使用C2H对其进行了硬件加速。通过前后对比,我们发现使用C2H能大大提高FFT的运算效率,使得画面得以极为流畅的显示,提高了系统的实时性。

图——5.8
3. 逻辑分析仪部分
3.1触发条件的控制
本设计中逻辑分析仪的采样触发条件有6种,分别为:低电平触发、高电平触发、上升沿触发、下降沿触发、边沿触发、无条件触发(立即触发)。触发条件可以通过按键控制,并显示于LCD1602上。边沿触发的程序代码如下:
always@(posedge clock)
begin
if(clken) //时钟使能信号
begin
data_r1 <= data_in;//输入数据到一级缓存
data_r2 <= data_r1;// 输入数据到二级缓存
end
end
assign s_posedge = data_r1&~data_r2;//上升沿检测
assign s_negedge = ~data_r1&data_r2; //下降沿检测
assign s_edge = data_r1^data_r2; //双边沿检测
电平触发就比较简单,只要判断读进来的值是高电平还是低电平即可,这里不再赘述。
3.2波形显示控制模块
(1)显示区域划分
设计中驱动的VGA显示器时的显示的分辨率为640×480,总共有10个通道,所以垂直部分分为10行,每行48个像素点的高度,在水平部分显示的栅格网络(用虚线显示),共分16大格,每大格再分5个小格,每小格由8个像素点组成,总共就有640个像素点。这样整个显示器的区域就划分完毕。波形显示格式如图3所示,当然屏幕背景,栅格线,波形,时间标线这几部分我们可以用不同的颜色显示,便于观看。

图——5.9 实现波形显示
(2)波形显示

图——5.10
在VGA显示驱动模块中有两个计数器,行扫描计数器hcount和场扫描计数器vcount,其输出显示有效范围分别为0-639和0-479。现以CH0通道数据分析其显示原理。行扫描计数器和双口RAM的地址是同步的,假设RAM中的数据不变,则显示区域每列读出的数据都是相同的,当场扫描计数器vcount为8时,判断D0的值,若为1输出数据显示。若为0则输出背景色或栅格;同理当vcount为40时,再次判断D0值,若为0输出数据,若为1则输出背景色或栅格。这样一来,就有高低电平波形线显示出来了,至于高电平与低电平跳变时的垂直线,我们可以在RAM数据读取出来之后再一级寄存器做个边沿检测电路,在输入与输出发生变化时,两个不同的值经过“异或”门便可输出“1”。
栅格和时间标线的显示比较简单,只要在显示区域对应的位置(比如当hcount为0、8、40时)输出栅格颜色数据就可以了,若要显示虚线,则需将vcount的值也做比较(比如vcount为奇数时显示,为偶数时不显示)。
(3)移动显示区域
本设计中RAM的存储深度取为1024,而显示器的水平分辨率为640个像素,只能显示640个波形点,但我们通过改变RAM的起始地址来达到查看所有波形数据的目的。
三、结果显示
1. 利用SG-DMA方式实现VGA彩色显示
与DMA不同,SG-DMA可以在非连续的存储器和连续的地址空间进行数据传递,并且每一个SG-DMA都带有描述符序列来确定传输的数据。我们使用SG-DMA连续地读取SDRAM里面的数据,经过数据宽度变换、时钟匹配等等操作后,最终送到VGA进行显示,如图5.11所示。值得注意的是,SG-DMA控制VGA进行显示的时候,数据量相对较大,因此我们更改了SG-DMA与SDRAM之间的Arbitration,加大了数据流量,使得画面能得以流畅的显示。
.jpg)
图——5.11
2. 另外,DE2上集成有丰富的显示器件,我们将数字万用表测量得到的电压和电容值使用LCD进行显示,将频率计测量得到的频率值使用数码管进行显示,同时使用LED小灯显示系统的工作状态等等。
(Revision: 37 / 2009-09-15 12:36:48)
带着学习的心情,我们基本完成了整个系统的设计。
在设计过程中,我们深刻地体会到了使用FPGA进行开发的优越性。SOPC具有灵活的可重构性,正是有了这一特点,才使我们得以在这么短的时间内实现了整个系统的设计。在软件与硬件的设计对比中,我们掌握了硬件加速的使用时机与方法。FPGA可以在一定程度上将一些外部设备集成到FPGA内部(比如FIFO),这在减小系统开销的同时,更提高了系统的运行速度与可靠程度。
在这次比赛中,我们对FPGA的开发过程有了更为深刻的认识。通过充分的可行性研究、严谨的项目计划、合理的进度安排和充分的团队合作,我们不仅圆满地完成了设计要求,也深刻的体会到了团队合作的重要性。这种经历给我们每一个人都留下了一段美好的回忆和一笔宝贵的财富。
“个人电子实验室”基本实现了我们最初的设计要求,但在某些细节方面,还有待完善。在以后的学习过程中,我们将会对其性能进行完善。
最后,感谢Altera公司为我们提供了这样一个锻炼的平台!我们在学习中开阔了视野,在合作中收获了友谊。
(Revision: 6 / 2009-09-14 22:00:25)