版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.5.3VHDL语言的描述风格三种描述风格:
行为描述:使用功能描述
数据流(寄存器传输):使用布尔代数式描述
结构描述:模块间的连接关系描述
5.5.4基本逻辑电路的VHDL设计一、组合电路原则1:在process中用到的所有输入信号都出现在敏感信号列表中;原则2:电路的真值表必须在代码中完整的反映出来。(否则会生成锁存器)1.三态门及总线缓冲器--指定大写“Z”表示高阻态
a<=‘Z’;a_bus<=“ZZZZZZZZ”;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;ENTITYtri_gateISport(din,en:INstd_logic;dout:OUTstd_logic);ENDtri_gate;
ARCHITECTUREartOFtri_gateISBEGIN
PROCESS(din,en)
BEGIN
IF(en=‘0’)thendout<=din;
ELSEdout<=‘Z’;
ENDIF;
ENDPROCESSENDart;dinenENdout8位数据总线?2.8:3优先编码器GSlibraryieee;useieee.std_logic_1164.all;ENTITYpriencoderisPORT(din:INSTD_LOGIC_VECTOR(7downto0);ei:INSTD_LOGIC;yout:OUTSTD_LOGIC_VECTOR(2downto0);eo,gs:OUTSTD_LOGIC);ENDpriencoder;ARCHITECTUREcod74148OFpriencoderISBEGINPROCESS(ei,din)BEGINIF(ei='1')THENyout<="111";eo<='1';gs<='1';ELSE
IF(din(7)='0')THENyout<="000";eo<='1';gs<='0';ELSIF(din(6)='0')THENyout<="001";eo<='1';gs<='0';ELSIF(din(5)='0')THENyout<="010";eo<='1';····················································ELSIF(din(0)='0')THENyout<="111";eo<='1';gs<='0';ELSEyout<="111";eo<='0';gs<='1';ENDIF;ENDIF;ENDPROCESS;ENDcod74148;触发器、寄存器、计数器、分频器、节拍发生器、状态机等。二、时序逻辑电路设计时钟上升沿:(clock’eventandclock=‘1’)时钟下降沿:(clock’eventandclock=‘0’)进程的敏感信号是时钟信号,在进程内部用if语句描述时钟的边沿条件。敏感信号表的特点:
1)敏感信号表中只有时钟信号--同步复位等。如:
process(clk)
begin
if(clk’eventandclk=‘1’)then
ifreset=‘1’thendata<=“00”;
elsedata<=in_data;
endif;
end
if;
endprocess;最先判断时钟同步复位同步复位2D触发器2)敏感信号表中除时钟外,还有其它信号--异步操作例:
process(clk,reset)
begin
ifreset=‘1’thendata<=“00”;
elsif(clk’eventandclk=‘1’)thendata<=in_data;
endif;
endprocess;
最先判断异步复位同步、异步区别:敏感信号表、语句顺序对于判断时钟电路边沿,后没有“else”语句。2)计数器描述计数器(std_logic_vector),要用到中间信号和标准的程序包:IEEE.STD_LOGIC_UNSIGNEDlibraryIEEE;use
IEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitycounter10isPort
(clk:in
std_logic;load:in
std_logic;din:instd_logic_vector(3downto0);qout:outstd_logic_vector(3downto0);
c:outstd_logic);endcounter10;例:异步置数(低有效)的10进制计数器。architectureartof
counter10
is
signal
temp:std_logic_vector(3downto0);beginprocess(clk,load,din)begin
if(load='0')then
temp<=din;
elsif(clk’eventandclk=‘1’)then
if(temp=“1001“)thentemp<="0000";
else
temp<=temp+1;
endif;
endif;endprocess;qout<=temp;c<='1‘whentemp=“1001”else‘0’;
endart;为描述计数过程,定义中间信号。--if(temp=9)then--whentemp=9elseprocess(clk,reset,din)
begin
if(load='0')then
temp<=din;elsif
(clk’eventandclk=‘1’)then
if(temp=9)thentemp<="0000";c<=‘1’;
else
temp<=temp+1;c<=‘0’;
endif;
endif;endprocess;qout<=temp;Endart
················if(clk’eventandclk=‘1’)then
if(temp=m-1)thentemp<="00···00";
else
temp<=temp+1;
endif;endif;endprocess;q<=temp;
c<='1‘whentemp=m-1else‘0’;例:六十进制(分、秒)计数器libraryIEEE;use
IEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityclock60is
Port(clk:in
std_logic;clr:in
std_logic;s1:outstd_logic_vector(3downto0);s10:outstd_logic_vector(2downto0);co:out
std_logic);endclock60;architectureartof
clock60
is
signal
s1_temp:std_logic_vector(3downto0);
signals10_temp:std_logic_vector(2downto0);与一般二进制计数器不同,分个位十位显示,为分、秒计数beginprocess(clk,clr)beginif(clr=‘1‘)thens1_temp<=“0000”;s10_temp<=“000”;elsif
(clk’eventandclk=‘1’)then
if(s1_temp=9)thens1_temp<="0000";
if(s10_temp=5)thens10_temp<=“000”;else
s10_temp<=s10_temp+1;
endif;else
s1_temp<=s1_temp+1;
endif;
endif;
endprocess;s1<=s1_temp;s10<=s10_temp;co<=‘1’when(s10_temp=5ands1_temp=9)
else‘0’;Endart;libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;ENTITYaddISPORT(clk,x,y:INSTD_LOGIC;qout:OUTSTD_LOGIC_VECTOR(2DOWNTO0);co:OUTSTD_LOGIC);ENDadd;ARCHITECTUREbehvOFaddIsSIGNALcon:std_logic_vector(1downto0);SIGNALtemp:std_logic_vector(2downto0);SIGNALm:integerrange7downto0;BEGINPROCESS(x,y)begincon<=x&y;caseconiswhen"00“=>m<=3;when"01"=>m<=4;when"10"=>m<=6;whenothers=>m<=7;ENDcase;
ENDprocess;模可控计数器(由输入x,y控制)M=3,4,6,7PROCESS(clk,m)beginif(clk'eventandclk='1')thenif(temp=m-1)thentemp<="000";elsetemp<=temp+1;ENDIF;ENDIF;
ENDPROCESS;
qout<=temp;co<='1'whentemp=m-1else'0';ENDbehv;M=3,4,6,7例:设计5000分频器libraryIEEE;use
IEEE.STD_LOGIC_1164.ALL;entityfpisPort
(clk:in
std_logic;clkout
:outstd_logic);endfp;architectureartof
fp
is
signaltemp:integer
range0to4999;Begin
process
(clk)
begin
if(clk’eventandclk=‘1’)then
if(temp=4999)thentemp<=0;elsetemp<=temp+1;
endif;endif;endprocess;clkout<='1'when(temp<2500)else'0';
endart;(占空比50%)例:8位环形移位寄存器(左、右移、异步置数)libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityshfrtisPort
(clk,load,con:instd_logic;din:in
std_logic_vector(7downto0);qout
:outstd_logic_vector(7downto0));endshfrt;architectureartofshfrt
is
signalq_temp:std_logic_vector(7downto0);
beginprocess(clk,load,din)
begin
if
load=‘1’thenq_temp<=din;
elsif(clk’eventand
clk=‘1’)thenif
con=‘1’thenq_temp<=q_temp(6downto
0)&q_temp(7);
elseq_temp<=q_temp(0)&q_temp(7downto1);
endif;
endif;
Endprocess;qout<=q_temp;Endart;例:环型顺序脉冲发生器(4位)libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityindexis
Port(clk,ld:in
std_logic;y
:outstd_logic_vector(3downto0));endindex;architectureartof
index
issignal
q:std_logic_vector(3downto0);beginprocess(clk)
begin
if(clk’eventandclk=‘1’)
then
ifld=‘0’thenq<=“1000”;
elseq<=q(0)&q(3downto1);
endif;
endif;
Endprocess;y<=q;
End
art;3)状态机
用户自定义数据类型利用用户自定义数据类型--枚举类型实现。type数据类型名is
数据类型定义(枚举);
语法格式:综合器自动实现枚举类型元素的编码typestatetype
is
(s0,s1,s2,s3);signalpresent_state,next_state:statetype;……typeweekis(sun,mon,tue,wed,thu,fri,sat);Signalday:week;……day<=sun;present_state<=S0;
状态机整体描述结构和输出的描述
组合进程:描述状态逻辑、输出逻辑;时序进程:描述从次态到现态转换;
——
两段式有限状态机
状态转移的描述CASE
现态IS
WHEN
表达式值1=>顺序处理语句11;语句12;
……
WHEN表达式值3=>顺序处理语句31;语句32;
ENDCASE;Moore型状态机的描述LIBRARYIEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITYmooreIS
PORT(clk,x:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmoore;ARCHITECTUREbehvOFmooreIS
TYPE
StateIS(s0,s1,s2,s3);SIGNALcurrent_state,next_state:State;BEGIN第一进程,完成状态转换,必须饱含时钟敏感信号REG:
PROCESS
(clk)
BEGIN
IF
(clk'EVENTandclk='1')THEN
current_state<=next_state;
ENDIF;
ENDPROCESS;COM:PROCESS
(current_state,x)
BEGIN
CASEcurrent_stateIS
WHENs0=>y<=‘0’;
IFx=‘0’THEN
next_state<=s0;
ELSE
next_state<=s1;
ENDIF;
WHENs1=>y<=‘1’;
IFx=‘0’THEN
next_state<=s2;
ELSE
next_state<=s1;
ENDIF;
WHENs2=>y<=‘0’;
IFx=‘0’THEN
next_state<=s3;
ELSE
next_state<=s2;END
if;
第二进程:输出和状态逻辑间关系,必须包含现态、输入等敏感信号
WHENs3=>y<=‘0’;IFx=‘0’THEN
next_state<=s1;
ELSE
next_state<=s0;
ENDIF;ENDCASE;
ENDprocess;ENDbehy;摩尔型LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmealyIS
PORT(clk,x:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDmealy;ARCHITECTUREbehvOFmealyIS
TYPE
stateIS(s0,s1,s2,s3);
SIGNALcurrent_state,next_state:state;BEGIN
REG:
PROCESS(clk)
BEGIN
IF
(clk'EVENTandclk='1')THEN
current_state<=next_state;
ENDIF;
ENDPROCESS;Mealy型有限状态机的设计1/0COM:PROCESS
(current_state,x)BEGIN
CASEcurrent_stateIS
WHENs0=>IFx=‘0’THENnext_state<=s0;y<=‘0’;
ELSE
next_state<=s1;
y<=‘0’;
ENDIF;
WHENs1=>IFx=‘0’THEN
next_state<=s0;
y<=‘0’;
ELSE
next_state<=s2;
y<=‘0’;
ENDIF;1/0WHENs2=>IFx=‘0’THEN
next_state<=s0;y<=‘0’;
ELSE
next_state<=s3;y<=‘0’;
ENDIF;
WHENs3=>IFx=‘0’THEN
next_state<=s0;y<=‘0’;
ELSE
next_state<=s3;y<=‘1’;
ENDIF;ENDcase;
ENDPROCESS;ENDbehv;1/05.5.4VHDL的层次化(结构化)设计与元件例化(component)语句在多层次的设计中,高层次的设计模块调用低层次的设计模块,构成模块化的设计。重点描述模块间的连接关系。由元件声明、元件例化两部分关键语句组成。被例化元件的来源:
VHDL设计实体;其它HDL设计实体;厂商提供的工艺库中的元件、IP核。层次化设计的优点:分工共享移植周期短一个元件是一段结构完整的常用代码,包括声明,实体和结构体,使用component可以使代码具有层次化的结构。1.元件声明:在结构体说明区中对所调用的低层次的实体模块(名称、端口类型等)声明为元件。
2.元件例化:将低层次元件调用、安装到当前层次。给出连接映射。COMPONENT元件名PORT
(端口名表);ENDCOMPONENT
;例化名:低层元件名
PORTMAP(端口列表);语法格式:语法格式:端口列表:低层端口名=>当前名称(或,直接位置映射)一位全加器的原理图
LIBRARYIEEE;--或门逻辑描述
USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aIS
PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);
END
or2a;
ARCHITECTUREart1OFor2aIS
BEGINc<=aORb;ENDart1;LIBRARYIEEE;--半加器描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderIS
PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDadder;ARCHITECTUREart2OFadderis
BEGIN
so<=aXORb;co<=aANDb;ENDart2;必须与元件例化中的端口顺序一致LIBRARYIEEE;--1位二进制全加器顶层设计描述
USE
IEEE.STD_LOGIC_1164.ALL;ENTITYf_adderIS
PORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);
ENDf_adder;ARCHITECTUREart3OFf_adderIS
COMPONENTh_adder
PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;--元件声明
COMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALd,e,f:STD_LOGIC;
BEGINu1:h_adderPORT
MAP(ain,bin,d,e);u2:h_adderPORT
MAP(a=>e,b=>cin,co=>f,so=>sum);u3:or2aPORT
MAP(d,f,cout);--元件例化
ENDart3;VHDL举例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcount4IS
PORT(clk,x:INSTD_LOGIC;qout:OUTSTD_LOGIC
_VECTOR(1DOWNTO0);y:OUTSTD_LOGIC);ENDcount4;ARCHITECTUREbehvOFcount4IS
TYPE
stateIS(s0,s1,s2,s3);
SIGNALc_state,n_state:state;BEGIN
REG:
PROCESS(clk)
BEGIN
IF
(clk'EVENTandclk='1')THEN
c_state<=n_state;
ENDIF;
ENDPROCESS;4进制格雷码可逆计数器X=0时顺时针000111100/11/1s0s1s2s30/00/00/01/01/01/0COM:PROCESS
(c_state,x)BEGIN
CASEc_stateIS
WHENs0=>qout<=“00”;
IFx=‘0’THENn_state<=s1;y<=‘0’;
ELSE
n_state<=s3;
y<=‘1’;
ENDIF;
WHENs1=>qout<=“01”;
IFx=‘0’THEN
n_state<=s2;
y<=‘0’;
ELSE
n_state<=s0;
y<=‘0’;
ENDIF;000111100/11/1s0s1s2s30/00/00/01/01/01/0WHENs2=>qout<=“11”;
IFx=‘0’THENn_state<=s3;y<=‘0’;
ELSE
n_state<=s1;y<=‘0’;
ENDIF;
WHENs3=>qout<=“10”;
IFx=‘0’THEN
n_state<=s0;y<=‘1’;ELSE
n_state<=s2;y<=‘0’;
ENDIF;ENDcase;
ENDPROCESS;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学年级组长个人工作计划
- 大班下学期社会教案《户外活动计划及总结》
- 计划生育家庭奖励扶助年终总结
- 化工企业2025年上半年工作总结及下半年年工作计划
- 员工年度工作总结及明年工作计划的内容
- 妇幼医院某年年度工作计划
- 学校2025年消防安全工作计划
- 《大学英语听力应用教程(第1册)》课件-Unit 2 Private Schools
- 工会劳动合同法题目
- 《ERP的成本管理》课件
- 健康素养科普健康知识讲座-课件
- 电厂化学系统简介课件
- 挡土墙计算实例
- 《无机化学》第七章分子结构和晶体结构
- 医疗耗材配送服务方案
- 动物生物技术(课件)
- EPC总承包项目设计的总体安排与资源配置方案
- 浙江省温州市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 甲醇钠车间操作规范流程(碱法)
- 建材行业重大安全事故隐患检查表(根据2022版工贸行业重大生产安全事故隐患判定标准编制)
- 金属催化偶联反应(共30张)课件
评论
0/150
提交评论