EDA课程报告正弦波信号发生器研发设计.docx
- 文档编号:10024735
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:21
- 大小:69.53KB
EDA课程报告正弦波信号发生器研发设计.docx
《EDA课程报告正弦波信号发生器研发设计.docx》由会员分享,可在线阅读,更多相关《EDA课程报告正弦波信号发生器研发设计.docx(21页珍藏版)》请在冰点文库上搜索。
EDA课程报告正弦波信号发生器研发设计
《EDA》课程设计报告
——正弦波信号发生器的设计
一、设计目的:
进一步熟悉QuartusII及其LPM_ROM与FPGA硬件资源的使用方法。
培养动手能力以及合作能力。
二、设计要求:
1、clk为12MHz。
2、通过DAC0832输出正弦波电压信号,电压范围0~-5V。
3、通过示波器观察波形。
三、设计内容:
在QUARTUS
上完成正弦波信号发生器的设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。
最后在实验系统上实测,包括FPGA中ROM的在系统数据读写测试和利用示波器测试。
信号输出的D/A使用实验系统上的ADC0832。
四、设计原理:
图1所示的正弦波信号发生器的结构由四部分组成:
1、计数器或地址发生器(这里选择10位)。
2、正弦信号数据ROM(10位地址线,8位数据线),含有1024个8位数据(一个周期)。
3、VHDL顶层设计。
4、8位D/A(实验中可用ADC0832代替)。
图1所示的信号发生器结构图中,顶层文件singt.vhd在FPGA中实现,包含两个部分:
ROM的地址信号发生器,由10位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。
LPM_ROM底层是FPGA中的EAB、ESB或M4K等模块。
地址发生器的时钟clk的输入频率fo与每周期的波形数据点数(在此选择1024点),以及D/A输出的频率f的关系是:
f=fo/1024
图1正弦信号发生器结构框图
图2正弦波信号发生器的设计图
五、设计步骤:
1、建立.mif格式文件
首先,mif文件可用C语言程序生成,产生正弦波数值的C程序如下:
#include
#include
main()
{
inti;
floats;
for(i=0;i<1024;i++)
{
s=sin(atan
(1)*8*i/256);
printf("%d:
%d;\n",i,(int)((s+1)*255/2))
}
}
其次,把上述程序编译后,在DOS命令行下执行命令:
romgen>sdata.mif;
将生成的sdata.mif文件,再加上.mif文件的头部说明即可。
.mif文件的头部说明如下所示:
WIDTH=8;
DEPTH=1024;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
0:
127;
1:
130;
2:
133;
3:
136;
4:
139;
5:
143;
6:
146;
……(数据略去)
1016:
102;
1017:
105;
1018:
108;
1019:
111;
1020:
115;
1021:
118;
1022:
121;
1023:
124;
END;
2、在设计正弦波信号发生器前,必须首先完成存放波形数据ROM的设计。
利用MegaWizardPlug-Inmanager定制正弦信号数据ROM宏功能块,并将以上的波形数据加载于此ROM中。
设计步骤如下:
1)打开MegaWizardPlug-Inmanager初始对话框。
在Tools菜单中选择MegaWizardPlug-Inmanager产生一个对话框,选择Createanewcustom...项,即定制一个新的模块。
单击Next按钮后,在所产生的对话框的左栏选择Storage项下的LPM_ROM,再选择CycloneⅡ器件和VHDL语言方式;最后输入ROM文件存放的路径和文件名:
e:
\www\rom_1024.vhd,单击Next按钮。
2)选择ROM控制线、地址线和数据线。
在弹出的对话框中选择地址线位宽和ROM中数据数分别为10和1024;选择地址锁存控制信号clock。
3)单击Next按钮在对话框的“WhatshouldtheRAM…”栏选择默认的Auto。
在栏选择“Doyouwantto…Yes,usethisfileformemorycontentdata”项,并按Browse钮,选择指定路径上的文件rom_1024.mif。
在“AllowIn-SystemMemory…”栏选择打勾,并在“TheInstanceIDofthisROM”栏输入ROM1,作为ROM的ID名称。
最后单击Next按钮,再单击Finish按钮后完成ROM定制。
4)打开此文件可以看到其中调用初始化数据文件的语句为:
init_file=>"sdata.mif"。
最后生成的ROM元件文件如源代码1所示,其中的init_file指向已做了修改。
修改后用于例化的波形数据ROM文件rom_1024.vhd如下。
六、源代码:
1)、源代码1如下所示:
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.altera_mf_components.all;
ENTITYrom_1024IS
PORT
(address:
INSTD_LOGIC_VECTOR(9DOWNTO0);
clock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDrom_1024;
ARCHITECTURESYNOFrom_1024IS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(7DOWNTO0);
COMPONENTaltsyncram
--例化altsyncram元件,调用了LPM模块altsyncram
GENERIC(--参数传递语句
--类属参量数据类型定义
intended_device_family:
STRING;
width_a:
NATURAL;
widthad_a:
NATURAL;
numwords_a:
NATURAL;
operation_mode:
STRING;
outdata_reg_a:
STRING;
address_aclr_a:
STRING;
outdata_aclr_a:
STRING;
width_byteena_a:
NATURAL;
init_file:
STRING;
lpm_hint:
STRING;
lpm_type:
STRING
);
PORT(--altsyncram元件接口声明
clock0:
INSTD_LOGIC;
address_a:
INSTD_LOGIC_VECTOR(9DOWNTO0);
q_a:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
);
ENDCOMPONENT;
BEGIN
q<=sub_wire0(7DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(
intended_device_family=>"Cyclone",
--参数传递映射
width_a=>8,--数据线宽度8
widthad_a=>10,--地址线宽度10
numwords_a=>1024,--数据数量1024
operation_mode=>"ROM",--LPM模式ROM
outdata_reg_a=>"CLOCK0",--输出锁存CLOCK0
address_aclr_a=>"NONE",--无异步地址清0
outdata_aclr_a=>"NONE",--无输出锁存异步清0
width_byteena_a=>1,--byteena_a输出口宽度1
init_file=>"sdata.mif",--ROM初始化数据文件
lpm_hint=>"ENABLE_RUNTIME_MOD=NO",
lpm_type=>"altsyncram"--LPM类型
)
PORTMAP(
clock0=>clock,
address_a=>address,
q_a=>sub_wire0
);
ENDSYN;
2)、顶层设计代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitysingtis
port(clk:
instd_logic;--信号源时钟
dout:
outstd_logic_vector(7downto0));
--8位波形数据输出
endsingt;
architecturedaccofsingtis
componentrom_1024
--调用波形数据存储器LPM_ROM,
文件:
rom_1024.vhd声明
port(address:
instd_logic_vector(9downto0);
--10位地址信号
clock:
instd_logic;--地址锁存时钟
q:
outstd_logic_vector(7downto0));
endcomponent;
signalq1:
std_logic_vector(9downto0);
--设内部节点作为地址计数器
begin
process(clk)--LPM_ROM地址发生进程
begin
ifclk'eventandclk='1'then
q1<=q1+1;--Q1作为地址发生器计数器
endif;
endprocess;
u1:
rom_1024portmap(address=>q1,q=>dout,clock=>clk);--例化
enddacc;
3)为此顶层设计创建一项工程,工程名和实体名都是singt。
4)全程编译一次后进入时序仿真测试。
由波形可见,随着每一个时钟上升沿的到来,输出端口将正弦波数据依次输出。
5)硬件测试。
选择电路模式5,则时钟CLK接实验箱的clock0。
将dout(0)…dout(7)分别锁定于实验系统上与DAC0832相接的I/O口:
PIO24、PIO25、PIO26、PIO27、PIO28、PIO29、PIO30、PIO31。
编译下载singt.sof后,打开电压开关,将CLK的时钟通过实验箱上clock0的跳线选择频率为12MHZ,再将示波器接于实验箱的两个挂钩上就能观察波形的输出情况了。
七、仿真波形图:
八、仿真电路图:
九、引脚锁定:
一十、设计结果:
Clock0=12MHZ,输出频率为:
f=47KHZ,周期为:
T=21us
一十一、设计体会:
在本次设计的过程中,我在编译过程中出现问题,第一个问题出在建立.mif格式文件中,没有将生成的sdata.mif文件加上.mif文件的头部说明。
.mif文件的头部说明如下所示:
WIDTH=8;
DEPTH=1024;
ADDRESS_RADIX=DEC;
DATA_RADIX=DEC;
CONTENTBEGIN
0:
127;
1:
130;
……(数据略去)
1023:
124;
END;
由于没有加.mif文件的头部说明,导致用于例化的波形数据ROM文件rom_1024.vhd编译失败。
最后在老师的指导帮助下,正确的把.mif文件的头部说明加在了生成的sdata.mif文件中,这样rom_1024.vhd文件编译成功。
第二个问题出现在完成存放波形数据ROM的设计过程中,没有正确的选择指定路径文件名sdata.mif导致用于例化的波形数据ROM文件rom_1024.vhd编译失败,经过我的思考和分析后,我正确的选择指定路径文件名sdata.mif,这样编译正确通过。
最后,正确的设计正弦波信号发生器的顶层文件sight.vhd,使设计顺利的通过编译。
在编译下载singt.sof后,当改变实验箱上clock0的跳线频率时,相应的波形输出情况也发生相应的变化。
在这次设计中,我也深深地体会到“细节决定成败”这句话的真正含义,也许就因为一个小的细节就会导致设计的失败。
这次设计也启发了我在以后的学习中一定要耐心、细心、认真,不可粗枝大叶。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityabcis
port(
clk:
instd_logic;
dout:
outintegerrange255downto0;
a:
instd_logic);
END;
architectureoneofabcis
signalQ:
integerrange127downto0;
signalW:
integerrange255downto0;
signalD:
integerrange255downto0;
signalC:
integerrange63downto0;
begin
process(clk)
begin
ifclk'eventandclk='1'thenQ<=Q+1;C<=C+1;
ifQ<127THENQ<=Q+1;
ELSEQ<=0;
ifC<63THENC<=C+1;
ELSEC<=0;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(C,Q)
BEGIN
CASECIS
WHEN000=>D<=255;
WHEN001=>D<=254;
WHEN002=>D<=252;
WHEN003=>D<=249;
WHEN004=>D<=245;
WHEN005=>D<=239;
WHEN006=>D<=233;
WHEN007=>D<=225;
WHEN008=>D<=217;
WHEN009=>D<=207;
WHEN010=>D<=197;
WHEN011=>D<=186;
WHEN012=>D<=174;
WHEN013=>D<=162;
WHEN014=>D<=150;
WHEN015=>D<=137;
WHEN016=>D<=124;
WHEN017=>D<=112;
WHEN018=>D<=99;
WHEN019=>D<=87;
WHEN020=>D<=75;
WHEN021=>D<=64;
WHEN022=>D<=53;
WHEN023=>D<=43;
WHEN024=>D<=34;
WHEN025=>D<=26;
WHEN026=>D<=19;
WHEN027=>D<=13;
WHEN028=>D<=8;
WHEN029=>D<=4;
WHEN030=>D<=1;
WHEN031=>D<=0;
WHEN032=>D<=0;
WHEN033=>D<=1;
WHEN034=>D<=4;
WHEN035=>D<=8;
WHEN036=>D<=13;
WHEN037=>D<=19;
WHEN038=>D<=26;
WHEN039=>D<=34;
WHEN040=>D<=43;
WHEN041=>D<=53;
WHEN042=>D<=64;
WHEN043=>D<=75;
WHEN044=>D<=87;
WHEN045=>D<=99;
WHEN046=>D<=112;
WHEN047=>D<=124;
WHEN048=>D<=137;
WHEN049=>D<=150;
WHEN050=>D<=162;
WHEN051=>D<=174;
WHEN052=>D<=186;
WHEN053=>D<=197;
WHEN054=>D<=207;
WHEN055=>D<=217;
WHEN056=>D<=225;
WHEN057=>D<=233;
WHEN058=>D<=239;
WHEN059=>D<=245;
WHEN060=>D<=249;
WHEN061=>D<=252;
WHEN062=>D<=254;
WHEN063=>D<=255;
ENDCASE;
CASEQIS
WHEN000=>W<=255;
WHEN001=>W<=251;
WHEN002=>W<=247;
WHEN003=>W<=243;
WHEN004=>W<=239;
WHEN005=>W<=235;
WHEN006=>W<=231;
WHEN007=>W<=227;
WHEN008=>W<=223;
WHEN009=>W<=219;
WHEN010=>W<=215;
WHEN011=>W<=211;
WHEN012=>W<=207;
WHEN013=>W<=203;
WHEN014=>W<=199;
WHEN015=>W<=195;
WHEN016=>W<=191;
WHEN017=>W<=187;
WHEN018=>W<=183;
WHEN019=>W<=179;
WHEN020=>W<=175;
WHEN021=>W<=171;
WHEN022=>W<=167;
WHEN023=>W<=163;
WHEN024=>W<=159;
WHEN025=>W<=155;
WHEN026=>W<=151;
WHEN027=>W<=147;
WHEN028=>W<=143;
WHEN029=>W<=139;
WHEN030=>W<=135;
WHEN031=>W<=131;
WHEN032=>W<=127;
WHEN033=>W<=123;
WHEN034=>W<=119;
WHEN035=>W<=115;
WHEN036=>W<=111;
WHEN037=>W<=107;
WHEN038=>W<=103;
WHEN039=>W<=99;
WHEN040=>W<=95;
WHEN041=>W<=91;
WHEN042=>W<=87;
WHEN043=>W<=83;
WHEN044=>W<=79;
WHEN045=>W<=75;
WHEN046=>W<=71;
WHEN047=>W<=67;
WHEN048=>W<=63;
WHEN049=>W<=59;
WHEN050=>W<=55;
WHEN051=>W<=51;
WHEN052=>W<=47;
WHEN053=>W<=43;
WHEN054=>W<=39;
WHEN055=>W<=35;
WHEN056=>W<=31;
WHEN057=>W<=27;
WHEN058=>W<=23;
WHEN059=>W<=19;
WHEN060=>W<=15;
WHEN061=>W<=11;
WHEN062=>W<=7;
WHEN063=>W<=3;
WHEN064=>W<=3;
WHEN065=>W<=7;
WHEN066=>W<=11;
WHEN067=>W<=15;
WHEN068=>W<=19;
WHEN069=>W<=23;
WHEN070=>W<=27;
WHEN071=>W<=31;
WHEN072=>W<=35;
WHEN073=>W<=39;
WHEN074=>W<=43;
WHEN075=>W<=47;
WHEN076=>W<=51;
WHEN077=>W<=55;
WHEN078=>W<=59;
WHEN079=>W<=63;
WHEN080=>W<=67;
WHEN081=>W<=71;
WHEN082=>W<=75;
WHEN083=>W<=79;
WHEN084=>W<=83;
WHEN085=>W<=87;
WHEN086=>W<=91;
WHEN087=>W<=95;
WHEN088=>W<=99;
WHEN089=>W<=103;
WHEN090=>W<=107;
WHEN091=>W<=111;
WHEN092=>W<=115;
WHEN093=>W<=119;
WHEN094=>W<=123;
WHEN095=>W<=127;
WHEN096=>W<=131;
WHEN097=>W<=135;
WHEN098=>W<=139;
WHEN099=>W<=143;
WHEN100=>W<=147;
WHEN101=>W<=151;
WHEN102=>W<=155;
WHEN103=>W<=159;
WHEN104=>W<=163;
WHEN105=>W<=167;
WHEN106=>W<=171;
WHEN107=>W<=175;
WHEN108=>W<=179;
WHEN109=>W<=183;
WHEN110=>W<=187;
WHEN111=>W<=191;
WHEN112=>W<=195;
WHEN113=>W<=199;
WHEN114=>W<=203;
WHEN115=>W<=207;
WHEN116=>W<=211;
WHEN117=>W<=215;
WHEN
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程 报告 正弦波 信号发生器 研发 设计