实验讲义verilogQuartusII软件的使用资料.docx
《实验讲义verilogQuartusII软件的使用资料.docx》由会员分享,可在线阅读,更多相关《实验讲义verilogQuartusII软件的使用资料.docx(14页珍藏版)》请在冰豆网上搜索。
实验讲义verilogQuartusII软件的使用资料
《硬件描述语言及应用》实验讲义
2015-2016年度第二学期
实验一、EDA软件使用
一、实验目的:
1、掌握MAX+PLUSⅡ软件的使用;
2、掌握文本编辑器和波形编辑器的使用。
二、实验仪器
微机一台。
三、实验原理
1、MAX+PLUSⅡ软件
MAX+PLUSII9.3界面友好,使用便捷,被誉为业界最易学易用的EDA软件。
支持原理图、VHDL和Verilog语言文本文件,以及波形与EDIF等格式的文件作为设计输入,并支持这些文件的任意混合设计。
MAX+PLUSII具有门级仿真器,可以进行功能仿真和时序仿真,能够产生精确的仿真结果。
在适配之后,MAX+PLUSII生成供时序仿真用的EDIF、VHDL和Verilog三种不同格式的网表文件。
MAX+PLUSII支持主流的第三方EDA工具,如Synopsys、Cadence、Synplicity、Mentor、Viewlogic、Exemplar和ModelTechnology等。
MAX+PLUSII支持除APEX20K系列之外的所有AlteraFPG/CPLD大规模逻辑器件。
2、Verilog语言简介
(1)什么是VerilogHDL
VerilogHDL是硬件描述语言的一种,用于数字电子系统设计。
它允许设计者用它来进行各种级别的逻辑设计,可以用它进行数字逻辑系统的仿真验证、时序分析、逻辑综合。
它是目前应用最广泛的一种硬件描述语言之一。
(2)VerilogHDL的历史
VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby首创的。
PhilMoorby后来成为Verilog-XL的主要设计者和Cadence公司(CadenceDesignSystem)的第一个合伙人。
在1984年~1985年,Moorby设计出了第一个关于Verilog-XL的仿真器,1986年,他对VerilogHDL的发展又做出了另一个巨大贡献:
即提出了用于快速门级仿真的XL算法。
随着Verilog-XL算法的成功,VerilogHDL语言得到迅速发展。
1989年,Cadence公司收购了GDA公司,VerilogHDL语言成为Cadence公司的私有财产。
1990年,Cadence公司决定公开VerilogHDL语言,于是成立了OVI(OpenVerilogInternational)组织来负责VerilogHDL语言的发展。
(3)VerilogHDL的进展
基于VerilogHDL的优越性,IEEE于1995年制定了VerilogHDL的IEEE标准,即VerilogHDL1364-1995。
其后,又在2001年发布了VerilogHDL1364-2001标准。
据有关文献报道,目前在美国使用VerilogHDL进行设计的工程师大约有60000人,全美国有200多所大学教授用Verilog硬件描述语言的设计方法。
在我国台湾地区几乎所有著名大学的电子和计算机工程系都讲授Verilog有关的课程。
四、实验内容
编程实现约翰逊计数器,并用波形进行仿真。
实验前注意以下几点:
(1)新建一个工程之前一定要新建一个文件夹,后面产生的工程和原程序都保存在这个文件夹中;
(2)不同的工程最好放在不同的文件夹中,同一工程的所有文件都必须放在同一个文件夹中;
(3)保存路径为全英文。
1、程序输入、检查、编译
打开MAX+PLUSII软件,在File菜单里选择New,在弹出的窗口中选择第三项:
TextEditorfile,点OK。
在弹出的窗口中输入约翰逊计数器原程序,
约翰逊计数器是一种移位计数器,采用的是把输出的最高位取非,然后反馈送到最低位触发器的输入端。
约翰逊计数器在每个时钟下只有一个输出发生变化。
下面是约翰逊计数器的VerilogHDL实现代码。
modulejohnson(clk,rst,cnt);
inputclk,rst;
output[3:
0]cnt;
reg[3:
0]y;
assigncnt=y;
always@(posedgeclk)
begin
if(rst)y=0;
else
begin
y[3:
1]=y[2:
0];
y[0]=!
y[3];
end
end
endmodule
接下来是很关键的存盘工作,在存盘前,请在D盘根目录下新建一文件夹,名称为名字+学号,如zhangsan55。
选择菜单File→Save,在出来窗口中选择D盘,然后找到你新建的文件夹,注意一定双击一下。
然后在上面输入文件名johnson.v,完成点OK。
选择菜单File→Project→SetProjecttoCurrentFile。
接下来对程序进行检查,选择菜单File→Project→Save&Check,如果弹出如下窗口,表示检查无误通过,可以进行下一步。
如果显示有错误,仔细检查程序并修改,再次进行检查,直到无误通过。
检查无误后,选择File→Project→Save&Compile。
这一步一定要进行,完成后,留程序输入窗口,把多余窗口关掉。
2、波形仿真
新建一个波形文件,选择File→New,在弹出的窗口中选择WaveformEditorfile,点OK。
这时会发现多了一个菜单Node,选择Node→EnterNodesfromSNF…,在弹出窗口中点击List,然后在左边窗口选择需要的节点,这个程序因为是一个计数器,经过分析我们就选取clk,rst,cnt三个节点,点击中间的“=>”号,点击OK。
一般出来的波形窗口显示200ns左右,需要把时间段调一下,选择View→TimeRange,在弹出来的窗口中to后面输1000。
clk为时钟脉冲,时钟脉冲设置时,右键点击clk,选择Overwrite→Clock,点击OK,就设置完成。
如果觉得时钟脉冲周期较长,可以调一下间距,选择菜单Options→GridSize,设置间距后重新进行时钟脉冲设置。
rst的设置。
rst在程序中的作用是,当来一个时钟脉冲上升延时,如果当时rst为1,则对计数器进行清零,因此,rst应该基本为0,局部设为1。
在rst设置前最好把Options→SnaptoGrid前面的勾去掉。
设置完成,开始仿真,选择File→Project→Save,Compile&Simulate,波形文件选择自动存盘,直接点OK就行。
得到波形文件。
波形文件中发现输出cnt是16进制的,不能很好的反映约翰逊计数器的特点,因此需要把cnt改成2进制。
如图双击H所在位置,在弹出窗口中选择BIN,点OK。
最终得到约翰逊计数器的波形文件。
五、思考题
设计一个十六进制普通计数器。
实验二、3-8译码器设计
一、实验目的
1、掌握3-8译码器设计原理;
2、掌握3-8译码器的编程技巧。
二、实验仪器
微机一台
三、实验内容
译码器属于组合逻辑电路,它的逻辑功能是将二进制代码按其编码时的原意译成对应的输出高、底电平信号,又叫解码器。
在数字电子技术中,它具有非常重要的地位,应用也很广泛。
它除了常为其它集成电路产生片选信号之外,还可以作为数据分配器、函数发生器用,而且在组合逻辑电路设计中它可替代繁多的逻辑门,简化设计电路。
采用case语句实现的3-8译码器的VerilogHDL程序如下:
moduledecoder38(A,Y);
input[2:
0]A;
output[7:
0]Y;
reg[7:
0]Y;
always@(A)
begin
case(A)
3'b000:
Y=8'b10000000;
3'b001:
Y=8'b01000000;
3'b010:
Y=8'b00100000;
3'b011:
Y=8'b00010000;
3'b100:
Y=8'b00001000;
3'b101:
Y=8'b00000100;
3'b110:
Y=8'b00000010;
3'b111:
Y=8'b00000001;
default:
Y=8'bxxxxxxxx;
endcase
end
endmodule
在软件中对程序进行输入、检查、编译,并建立波形文件对译码器进行仿真,测试设计是否正确。
四、思考题
如何用if_else语句实现3-8译码器的设计?
实验三、4位乘法器的设计
一、实验目的
1、理解乘法器工作原理;
2、掌握乘法器的编程技巧。
二、实验仪器
微机一台
三、实验内容
下面是采用for语句4位乘法器的VerilogHDL实现。
moduleMULT4B(R,A,B);
parameterS=4;
output[2*S:
1]R;
input[S:
1]A,B;
reg[2*S:
1]R;
integeri;
always@(AorB)
begin
R=0;
for(i=1;i<=S;i=i+1)
if(B[i])
R=R+(A<<(i-1));
end
endmodule
在软件中对程序进行输入、检查、编译,并建立波形文件对译码器进行仿真,测试设计是否正确。
四、思考题
分别用while和repeat语句设计四位乘法器。
实验四、4位加法器的设计
一、实验目的
1、理解加法器工作原理;
2、掌握加法器的编程技巧。
二、实验仪器
微机一台
三、实验内容
加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可由加法器来构成。
多位加法器的构成有两种方式:
并行进位和串行进位方式。
并行进位加法器设有进位产生逻辑,运算速度较快;串行进位方式是将全加器级联构成多位加法器。
并行进位加法器通常比串行级联加法器占用更多的资源。
随着位数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大。
因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。
下面是4位加法器的VerilogHDL实现。
moduleALU(A,B,S,Y);
input[3:
0]A,B;
input[1:
0]S;
output[7:
0]Y;
parameteradd=2'b00,reduce=2'b01,multiply=2'b10;
reg[7:
0]Y;
always@(AorBorS)
begin
case(S)
2'b00:
Y=A+B;
2'b01:
Y=A-B;
2'b10:
Y=A*B;
default:
Y=0;
endcase
end
endmodule
在软件中对程序进行输入、检查、编译,并建立波形文件对译码器进行仿真,测试设计是否正确。
四、思考题
如何用本设计中的4位加法器完成8位加法器的设计。
实验五、计数器的设计
一、实验目的
1、理解计数器工作原理;
2、掌握不同进制计数器的设计方法。
二、实验仪器
微机一台
三、实验内容
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。
计数器种类繁多,在实际生活中被广泛应用各个领域,包括在工业生产方面、在数字系统方面、交通信号灯控制方面、切纸机械定位和电梯定位调速等方面,是日常生活中不可或缺的一种电子部件。
下面是含异步复位、同步计数使能和可预置功能的加法计数器的VerilogHDL实现。
moduleCNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);
inputCLK,EN,RST,LOAD;
input[3:
0]DATA;
output[3:
0]DOUT;
outputCOUT;
reg[3:
0]Q1;regCOUT;
assignDOUT=Q1;
always@(posedgeCLKornegedgeRST)
begin
if(!
RST)Q1<=0;
elseif(EN)
begin
if(!
LOAD)Q1<=DATA;
elseif(Q1<9)Q1<=Q1+1;
elseQ1<=4'b0000;
end
end
always@(Q1)
if(Q1==4'h9)
COUT=1'b1;
elseCOUT=1'b0;
endmodule
在软件中对程序进行输入、检查、编译,并建立波形文件对译码器进行仿真,测试设计是否正确。
四、思考题
设计5位普通计数器并用仿真图验证。