HDL实验总报告.docx
- 文档编号:27415082
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:32
- 大小:602.53KB
HDL实验总报告.docx
《HDL实验总报告.docx》由会员分享,可在线阅读,更多相关《HDL实验总报告.docx(32页珍藏版)》请在冰豆网上搜索。
HDL实验总报告
河海大学物联网工程学院
课程设计报告
题目HDL课程设计
专业、学号通信工程1162310406
学生姓名史文倩
指导教师梁瑞宇
完成时间2013.11.9
目录
实验一Modelsim仿真软件的使用…………………………………3
实验二简单组合电路设计……………………………………………..5
实验三二进制全加器设计……………………………………………..7
实验四二进制计数器设计…………………………………………….13
实验五基本IO实验……………………………………………….18
实验一Modelsim仿真软件的使用
一、实验目的
(1)熟悉Modelsim软件;
(2)掌握Modelsim软件的编译、仿真方法
(3)熟练运用Modelsim软件进行HDL程序设计开发
二、实验步骤
(1)学习,练习使用Modelsim软件
(2)用VerilogHDL程序实现一个异或门,Modelsim仿真,观察效果
三、实验结果
1.程序:
moduleyihuo(a,b,c);
inputa,b;
outputc;
assignc=a^b;
endmodule
2.测试文件:
modulet_yihuo;
rega,b;
wirec;
initial
begin
a=1'b0;
b=1'b0;
#30a=1'b1;b=1'b0;
#30a=1'b0;b=1'b1;
#30a=1'b1;b=1'b1;
end
yihuou1(a,b,c);
endmodule
3.波形
4.心得
1、编程时候要注意分号的使用;
2、程序第一行后面得加分号,末尾不加。
实验二简单组合电路设计
一、实验目的
(1)掌握基于Modelsim的数字电路设计方法;
(2)熟练掌握HDL程序的不同实现方法
二、实验内容
设计一个三人表决器(高电平表示通过),实验内容如下:
(1)三个人,一个主裁判,两个副裁判;
(2)规则:
只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定
是否通过。
使用VerilogHDL程序实现上述实验内容,并使用modelsim仿真(要求:
至少使用两种
方法实现上述实验内容和testbench)。
三、实验结果
1.程序
modulebiaojue(ina,inb,inc,out);
inputina,inb,inc;
outputout;
regout;
always@(inaorinborinc)
out=ina|inb&inc;
endmodule
2.测试文件:
modulet_biaojue;
rega,b,c;
wirey;
initial
begin
a=1'b0;
forever#10a=~a;
end
initial
begin
b=1'b0;
forever#20b=~b;
end
initial
begin
c=1'b0;
forever#40c=~c;
end
biaojuet(a,b,c,y);
endmodule
3.仿真波形如下:
4.心得
1、编程时候要注意分号的使用。
2、程序第一行后面得加分号,末尾不加。
3、注意仿真时间的选择。
4、学会了如何仿真。
5、懂得了仿真时加wave时,选调用例化的名字。
实验三二进制全加器设计
一、实验目的
(1)熟悉VerilogHDL元件例化语句的作用
(2)熟悉全加器的工作原理
(3)用VerilogHDL语言设计四位二进制全加器,并仿真,下载验证其功能
二、实验原理
(1)一位全加器原理:
真值表:
AiBiCi-1CiSi
00000
00101
01001
01110
10001
10110
11010
11111
Ai,Bi分别是两个二进制位,Ci-1是前级进位,Ci是进位,Si是加法结果。
表达式:
Si=Ai^Bi^Ci-1 ;
Ci-1=Ai&Bi|Ai&Ci-1|Bi&Ci-1 ;
四位全加器:
在一位全加器基础上设计多位全加器,利用进位进行级联。
三、实验内容
(1)用VerilogHDL语言描述一位全加器,并使用modelsim仿真验证结果。
(2)用VerilogHDL元件例化语句实现四位全加器,modelsim仿真并下载到实验箱,
用按键模拟输入,led灯模拟输出,验证结果。
(3)设计程序将加法结果分开输出,即十位数和个位数分别用四位数组表示。
四、实验结果
1.程序
一位全加器程序:
moduleadd_1(a,b,ci,s,co);
inputa,b,ci;
outputs,co;
regs;
regco;
always@(aorborci)
begin
s=a^b^ci;
co=(a&b)|(a&ci)|(b&ci);
end
endmodule
四位全加器程序:
moduleadd_4(a,b,ci,s,co);
input[3:
0]a;
input[3:
0]b;
inputci;
output[3:
0]s;
outputco;
wiret1,t2,t3;
add_1u1(a[0],b[0],ci,s[0],t1);
add_1u2(a[1],b[1],t1,s[1],t2);
add_1u3(a[2],b[2],t2,s[2],t3);
add_1u4(a[3],b[3],t3,s[3],co);
endmodule
2.四位全加器测试程序;
modulet_add_4;
reg[3:
0]a,b;
regc;
wireco;
wire[3:
0]s;
initial
begin
a=4'b0000;
forever
#1a=a+1'b1;
end
initial
begin
b=4'b0000;
forever
#16b=b+1'b1;
end
initial
begin
c=1'b0;
forever
#256c=~c;
end
add_4u3(a,b,c,s,co);
endmodule
3.仿真波形如下:
思考题:
二进制加法的十进制个十分离:
modulegsfl(clk,a,b,c0,s0,s1,t1,t0);
input[3:
0]a,b;
inputc0,clk;
output[3:
0]s0,s1,t1,t0;
wire[3:
0]s;
reg[3:
0]t0,t1;
wire[4:
0]S;
wirec1,c2,c3,c4;
add_1u1(a[0],b[0],c0,s[0],c1);
add_1u2(a[1],b[1],c1,s[1],c2);
add_1u3(a[2],b[2],c2,s[2],c3);
add_1u4(a[3],b[3],c3,s[3],c4);
assignS={c4,s};
always@(posedgeclkorposedgeS)
if(S<5'b1010)
begin
t1<=4'b0;
t0<=s;
end
elseif(5'b1010<=S<5'b10100)
begin
t1<=4'b1;
t0<=S-5'b1010;
end
elseif(5'b10100<=S<5'b11110)
begin
t1<=4'b10;
t0<=S-5'b10100;
end
else
begin
t1<=4'b11;
t0<=S-5'b11110;
end
DD1(s1,clk,t1);
DD0(s0,clk,t0);
endmodule
moduleD(q,clk,d);
inputclk;
input[3:
0]d;
output[3:
0]q;
reg[3:
0]q;
always@(posedgeclk)
q<=d;
endmodule
测试程序:
moduleT_gsfl;
reg[3:
0]a,b;
regc0,clk;
wire[3:
0]s0,s1,t1,t0;
initial
begin
clk=1'b0;
forever#1clk=~clk;
end
initial
begin
a=4'b0;
forever#1a=a+4'b1;
end
initial
begin
b=4'b0;
forever#16b=b+4'b1;
end
initial
begin
c0=1'b0;
forever#2560c0=~c0;
end
gsflu1(clk,a,b,c0,s0,s1,t1,t0);
endmodule
仿真波形如下:
4.心得
问题要分离开来看,一个大的问题是由许多小问题组成,搞清它们的逻辑关系,一点一点的做,再组装起来。
学会分析问题,简化问题,学会从复杂中抽象出本质。
5、思考题
在仿真时,输出结果会有毛刺,采用什么方法可以消除毛刺?
答:
利用D触发器可以消除毛刺
实验四二进制计数器设计
一、实验目的
(1)熟悉VerilogHDL时序电路的设计方法;
(2)了解清零和使能的概念,以及同步清零和异步清零的区别
(3)用VerilogHDL语言设计二进制计数器,并仿真;
二、实验原理
计数器是最常见的寄存器逻辑电路,从微处理器的地址发生器到频率计都需要用到计
数器。
一般计数器可以分为两类:
加法计数器和减法计数器。
加法计数器每来一个脉冲计数
值加1;减法计数器每来一个脉冲计数器值减1;有时将两者做在一起称可逆计数器。
计数
器也分为自由计数器和可预置计数器。
有的计数器只有简单复位控制端,称自由计数器;有
的计数器可以预置计数初值,称可预置计数器。
三、实验内容及步骤
(1)编程实现二进制计数器并仿真。
按实验原理要求编写一个二进制计数器,并仿真。
modulecounter(count,clk,reset);
output[3:
0]count;
inputclk,reset;
reg[3:
0]count;
always@(posedgeclkorposedgereset)
if(!
reset)
count=4'h00;
else
count<=count+4'h01;
endmodule
自行编写testbench文件
(2)编程实现十进制计数器,含同异步清零端和进位输出端,编程实现,并modelsim
仿真。
(3)增加预置功能(增加五位输入引脚),实现任意的五位二进制数的计数器。
四、实验结果
1.测试程序:
modulet_counter;
regreset,clk;
wire[3:
0]count;
initial
begin
clk=0;
forever#10clk=~clk;
end
initial
begin
reset=1;
#5reset=~reset;
#10reset=~reset;
#50reset=~reset;
#10reset=~reset;
end
counteru1(count,clk,reset);
endmodule
仿真效果图
2.十进制程序
modulecount10(sc,count,clk,reset);
output[3:
0]count;
outputregsc;
inputclk,reset;
reg[3:
0]count;
always@(posedgeclkornegedgereset)
if(!
reset)
begin
count<=4'b0;
sc<=1'b0;
end
else
if(count==4'b1010)
begin
sc<=1'b1;
count<=4'b0;
end
else
begin
sc<=1'b0;
count<=count+4'b1;
end
endmodule
测试程序:
modulet_count10;
regreset,clk;
wire[3:
0]count;
wiresc;
initial
begin
clk=0;
forever#10clk=~clk;
end
initial
begin
reset=1;
#20reset=~reset;
#40reset=~reset;
#50reset=~reset;
#70reset=~reset;
end
count10u1(sc,count,clk,reset);
endmodule
仿真效果图
3.带预置程序
moduleyz_jishu(clk,rst,ina,count,co);
inputclk,rst;
input[4:
0]ina;
output[4:
0]count;
outputco;
reg[4:
0]count;
regco;
always@(posedgeclkornegedgerst)
if(!
rst)
begin
count<=ina;
co<=1'b0;
end
else
if(count==5'b11111)
begin
count<=ina;
co<=1'b1;
end
else
begin
count<=count+1'b1;
co<=1'b0;
end
endmodule
测试程序
modulet_yzjishu;
reg[4:
0]ina;
regclk;
regrst;
wire[4:
0]count;
wireco;
initial
begin
clk=1'b0;
forever#1clk=~clk;
end
initial
begin
rst=1'b1;
#5rst=1'b0;
#10rst=1'b1;
end
initial
begin
ina=5'b0;
#15ina=5'b1;
#30ina=5'b0;
end
yz_jishuu1(clk,rst,ina,count,co);
endmodule
仿真结果
五.实验心得
知道了同步清零与异步清零的区别,做实验就要在一次次的失败中找到解决方法。
实验五基本IO实验
一、实验目的
(1)学习QuartusⅡ5.0的基本操作。
(2)熟悉教学实验板的使用。
(3)初步掌握Verilog语言的设计输入,编译,仿真和调试过程。
二、实验原理
利用一个常开按钮(实验板上的KEY1)作为输入(常开时输入1,闭合时输入0),经
过一个反相器后输出到核心板的一个LED。
KEY1常开时,LED灭,按下(闭合)实验板上
的KEY1,该LED点亮。
三、实验步骤
1、建立工程
2、运行QuatrusII软件,建立工程,File→NewProjectWizad。
点击NewProjectWizard后弹出指定工程名的对话框,在Diectory,Name,Top-Level
Entity。
建立工程
指定工程名对话框
按Next按钮,出现添加工程文件的对话框
添加工程文件对话框
选择FPGA器件型号对话框
在这里我们先不用管它,直接按Next进行下一步,选择FPGA器件的型号。
在Family下拉框中,我们选择Cyclone系列FPGA,然后在“Availabledevices:
”中根
据核心板的FPGA型号选择FPGA型号,注意在Filters一栏选上“ShowAdvancedDevices”
以显示所有的器件型号。
一直按Next进行,最后按Finish按钮即建立一个空项目。
2、建立文本文件
File→New,选择VerilogHDLFile
建立Verilog文件
输入下述程序:
moduletestio(key1,led1);
inputkey1;
outputled1;
assignled1=~key1;
endmodule
将程序保存为testio.v。
3、分配管脚
为芯片分配管脚可以用QuartusII软件里的“Assignments→Pins”菜单,也可以用tcl
脚本文件。
本文介绍用tcl的方法。
在工程目录下建立一个name为Setup.tcl的file。
File→New,选择otherfiles页
面(图5.6):
有关tcl文件的更详尽内容可参考QuartusII的帮助文档。
在实际项目中,
该文件也可以根据具体管脚分配要求来改写。
新建文件对话框
对应于EP1C6核心板:
set_global_assignment-nameRESERVE_ALL_UNUSED_PINS"ASINPUTTRI-STATED"
set_global_assignment-nameENABLE_INIT_DONE_OUTPUTOFF
set_location_assignmentPIN_181-toled1
set_location_assignmentPIN_64-tokey1
保存到工程目录下,并注意在保存对话框选上“Addfiletocurrentproject”选项。
然后打开Tools->TclScripts,选中刚才编辑的Script文件:
Setup,并点击Run,
TclScripts对话框
5、编译
按主工具栏上的编译按钮即开始编译
主工具栏
6、仿真
建立波形仿真文件。
File→New,选择otherfiles页面。
在波形图的右处空白处点击鼠标右键,选择InsertNodeorBus,插入管脚。
在弹出的对话框中,选择NodeFinder。
在NodeFinder中,先点击list,出现要仿真的管脚,然后点击〉〉,将所有管脚选到右边框内,点击ok。
建立波形仿真文件
插入管脚
进入NodeFinder
选择要仿真管脚
选择完成图
点击key1,选择图左边的,弹出图,点击ok
时钟信号赋值
分配完输入信号的效果图
保存波形文件(不要修改文件名)。
点击工具栏上的按钮进行仿真,得到仿真结果
图,观察是否和设计相符。
仿真结果图
7、下载
(1)下载设置:
如果第一次使用下载线下载配置文件到FPGA,则需要在Q2软件设置下
载线的型号等信息。
先将ByteBlasterII下载线的一头接到PC的并口,执行菜单Tools→
Programmer。
下载编程器选择
打开下载界面,可看到NoHardware,表示还没有设置下载线,
未设置下载线
点击HardwareSetup,弹出“HardwareSetup”对话框
“HardwareSetup”对话框
点击“AddHardware”,弹出“AddHardware”对话框
下载编程器选择
在Hardwaretype下拉列表选择“ByteBlasterMVorByteBlasterII”,点OK返回“Hardware
Setup”对话框,从“Currentlyselectedhardware:
”下拉列表选择ByteBlasterII[LPT1],点击
“Close”返回下载界面,可看到下载线已经被添加
已设置下载线
(2)将ByteBlasterII下载线一头与PC连接,另一头插入到JTAG口或EPCS4的下载口。
(3)FPGA核心板接上5V电源。
(4)如果只是调试一下设计是否成功,可通过JTAG口把芯片的配置信息下载到FPGA芯
片内,掉电后配置信息丢失。
此时,下载界面的“Mode:
”下拉列表应选择“JTAG”,并
选择工程中.sof后缀的文件进行下载。
(注意记得在“Program/Configure”那个方框那里打
上“√”,其它“Verify”、“BlankCheck”等可根据需要选择。
)
(5)如果要下载到非易失Flash配置芯片(掉电后配置信息不丢失)里去,则将ByteBlasterII
插到EPCS1芯片的下载口。
并在下载界面的“Mode:
”下拉列表应选择“ActiveSerial
Programming”,并选择工程中.pof后缀的文件进行下载。
四、实验结果
在本例的设计中,我们利用一个常开按钮(实验板上的KEY1)作为输入(常开时输入
1,闭合时输入0),经过一个反向器后输出到核心板的第一个LED;因此按下(闭合)实验
板上的KEY1,该LED灭。
五、实验心得
通过本次实验,理解FPGA的设计流程和QuartusII软件的基本用法。
,对FPGA实验开发板有了一定的认识,为以后的课程设计打下了一定的基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- HDL 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)