版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL基础第三章3.1硬件描述语言概述VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HDLHDL:HardwareDescribeLangaugeVHDL具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力;学习HDL的几点重要提示1.了解HDL的可综合性问题HDL可以用来系统仿真和硬件实现。如果程序只用于仿真,那么几乎所有的语法和编程方法都可以使用。但如果我们的程序是用于硬件实现(例如:用于FPGA设计),那么我们就必须保证程序“可综合”(程序的功能可以用硬件电路实现)。
学习HDL的几点重要提示2.用硬件电路设计思想来编写HDL
学好HDL的关键是充分理解HDL语句和硬件电路的关系。编写HDL,就是在描述一个电路,我们写完一段程序以后,应当对生成的电路有一些大体上的了解,而不能用纯软件的设计思路来编写硬件描述语言。学习HDL的几点重要提示3.语法掌握贵在精30%的基本HDL语句就可以完成95%以上的电路设计,很多生僻的语句并不能被所有的综合软件所支持,在程序移植或者更换软件平台时,容易产生兼容性问题,也不利于其他人阅读和修改。建议多用心钻研常用语句,理解这些语句的硬件含义。3.1.1组合电路描述entity
mux21a
isport(a,b:
in
bit;
s:
in
bit;
y:
out
bit);end;architecture
one
of
mux21a
isbegin
y<=a
when
s='0'
else
b;end;3.1.2
VHDL结构实体:描述了电路器件的外部情况和各信号端口的基本性质。entity
mux21a
isport(a,b:
in
bit;
s:
in
bit;
y:
out
bit);end;实体名实体名是标识符,可以由设计者自定,好的实体名应该体现器件的基本功能。3.1.2
VHDL结构端口语句:用来描述电路的端口及端口信号的性质。port(
a,b
:
in
bit
;
s
:
in
bit
;
y
:
out
bit
);端口信号名可以自定义。端口信号名端口模式数据类型限定了数据对象的取值范围和数值类型,即对其传输或存储的数据做明确界定。数据类型端口模式用于定义端口上数据流动的方向。3.1.2
VHDL结构可综合的端口模式有4种:(1)IN——输入端口;(2)OUT——输出端口;(3)INOUT——双向端口;(4)BUFFER——缓冲端口;3.1.2
VHDL结构数据类型BIT:取值范围是逻辑位‘1’和‘0’;可以参与逻辑运算或算数运算;bit_vector(1downto0);axmuxcbds23.1.2
VHDL结构结构体的一般表达式如下:architecture<结构体名>of<所对应实体名>is[说明语句]
begin功能描述语句end;3.1.2
VHDL结构architectureoneofmux21aisbegin y<=awhens='0'else b;end;赋值符号<=表示输入端口a的数据向输出端口y传输;数据比较符由“=”连接的表达式的数据类型是BOOLEAN类型,其取值分别为TRUE和FALSE。3.1.2
VHDL结构条件信号赋值语句:when_else赋值目标<=表达式when赋值条件
else
表达式when赋值条件
else
……
表达式;
y<=awhen(s=“00”)else bwhen(s=“01”)else cwhen(s=“10”)else d;aycbdsmux2注意1、条件测试具有顺序性;2、各赋值条件可以同时成立;3、至少有一个ELSE,即至少是两分支;3.1.2
VHDL结构选择信号赋值语句:with_select_whenwith 选择表达式 select赋值目标<=表达式when 选择值,
表达式when 选择值,
……,
表达式when 选择值;
with sselect y<=awhen “00”, bwhen “01”,
cwhen “10”, dwhen others;aymuxcbds2注意1、条件测试不分先后;2、各赋值条件不能重复;3、不允许存在条件涵盖不全的现象;上机练习:分别用when_else语句和with_select_when语句实现4选1数据选择器,要求完成设计输入、编译和仿真。仿真时注意输入信号波形编辑的原则是a、b、c、d有所不同,两个选择输入端按00、01、10、11四种情况出现即可。请启动Tools→RTLViewer观察不同语句所对应电路结构有何不同;注意事项:1、新建文件时,选择vhdlfile选项;2、保存文件时,文件名必须和实体名一致;with_select_whenwhen_else问题已经学了哪两个语句,其基本格式如何?有什么区别?实现四选一数据选择器时硬件逻辑电路是否相同?3.1.3简单信号赋值语句
赋值目标<=表达式;entity
mux21a
isport(a,b,s:
in
bit;
y:
out
bit);end;architecture
one
of
mux21a
issignald,e:bit;begin
d<=a
and(not
s);e<=bands; y<=dore;end;赋值符号两侧的数据类型必须一致!3.1.4逻辑操作符运算符功能AND与OR或NAND与非NOR或非XOR异或XNOR同或NOT非3.1.5if语句architecture
one
of
mux21a
isbegin
ifs=‘0’theny<=a;
elsey<=b;
end
if;
end;architecture
one
of
mux21a
isbegin
process(a,b,s) begin
ifs=‘0’theny<=a;
elsey<=b;
end
if;
endprocess;
end;3.1.5if语句If语句的结构(1):If条件句then顺序语句;else顺序语句;endif;这是一个两分支结构,包含了所有可能的条件,是完整条件语句;3.1.5if语句If语句的结构(2):If条件句then顺序语句;elsIf条件句then顺序语句;elsIf条件句then顺序语句;……else顺序语句;endif;这是一个多分支结构,包含了所有可能的条件,是完整条件语句;3.1.6组合电路和完整条件语句赋值目标<=表达式when赋值条件
else
表达式when赋值条件
else
……
表达式;with选择表达式 select赋值目标<=表达式when 选择值
表达式when 选择值
……
表达式when others;组合电路都是由完整条件语句构成的!3.1.7进程语句进程的基本格式:[进程标号:]PROCESS[(敏感信号表)][IS]
<说明区>
BEGIN
<顺序语句>
ENDPROCESS[进程标号];敏感信号敏感信号是这样的信号:它的变化可以启动进程。通常要求将进程中的所有输入信号都放入敏感信号表中。上机练习:If条件句then顺序语句;elsIf条件句then顺序语句;elsIf条件句then顺序语句;……else顺序语句;endif;用上面结构实现4选1数据选择器,要求完成设计输入、编译和仿真,并思考该语句是不是完整条件语句。请启动Tools→RTLViewer观察对应电路结构的特点,跟以前的练习比较,与哪个语句实现的电路结构相同;3.2时序电路的描述时序电路是数字逻辑中必不可少的组成部分,下面以典型的时序元件D触发器为例来说明时序电路的VHDL规则,从而得出时序电路描述的一般规律和设计方法。3.2.1
D触发器实体描述:entity
dff1
isport(d:
in
bit;
clk:
in
bit;
q:
out
bit);end;3.2.1
D触发器entity
dff1
isport(d:
in
std_logic;
clk:
in
std_logic;
q:
out
std_logic);end;library
ieee;useieee.std_logic_1164.all;entity
dff1
isport(d:
in
std_logic;
clk:
in
std_logic;
q:
out
std_logic);end;3.2.1
D触发器标准逻辑位数据类型:STD_LOGICTYPEBITIS(‘0’,’1’);--只有两种取值TYPESTD_LOGICIS(‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’);涉及库和标准程序包LIBRARYWORK;LIBRARYSTD;USESTD.STANDARD.ALL;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;STD_LOGIC数据类型在数字器件中实现的只有其中的4~5种值,即’X’,’0’,’1’,’Z’,其他值通常不可综合。3.2.1
D触发器结构体描述:请叙述D触发器的功能。当时钟脉冲CLK的上升沿到来时,输入端D的值赋给输出端Q。上升沿的表达方法是:CLK’EVENTANDCLK=‘1’EVENT叫做信号属性函数,其用法是:<信号名>’ENENT含义是:信号的取值在一个极小时间段内发生变化。3.2.1
D触发器architecture
one
of
dff1
isbegin
if
clk'event
and
clk='1'
then
q<=d;
endif;
end;architecture
one
of
dff1
isbegin
process(d,clk)
begin
if
clk'event
and
clk='1'
then
q<=d;
endif;
endprocess;end;完整条件语句?3.2.1
D触发器(图)3.2.1
D触发器architecture
one
of
dff1
issignalq1:std_logic;begin
process(d,clk)
begin
if
clk'event
and
clk='1'
then
q1<=d;
endif;
endprocess;q<=q1;end;3.2.1
D触发器3.2.1
D触发器信号定义和数据对象格式:signal
信号名:数据类型;内部节点信号的定义位置: architecture
one
of
dff1
is signalq1:std_logic; begin
……定义q1的目的是为了在设计更大的电路时使用由此引入的节点。3.2.1
D触发器architectureoneofdff1isbeginprocess(d,clk)
variableq1:std_logic;
begin
if
clk'event
and
clk='1'thenq1:=d;
endif; q<=q1;endprocess;end;3.2.1
D触发器3.2.1
D触发器数据对象:在vhdl中数据对象相当于一种容器,它能够接受不同数据类型的赋值。在vhdl中,数据对象有三种:即信号、变量、常量。在vhdl中,被定义的标识符必须被确定为某数据对象,同时还必须被定义为某种数据类型。问题:引入时序电路结构的必要条件是什么?(跟组合电路相比较而言)不完整条件语句的使用3.2.2不完整条件语句和时序电路例:数值比较器
entitycompis
port(a,b:inbit;
y:outbit); end; architectureoneofcompis begin process(a,b)
begin ifa>btheny<='1';
elsifa<btheny<='0';
endif;
endprocess; end;3.2.2不完整条件语句和时序电路3.2.2不完整条件语句和时序电路ifa>btheny<='1';elsifa<btheny<='0';endif;ifa>btheny<='1';elsey<='0';endif;3.2.2不完整条件语句和时序电路3.2.2不完整条件语句和时序电路结论:引入时序电路结构的必要条件是:不完整条件语句的出现,而与电路中是否存在clk‘eventandclk=‘1’
语句没有关系;不完整条件语句不局限于if语句;3.2.3节时序电路的不同表述方法自己看。3.2.3计数器的设计四位二进制加法计数器的功能描述:clkCQ[3..0]counterCQ端初值为0,CLK上升沿有效;当CLK端上升沿到来时,输出端加1。
LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL;
ENTITYCNT4IS PORT(CLK:INSTD_LOGIC;CQ:BUFFERINTEGERRANGE15DOWNTO0);END;ARCHITECTUREONEOFCNT4ISBEGIN PROCESS(CLK) BEGIN IFCLK’EVENTANDCLK=‘1’THENCQ<=CQ+1;
ENDIF; ENDPROCESS;END;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT4ISPORT(CLK:INSTD_LOGIC; CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0));
END;
ARCHITECTUREONEOFCNT4IS
SIGNALCQI:STD_LOGIC_VECTOR(3DOWNTO0); BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THENCQI<=CQI+1;
ENDIF; ENDPROCESS;
CQ<=CQI; END;3.2.3计数器的设计四位二进制加法计数器的功能描述:clkCQ[3..0]counterrst为异步复位端;en为同步使能端;cout为进位输出端;rstencout实体的定义参考例3-21(64页)1)中间节点的定义:variablecqi:std_logic_vector(3downto0);2)异步复位端的实现:Ifrst=‘1’thencqi:=(others=>’0’);3)同步使能端的实现:Ifen=‘1’thencqi:=cqi+1;4)进位输出端的实现:Ifcqi=9thencout<=‘1’elsecout<=‘0’;endif;实验3:含异步复位端和同步使能端的60进制加法计数器的设计设计要点:参考例3-21,修改其中输出端cq的位数为:std_logic_vector(5downto0);ifcqi<59thencqi:=cqi+1;注意异步复位端和同步使能端是如何实现的;注意IF语句嵌套时的格式;注意赋值语句CQI:=(OTHERS=>’0’)的用法和含义;上机注意事项:保存文件时修改默认的文件名vhdl1为实体名(解决方法);参照原理图法中100进制计数器进行引脚分配和下载,独立完成硬件测试,其中时钟输入端仍然选择Pin93。实验报告要求:一、实验目的:学习实用计数器的设计,进一步理解同步和异步的概念,熟悉并掌握复杂if语句的用法。复习仿真和硬件测试的步骤,进一步熟悉fpga的设计流程;二、实验原理:请叙述该计数器个输入输出端口的作用;解释以下三条语句的含义并说明为什么要这样做;程序中使用了两种形式的if语句,请说明其中所包含的完整条件语句和不完整条件语句都有哪些;三、实验要求:完成程序的编辑、编译,独立完成语法错误的排查;进行仿真验证和硬件测试;实验报告要求:四、回答问题:什么叫运算符重载,程序中哪些地方出现了运算符重载,请举例说明。参考例3-19和61页的有关文字说明整数类型的定义方法。vhdl语言的数据对象有哪三种,说明信号和变量的定义方法。请依据仿真波形来说明什么是异步复位端和同步清零端3.3全加器的VHDL描述本节通过全加器的设计流程,介绍含有全加器的VHDL程序,学习case语句和元件例化语句的用法。3.3.1用case语句描述半加器(3-16)absumcout00000110101011013.3.1用case语句描述半加器(3-16)case语句属于顺序语句,因此必须放在进程中使用;case语句的一般表述是:case<表达式>iswhen<选择值或标识符>=><顺序语句>;…<顺序语句>;when<选择值或标识符>=><顺序语句>;…<顺序语句>;……whenothers=><顺序语句>;endcase;注意事项:选择值必须在表达式的取值范围内;选择值不能重复;一般需加others;3.3.1用case语句描述半加器(3-16)signalselect:std_logic_vector(1downto0);
select<=a&b;caseselectis
when“00”=>so<=‘0’;co<=‘0’;when“01”=>so<=‘1’;co<=‘0’;when“10”=>so<=‘1’;co<=‘0’;when“11”=>so<=‘0’;co<=‘1’;whenothers=>NULL;endcase;3.3.1用case语句描述半加器(3-16)关于并置操作符:&→并置操作符的作用是:将操作数或数组合并起来形成新的数组。→可以是这种方式:‘0’
&‘1’,其结果是“01”;→也可以是这种方式:‘VH’&‘DL’,其结果是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三节水圈和水循环教案
- 《楼宇经济发展情况报告》
- 屋顶餐厅屋顶防水修缮协议
- 苏教版五年级上册美术教案
- 冷冻仓储服务合同
- 河道城市办公设施工程合同
- 建筑绿化模板施工承包合同
- 航空航天甲方现场管理办法
- 玩具零售联营合同
- 教育工程合同教学质量
- 2022年江苏省南京市栖霞区南外仙林分校小学部六上期中数学试卷
- (完整版)砂石料场开采专项方案
- 真想变成大大的荷叶(详案)
- 原生家庭与个人成长(课堂PPT)
- 货代公司规章制度管理办法范本
- 医学英语教程(2)ppt课件
- 上交叉与下交叉综合征(课堂PPT)
- 物理图库(几乎包含所有初中物理图片)
- 铜仁市房地产市场调查分析报告专业课件
- 中南大学湘雅医院亚专科管理办法(试行)
- 矿山监理规划
评论
0/150
提交评论