eda信号发生器设计

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

目录

摘要 (2)

一、实验目的 (2)

二、主要功能 (2)

三、实验原理 (3)

四、软件设计 (3)

4.1、程序 (3)

4.2、波形图 (4)

五、引脚锁定后下载程序 (5)

六、实验结果 (5)

七、实训心得 (5)

八、参考文献 (9)

九、附录 (9)

摘要

信号发生器是一种能提供各种频率、波形和输出电平电信号的设备。在测量各种电信系统或电信设备的振幅特性、频率特性、传输特性及其它电参数时,以及测量元器件的特性与参数时,用作测试的信号源或激励源。

信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器

关键词:信号发生器;FPGA;Verilog HDL语言

一、实验目的

进一步巩固理论知识培养所学理论知识在实际中的应用能力:掌握EDA设计的一般方法;熟悉一种EDA软件,掌握一般EDA系统的调试方法:利用EDA软件设计一个电子技术综合问题,培养Verilog HDL编程;书写技术报告的能力,为以后进行工程实际问题的研究打下设计基础。

二、主要功能

信号发生器,它用于产生被测电路所需特定参数的电测试信号。在测试、研究或调整电子电路及设备时,为测定电路的一些电参量,如测量频率响应、噪声系数,为电压表定度等,都要求提供符合所定技术条件的电信号,以模拟在实际工作中使用的待测设备的激励信号。当要求进行系统的稳态特性测量时,需使用振幅、频率已知的正弦信号源。当测试系统的瞬态特性时,又需使用前沿时间、脉冲宽度和重复周期已知的矩形脉冲源。并且要求信号源输出信号的参数,如频率、波形、输出电压或功率等,能在一定范围内进行精确调整,有很好的稳定性,有输出指示。信号源可以根据输出波形的不同,划分为正弦波信号发生器、矩形脉冲信号发生器、函数信号发生器和随机信号发生器等四大类。正弦信号是使用最广泛的测试信号。这是因为产生正弦信号的方法比较简单,而且用正弦信号测量比较方便。正弦信号源又可以根据工作频率范围的不同划分为若干种。

实验原理

波形发生器的电路结构主要由四部分组成:FPGA中的波形发生器控制电路、波形数据表ROM、D/A转换器、滤波电路。

形发生器电路结构图

主振级产生低频正弦振荡信号,经电压放大器放大,达到电压输出幅度的要求,经输出衰减器可直接输出电压,用主振输出调节电位器调节输出电压的大小。

三、软件的设计

1.程序(见附录)

2.波形图

四、引脚锁定后下载程序

安装usb-blaster驱动程序。配置JTAG文件,下载程序到试验箱FPGA芯片中进行调试,仿真和修改直到得到预期的仿真结果。

六、由设计文件生成的.bdf文件,其外接接口如下图所示

五、实验结果

参考文献

[1]黄继业、潘松.EDA技术及其创新实践——Verilog HDL版[M].北京:电子工业出版社社,2012.

[2]周彬.EDA技术及应用.北京:北京邮电大学出版社,2014.

附录源程序

信号发生器设计实现如下:

module sine(clock,swept_clk,select,data,dout,da_clk,da_mode);

input clock; //系统时钟

input swept_clk; //扫描时钟

input select; //功能选择,波形产生&扫频

input[11:0]data; //频率控制

output [9:0]dout; //数据输出

output da_clk; //D/A时钟

output da_mode; //D/A数据模式选择

reg[11:0] load_count; //数控分频器重装值

reg[11:0] scan_data; //扫频控制值

reg[11:0] count; //数控分频计数器

reg rom_clk; //ROM波表时钟

reg[7:0]addr; //ROM地址

assign da_clk = rom_clk; //D/A时钟输出

assign da_mode = 1'b0; //D/A数据模式选择以二进制输入

always @(posedge clock) //选择数控分频器初值

begin

if(select == 1'b1)

load_count <= data; //由外部输入

else

load_count <= scan_data; //由内部扫频产生

end

always @(posedge clock) //数控分频器

begin

if(count == 12'hfff)

begin

count <= load_count;

rom_clk <= 1'b1;

end

else

begin

count <= count + 1'b1;

rom_clk <= 1'b0;

end

end

always @(posedge clock) //产生ROM地址

begin

if(rom_clk)

addr <= addr + 8'd1;

end

always @(posedge swept_clk)

begin

scan_data <= scan_data + 8'd1;

end

sine_rom rom( //调用生成的ROM宏单元。

.address(addr),

相关文档
最新文档