EDA课程报告正弦波信号发生器的方案设计书.docx

上传人:b****6 文档编号:6176907 上传时间:2023-01-04 格式:DOCX 页数:17 大小:37.35KB
下载 相关 举报
EDA课程报告正弦波信号发生器的方案设计书.docx_第1页
第1页 / 共17页
EDA课程报告正弦波信号发生器的方案设计书.docx_第2页
第2页 / 共17页
EDA课程报告正弦波信号发生器的方案设计书.docx_第3页
第3页 / 共17页
EDA课程报告正弦波信号发生器的方案设计书.docx_第4页
第4页 / 共17页
EDA课程报告正弦波信号发生器的方案设计书.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

EDA课程报告正弦波信号发生器的方案设计书.docx

《EDA课程报告正弦波信号发生器的方案设计书.docx》由会员分享,可在线阅读,更多相关《EDA课程报告正弦波信号发生器的方案设计书.docx(17页珍藏版)》请在冰豆网上搜索。

EDA课程报告正弦波信号发生器的方案设计书.docx

EDA课程报告正弦波信号发生器的方案设计书

封面

作者:

PanHongliang

仅供个人学习

《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。

WHEN118=>W<=219。

WHEN119=>W<=223

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1