HDL实验报告.docx

上传人:b****4 文档编号:6773217 上传时间:2023-05-10 格式:DOCX 页数:18 大小:438.09KB
下载 相关 举报
HDL实验报告.docx_第1页
第1页 / 共18页
HDL实验报告.docx_第2页
第2页 / 共18页
HDL实验报告.docx_第3页
第3页 / 共18页
HDL实验报告.docx_第4页
第4页 / 共18页
HDL实验报告.docx_第5页
第5页 / 共18页
HDL实验报告.docx_第6页
第6页 / 共18页
HDL实验报告.docx_第7页
第7页 / 共18页
HDL实验报告.docx_第8页
第8页 / 共18页
HDL实验报告.docx_第9页
第9页 / 共18页
HDL实验报告.docx_第10页
第10页 / 共18页
HDL实验报告.docx_第11页
第11页 / 共18页
HDL实验报告.docx_第12页
第12页 / 共18页
HDL实验报告.docx_第13页
第13页 / 共18页
HDL实验报告.docx_第14页
第14页 / 共18页
HDL实验报告.docx_第15页
第15页 / 共18页
HDL实验报告.docx_第16页
第16页 / 共18页
HDL实验报告.docx_第17页
第17页 / 共18页
HDL实验报告.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

HDL实验报告.docx

《HDL实验报告.docx》由会员分享,可在线阅读,更多相关《HDL实验报告.docx(18页珍藏版)》请在冰点文库上搜索。

HDL实验报告.docx

HDL实验报告

HDL实验报告

 

专业:

学号:

姓名:

指导老师:

 

 

实验一:

modelsim软件使用……………………………………….…………………3

实验二:

简单组合电路设计……………………………………….………………5

实验三:

二进制全加器设计….……………………………………………………..7

实验四:

二进制计数器设计….………………………………………………………………..…12

实验五:

基本IO口硬件实现…..………………………………………………..…16

实验一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

测试文件:

modulet_yihuo;

rega,b;

wirec;

initial

begin

a=1’b0;b=1’b0;

#20a=1’b1;b=1’b0;

#20a=1’b0;b=1’b1;

#20a=1’b1;b=1’b1;

end

yihuou1(a,b,c);

endmodule

仿真波形:

四、心得

1、编程时候要注意不能少了句子末尾的分号;

2、initial后面不能有分号;

3、程序第一行后面得加上分号,但是末尾不需要。

 

实验二简单组合电路设计

一、实验目的

(1)掌握基于Modelsim的数字电路设计方法;

(2)熟练掌握HDL程序的不同实现方法

二、实验内容

设计一个三人表决器(高电平表示通过),实验内容如下:

(1)三个人,一个主裁判,两个副裁判;

(2)规则:

只要主裁判同意,输出结果为通过;否则,按少数服从多数原则决定

是否通过。

使用VerilogHDL程序实现上述实验内容,并使用modelsim仿真(要求:

至少使用两种

方法实现上述实验内容和testbench)。

三、实验结果

程序1

moduleone(ina,inb,inc,outc);

inputina,inb,inc;

outputoutc;

regoutc;

always@(inaorinborinc)

outc=ina|inb&inc;

endmodule

程序2

moduleone(ina,inb,inc,outc);

inputina,inb,inc;

outputoutc;

asignoutc=ina|inb&inc;

endmodule

测试文件:

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

onet(a,b,c,y);

endmodule

 

仿真波形如下:

实验心得:

第一次独立使用modelsim软件,从一开始的生疏,到做完实验后慢慢地了解如何使用这个软件,并自己做出了基本的仿真,通过仿真验证程序的对与错。

并且在老师的讲解下,我懂得了如何找到错误,发现错误,并如何改正错误。

 

实验三二进制全加器设计

一、实验目的

(1)熟悉VerilogHDL元件例化语句的作用

(2)熟悉全加器的工作原理

(3)用VerilogHDL语言设计四位二进制全加器,并仿真,下载验证其功能

二、实验原理

(1)一位全加器原理:

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)设计程序将加法结果分开输出,即十位数和个位数分别用四位数组表示。

四、实验结果

一位全加器程序:

moduleadd_1(a,b,ci,cout,co);

inputa,b,ci;

outputcout,co;

regcout;

regco;

always@(aorborci)

begin

cout=a^b^ci;

co=(a&b)|(a&ci)|(b&ci);

end

endmodule

四位全加器程序:

moduleadd_4(a,b,ci,count,co);

input[3:

0]a;

input[3:

0]b;

inputci;

output[3:

0]count;

outputco;

wirec1,c2,c3;

begin

add_1add1(a[0],b[0],ci,count[0],c1);

add_1add2(a[1],b[1],c1,count[1],c2);

add_1add3(a[2],b[2],c2,count[2],c3);

add_1add4(a[3],b[3],c3,count[3],co);

end

endmodule

四位全加器测试程序;

modulet_add_4;

reg[3:

0]ad1,ad2;

regc;

wiresc;

wire[3:

0]ss;

initial

begin

ad1=4'b0;

forever

#1ad1=ad1+4'b1;

end

initial

begin

ad2=4'b0;

forever

#16ad2=ad2+4'b1;

end

initial

begin

c=0;

forever

#256c=~c;

end

add_4u3(ad1,ad2,c,ss,sc);

endmodule

仿真波形:

思考题:

二进制加法的十进制个十分离:

moduleB_TO_D(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_B_TO_D;

reg[3:

0]a,b;

regc0,clk;

wire[3:

0]s0,s1,t1,t0;

initial

begin

clk=1'b0;

forever#10clk=~clk;

end

initial

begin

a=4'b0;

forever#10a=a+4'b1;

end

initial

begin

b=4'b0;

forever#160b=b+4'b1;

end

initial

begin

c0=1'b0;

forever#2560c0=~c0;

end

B_TO_Du1(clk,a,b,c0,s0,s1,t1,t0);

endmodule

5、心得体会

1、可以把复杂的问题分解为数个小问题,逐个解决,最终达到目的,就像数全加器,整体复杂,其实单个全加器就简单得多。

2、要熟悉掌握数电知识并且灵活运用。

六、思考题

在仿真时,输出结果会有毛刺,采用什么方法可以消除毛刺?

答:

利用D触发器可以消除毛刺

 

实验四二进制计数器设计

一、实验目的

(1)熟悉VerilogHDL时序电路的设计方法;

(2)了解清零和使能的概念,以及同步清零和异步清零的区别

(3)用VerilogHDL语言设计二进制计数器,并仿真;

二、实验原理

一般计数器可以分为两类:

加法计数器和减法计数器。

加法计数器每来一个脉冲计数

值加1;减法计数器每来一个脉冲计数器值减1;有时将两者做在一起称可逆计数器。

三、实验内容及步骤

(1)编程实现二进制计数器并仿真。

按实验原理要求编写一个二进制计数器,并仿真。

实验步骤:

(1)编程实现十进制计数器,含同异步清零端和进位输出端,编程实现,并modelsim

仿真。

(2)增加预置功能(增加五位输入引脚),实现任意的五位二进制数的计数器。

四、实验结果

计数器程序:

modulecounter(count,cout,clk,rst);

inputclk,rst;

output[3:

0]count;

outputcout;

reg[3:

0]count;

regcout;

always@(posedgeclkorposedgereset)

begin

if(!

reset)

begin

count<=4'b0000;

cout<=1'b0;

end

elseif(count==4'b1111)

begin

count<=4'b0000;

cout<=1'b1;

end

else

begin

count<=count+4'b0001;

cout<=1'b0;

end

end

endmodule

测试程序

modulet_count;

regclk,rst;

wire[3:

0]count;

wirestate;

parametertime_=320;

initial

begin

clk=0;

forever#(time_/32)clk=~clk;

end

initial

begin

rst=0;

forever#(time_)rst=~rst;

end

counteru1(count,state,clk,rst);

endmodule

 

四、仿真效果图

带有预置功能的任意五位二进制计数器程序:

moduleyuzhi_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

 

测试程序:

moduletest_yuzhijishu;

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;

#9rst=1'b0;

#11rst=1'b1;

end

initial

begin

ina=5'b0;

#10ina=5'b1;

#40ina=5'b10;

end

yuzhi_jishuu1(clk,rst,ina,count,co);

endmodule

 

仿真波形:

 

五、心得体会

(1)、本次试验,我了解了用HDL描述时钟电路的一般思想,学会了基本时钟的设计及初始化;

(2)、计数器的预置功能,归结于计数器复位以及计数器满时,计数起点应该是预置数,而不总是零。

 

实验五、基本IO实验

一、实验目的

(1)学习QuartusⅡ5.0的基本操作。

(2)熟悉教学实验板的使用。

(3)初步掌握Verilog语言的设计输入,编译,仿真和调试过程。

二、实验原理

利用一个常开按钮(实验板上的KEY1)作为输入(常开时输入1,闭合时输入0),经过一个反相器后输出到核心板的一个LED。

KEY1常开时,LED灭,按下(闭合)实验板上的KEY1,该LED点亮。

三、实验步骤

1、建立工程

运行QuatrusII软件,建立工程,File→NewProjectWizad

点击NewProjectWizard后弹出指定工程名的对话框,在Diectory,Name,Top-LevelEntity

 

 

2、建立文本文件

输入下述程序:

moduletestio(key1,led1);

inputkey1;

outputled1;

assignled1=~key1;

endmodule

将程序保存为testio.v。

建立文本文件。

File→New,选择VerilogHDLFile

3、分配管脚

为芯片分配管脚可以用QuartusII软件里的“Assignments→Pins”菜单,也可以用tcl脚本文件

对应于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

4、编译

按主工具栏上的编译按钮即开始编译

5、下载

(1)下载设置:

如果第一次使用下载线下载配置文件到FPGA,则需要在Q2软件设置下载线的型号等信息。

先将ByteBlasterII下载线的一头接到PC的并口,执行菜单Tools→Programmer

在Hardwaretype下拉列表选择“ByteBlasterMVorByteBlasterII”,点OK返回“HardwareSetup”对话框,从“Currentlyselectedhardware:

”下拉列表选择ByteBlasterII[LPT1],点击“Close”返回下载界面,可看到下载线已经被添加

(2)将ByteBlasterII下载线一头与PC连接,另一头插入到JTAG口或EPCS4的下载口。

(3)FPGA核心板接上5V电源。

(4)如果只是调试一下设计是否成功,可通过JTAG口把芯片的配置信息下载到FPGA芯片内,掉电后配置信息丢失。

此时,下载界面的“Mode:

”下拉列表应选择“JTAG”,并选择工程中.sof后缀的文件进行下载

 

四、实验结果

在本例的设计中,我们利用一个常开按钮(实验板上的KEY1)作为输入(常开时输入1,闭合时输入0),经过一个反向器后输出到核心板的第一个LED;因此按下(闭合)实验板上的KEY1,该LED灭。

 

五、实验心得

通过本次实验,加深了对FPGA设计流程的理解及QuartusII软件的基本用法,对FPGA实验开发板有了一定的认识,为以后的课程设计打下了一定的基础。

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

当前位置:首页 > 工程科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2