eda信号发生器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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),