Quartus实验报告1和使用教程.docx
《Quartus实验报告1和使用教程.docx》由会员分享,可在线阅读,更多相关《Quartus实验报告1和使用教程.docx(18页珍藏版)》请在冰点文库上搜索。
Quartus实验报告1和使用教程
课程名称通信系统集成电路设计
实验名称QuartusII实验一
专业班级
姓名
学号
日期______2012.12.11__________
实验一:
16进制加法器
1.实验目的
a)熟悉QuartusII及Modelsim软件的使用方法。
掌握用QuartusII软件对VHDL源程序进行编译、修改和Modelsim软件对实验结果的调试、波形仿真。
b)学习编写VHDL程序。
c)编写、调试出16进制计数器的程序,仿真出波形。
2.实验环境
a)QuartusII9.0(32-Bit)
b)ModelSim-Altera6.4a(QuartusII9.0)
c)WinXP操作系统
3.实验内容
a)用QuartusII软件编写16进制加法器,并调试通过;
b)再用QuartusII编写VHDL测试向量文件;
c)用Modelsim仿真结果。
4.实验要求
a)熟悉QuartusII和Modelsim软件,配置好相关环境。
b)编写16进制加法器的VHDL程序。
c)使用QuartusII编译,查找错误并修改到正确无误。
d)使用Model仿真,生成波形文件。
e)书写实验报告。
5.实验步骤及结果
i.建立工程并加入16进制模块和测试平台。
a)新建工程。
点击菜单栏fileNewProjectWizard,出现如下Wizard界面,点击Next。
输入项目名称。
后点击Finish,完成项目的创建.暂时不用选择芯片的型号.
b)建立文件。
点击菜单栏fileNew,点击选择VHDLFile,然后OK。
在编辑区内编写16进制加法器模块的代码。
然后保存文件,输入要保存的名字。
我们这里保存为counter.vhd。
同理,按以上的步骤编写测试平台的文件,另存为tb_counter.vhd。
如下图所示。
ii.设置软件环境,开始调试文件。
1.点击菜单栏里AssignmentsSettings,出现这个界面,修改如下图中所示。
在NativeLinksettings里勾选Compiletestbech,点击TestBenches,在弹出的对话框中点击New,出现如下画面,按图填写各内容,点击filename选择刚才写的Testbench文件后一路点OK.
2.点击ToolsOptions,将Modelsim-Altera的路径填写到图示的位置。
点击OK进行保存设置。
点击Processing->StartCompilation,程序编译成功,出现成功编译的对话框(其中的6warnings不用理会),点击确定。
iii.用Modelsim仿真及显示结果。
点击菜单栏ToolsRunEDASmuliationToolsEDARLTSimulation
此时会启动Modelsim开始仿真,等待一小段时间后点击break停止仿真.。
在波形图区按键盘I/O会放大/缩小,就会出现预期的波形结果.说明程序正确,仿真步骤也正确。
6.问题总结
a)编辑完VHDL文件后保存的文件名一定要和程序实体名一致,后缀为vhd,否则会报错;
b)一般仿真出现error必须处理,但是warning不用理会;
c)仿真时不应该点击下图的中间那个蓝色按钮,这个仿真是编写波形文件才用的仿真.编写测试向量后要仿真的正确步骤应该是:
点击菜单栏ToolsRunEDASmuliationToolsEDARLTSimulation;
d)testbench里的选项要如图设置好,也必须把testbench文件添加进来。
这里的选项比较多,不能马虎。
7.实验结论:
QuartusII和Modelsim软件环境设置比较多,学习时要认真细心。
VHDL语言是硬件语言,一般是并行执行,与C语言等软件语言不太一样,这点学习时要注意。
VHDL有些关键词也比较特别,例如eslif不能错写成elseif。
通过本实验编写的16进制加法器和仿真结果,我们能清楚和直观地看到16进制加法器的基本功能。
在调试过程中出现的error信息要特别关注,根据错误提示信息,对其进行正确改正。
通过这次实验,我掌握EDA工具QuartusII软件的基本使用方法,能够建立项目并编写程序和调试、仿真,也加强了VHDL程序的编写能力。
8.附程序
a)模块程序(counter.vhd)
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.All;
entitycounteris
port(
reset:
instd_logic;
clock:
instd_logic;
dataout:
outstd_logic_vector(3downto0)
);
endcounter;
architectureBehavioralofcounteris
signalinner_reg:
std_logic_vector(3downto0);
begin
dataout<=inner_reg;
process(clock,reset)
begin
if(reset='1')then
inner_reg<="0000";
elsif(clock'eventandclock='1')then
inner_reg<=inner_reg+"0001";
endif;
endprocess;
endBehavioral;
b)测试向量(tb_counter.vhd)
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.all;
USEieee.numeric_std.ALL;
ENTITYtb_counterIS
ENDtb_counter;
ARCHITECTUREbehaviorOFtb_counterIS
--ComponentDeclarationfortheUnitUnderTest(UUT)
COMPONENTcounter
Port(
reset:
instd_logic;
clock:
instd_logic;
dataout:
outstd_logic_vector(3downto0)
);
ENDCOMPONENT;
--Inputs
SIGNALclk:
std_logic:
='0';
SIGNALrst:
std_logic:
='0';
--Outputs
SIGNALdataout1:
std_logic_vector(3downto0);
BEGIN
--InstantiatetheUnitUnderTest(UUT)
uut:
counterPORTMAP(
reset=>rst,
clock=>clk,
dataout=>dataout1
);
--clkgen:
clk_gen:
process
begin
clk<='0';waitfor100ns;
loop
clk<=notclk;waitfor6.25ns;
endloop;
endprocess;
reset_gen:
process
begin
rst<='1';waitfor1200us;
rst<='0';wait;
endprocess;
END;