正弦的设计有详细步骤.docx
- 文档编号:23891578
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:9
- 大小:365.82KB
正弦的设计有详细步骤.docx
《正弦的设计有详细步骤.docx》由会员分享,可在线阅读,更多相关《正弦的设计有详细步骤.docx(9页珍藏版)》请在冰豆网上搜索。
正弦的设计有详细步骤
正弦信号发生器设计
信息工程与工程学院
电子信息科学与技术091班
姓名:
李聪
学号:
3090748117
指导老师:
易金生
一、设计目的:
进一步熟悉QuartusII及其LPM_ROM与FPGA硬件资源的使用方法。
培养动手能力以及合作能力。
二、实验内容
设计一正弦信号发生器,采用ROM进行一个周期数据存储,并通过地址发生器产生正弦信号。
(ROM:
6位地址8位数据;要求使用两种方法:
VHDL编程和LPM)。
在QUARTUS
上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和利用示波器测试。
信号输出的D/A使用实验系统上的ADC0832。
三、实验原理
1、图一所示的信号发生器结构图中,顶层文件sin.v在FPGA中实现。
它包含两个部分:
ROM的地址信号发生器,由6位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。
LPM_ROM底层是FPGA中的EAB、ESB或M4K等模块。
地址发生器的时钟clk的输入频率fo与每周期的波形数据点数(在此选择64点),以及D/A输出的频率f的关系是:
f=fo/64
图一
2、图二所示是此正弦波发生器的RTL图。
其中左边三个——加法器、多路选择器、寄存器构成六位计数器;其输出接右边ROM的地址输入端;输出可以接FPGA外的DAC,完成正弦波形输出。
当然,也可以利用逻辑分析仪SignalTapⅡ对输出口Q[7:
0]的数据采样,从计算机上实时了解输出波形的情况。
图二
3、在设计正弦波信号发生器前,必须首先完成存放波形数据ROM的设计。
本实验采取的ROM的数据由康芯片生成器产生
四、实验源代码
1、顶层模块
modulesin(RST,CLK,EN,Q,AR,WR_n);
output[7:
0]Q;
output[5:
0]AR;
outputWR_n;
inputEN,CLK,RST;
wire[5:
0]TMP;
reg[5:
0]Q1;
wireWR_n;
wireRST;
//例化分频器得到1Hz时钟
divider_by_50Mu0(
.o_clk(clk_1_Hz),
.rst_n(RST),
.i_clk(CLOCK_50)
);
always@(posedgeCLKornegedgeRST)
if(!
RST)
Q1<=7'B000000;
elseif(EN)
Q1<=Q1+1;
elseQ1<=Q1;
assignTMP=Q1;assignAR=TMP;assignWR_n=~EN;
da_sinIC1(.address(TMP),.clock(CLK),.q(Q));
endmodule
2、分频模块
/*divider_by_50M.v/Verilog*/
moduledivider_by_50M(
outputrego_clk,
inputrst_n,
inputi_clk
);
parameterN=1_0000;
parameterM=4_999;//M=(N/2)-1\
reg[15:
0]cnt;
always@(posedgei_clk,negedgerst_n)
begin
if(!
rst_n)
cnt<=0;
else
begin
if(cnt==N-1)
cnt<=0;
else
cnt<=cnt+16'b1;
end
end
always@(posedgei_clk,negedgerst_n)
begin
if(!
rst_n)
o_clk<=0;
else
begin
if(cnt<=M)
o_clk<=1;
else
o_clk<=0;
end
end
endmodule
3、模块连接
moduleda_sin(
address,
clock,
q);
input[4:
0]address;
inputclock;
output[7:
0]q;
`ifndefALTERA_RESERVED_QIS
//synopsystranslate_off
`endif
tri1clock;
`ifndefALTERA_RESERVED_QIS
//synopsystranslate_on
`endif
wire[7:
0]sub_wire0;
wire[7:
0]q=sub_wire0[7:
0];
altsyncramaltsyncram_component(
.clock0(clock),
.address_a(address),
.q_a(sub_wire0),
.aclr0(1'b0),
.aclr1(1'b0),
.address_b(1'b1),
.addressstall_a(1'b0),
.addressstall_b(1'b0),
.byteena_a(1'b1),
.byteena_b(1'b1),
.clock1(1'b1),
.clocken0(1'b1),
.clocken1(1'b1),
.clocken2(1'b1),
.clocken3(1'b1),
.data_a({8{1'b1}}),
.data_b(1'b1),
.eccstatus(),
.q_b(),
.rden_a(1'b1),
.rden_b(1'b1),
.wren_a(1'b0),
.wren_b(1'b0));
defparam
altsyncram_component.clock_enable_input_a="BYPASS",
altsyncram_component.clock_enable_output_a="BYPASS",
altsyncram_component.init_file="sin.mif",
altsyncram_component.intended_device_family="CycloneII",
altsyncram_component.lpm_hint="ENABLE_RUNTIME_MOD=NO",
altsyncram_component.lpm_type="altsyncram",
altsyncram_component.numwords_a=32,
altsyncram_component.operation_mode="ROM",
altsyncram_component.outdata_aclr_a="NONE",
altsyncram_component.outdata_reg_a="UNREGISTERED",
altsyncram_component.widthad_a=5,
altsyncram_component.width_a=8,
altsyncram_component.width_byteena_a=1;
endmodule
五、实物仿真
1、引脚分配
2、程序编译
3.程序下载
4、利用SignalTapⅡ对波形进行仿真,结果如下:
六、实习总结
在这次EDA实验设计中,我完成的是一个正弦波信号发生器的设计,在这次设计中,让我了解到了ROM和RAM的设计方法,让我进一步掌握了Quartus‖的常见使用方法,编程下载以及基于LPM宏功能模块的设计,并掌握了正弦波信号发生器的设计原理,和对试验结果的SignalTapⅡ的波形仿真。
对我来说,此次实验的收获在于数据存储器ROM的设计和一种新的设计方法—利用专用的波形生成器(康芯mif生成器),我相信这对于以后的实验将会有很大的帮助。
此次的实验还算成功,从电路模块的设计到电路的仿真成功能自己自主设计完成,并且在遇到问题是能够找到同学和老师请教,使实习效率比预计的要高出很多。
这是对我自己的一次很大的鼓励,我相信,以后的课程将会学的更好。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正弦 设计 详细 步骤