《数字逻辑教学课件vhdl.ppt》由会员分享,可在线阅读,更多相关《数字逻辑教学课件vhdl.ppt(46页珍藏版)》请在三一办公上搜索。
1、5.5.3 VHDL语言的描述风格,三种描述风格:行为描述:使用功能描述 数据流(寄存器传输):使用布尔代数式描述 结构描述:模块间的连接关系描述,5.5.4 基本逻辑电路的VHDL设计,一、组合电路,原则1:在process中用到的所有输入信号都出现在敏感信号列表中;原则2:电路的真值表必须在代码中完整的反映出来。(否则会生成锁存器),1.三态门及总线缓冲器,指定大写“Z”表示高阻态 a=Z;a_bus=“ZZZZZZZZ”;,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.all;ENTITY tri_gate IS port(din,en:IN std_logi
2、c;dout:OUT std_logic);END tri_gate;ARCHITECTURE art OF tri_gate IS BEGIN PROCESS(din,en)BEGIN IF(en=0)then dout=din;ELSE dout=Z;END IF;END PROCESSEND art;,8位数据总线?,2.8:3优先编码器,GS,library ieee;use ieee.std_logic_1164.all;ENTITY priencoder isPORT(din:IN STD_LOGIC_VECTOR(7 downto 0);ei:IN STD_LOGIC;yout:
3、OUT STD_LOGIC_VECTOR(2 downto 0);eo,gs:OUT STD_LOGIC);END priencoder;ARCHITECTURE cod74148 OF priencoder ISBEGIN PROCESS(ei,din)BEGIN IF(ei=1)THEN yout=111;eo=1;gs=1;ELSE,IF(din(7)=0)THEN yout=000;eo=1;gs=0;,ELSIF(din(6)=0)THEN yout=001;eo=1;gs=0;ELSIF(din(5)=0)THEN yout=010;eo=1;ELSIF(din(0)=0)THEN
4、 yout=111;eo=1;gs=0;ELSE yout=111;eo=0;gs=1;END IF;END IF;END PROCESS;END cod74148;,触发器、寄存器、计数器、分频器、节拍发生器、状态机等。,二、时序逻辑电路设计,时钟上升沿:(clockevent and clock=1)时钟下降沿:(clockevent and clock=0),进程的敏感信号是时钟信号,在进程内部用if 语句描述时钟的边沿条件。,敏感信号表的特点:1)敏感信号表中只有时钟信号同步复位等。如:process(clk)begin if(clkevent and clk=1)then if re
5、set=1 then data=“00”;else data=in_data;end if;end if;end process;,同步复位,同步复位2D触发器,2)敏感信号表中除时钟外,还有其它信号异步操作 例:process(clk,reset)begin if reset=1 then data=“00”;elsif(clkevent and clk=1)then data=in_data;end if;end process;,同步、异步区别:敏感信号表、语句顺序,对于判断时钟电路边沿,后没有“else”语句。,2)计数器,描述计数器(std_logic_vector),要用到中间信号
6、和标准的程序包:IEEE.STD_LOGIC_UNSIGNED,library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter10 is Port(clk:in std_logic;load:in std_logic;din:in std_logic_vector(3 downto 0);qout:out std_logic_vector(3 downto 0);c:out std_logic);end counter10;,例:异步置数(低有效)的10进制计数器。,architec
7、ture art of counter10 is signal temp:std_logic_vector(3 downto 0);begin,process(clk,load,din)begin if(load=0)then temp=din;elsif(clkevent and clk=1)then if(temp=“1001“)then temp=0000;else temp=temp+1;end if;end if;end process;qout=temp;c=1 when temp=“1001”else 0;,end art;,为描述计数过程,定义中间信号。,-if(temp=9)
8、then,-when temp=9 else,process(clk,reset,din)begin if(load=0)then temp=din;elsif(clkevent and clk=1)then if(temp=9)then temp=0000;c=1;else temp=temp+1;c=0;end if;end if;end process;qout=temp;End art,if(clkevent and clk=1)then if(temp=m-1)then temp=0000;else temp=temp+1;end if;end if;end process;q=te
9、mp;c=1 when temp=m-1 else 0;,例:六十进制(分、秒)计数器,library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock60 is Port(clk:in std_logic;clr:in std_logic;s1:out std_logic_vector(3 downto 0);s10:out std_logic_vector(2 downto 0);co:out std_logic);end clock60;,architecture art of cl
10、ock60 is signal s1_temp:std_logic_vector(3 downto 0);signal s10_temp:std_logic_vector(2 downto 0);,与一般二进制计数器不同,分个位十位显示,为分、秒计数,begin,process(clk,clr)begin if(clr=1)then s1_temp=“0000”;s10_temp=“000”;elsif(clkevent and clk=1)then if(s1_temp=9)then s1_temp=0000;if(s10_temp=5)then s10_temp=“000”;else s1
11、0_temp=s10_temp+1;end if;else s1_temp=s1_temp+1;end if;end if;end process;,s1=s1_temp;s10=s10_temp;co=1 when(s10_temp=5 and s1_temp=9)else 0;End art;,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY add IS PORT(clk,x,y:IN STD_LOGIC;qout:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)
12、;co:OUT STD_LOGIC);END add;ARCHITECTURE behv OF add Is SIGNAL con:std_logic_vector(1 downto 0);SIGNAL temp:std_logic_vector(2 downto 0);SIGNAL m:integer range 7 downto 0;BEGIN PROCESS(x,y)begin con m m m m=7;END case;END process;,模可控计数器(由输入x,y控制),M=3,4,6,7,PROCESS(clk,m)begin if(clkevent and clk=1)t
13、hen if(temp=m-1)then temp=000;else temp=temp+1;END IF;END IF;END PROCESS;qout=temp;co=1 when temp=m-1 else 0;END behv;,M=3,4,6,7,例:设计5000分频器,library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity fp is Port(clk:in std_logic;clkout:out std_logic);end fp;,architecture art of fp is signal temp:integer range 0
14、 to 4999;Begin process(clk),begin if(clkevent and clk=1)then if(temp=4999)then temp=0;else temp=temp+1;end if;end if;end process;clkout=1 when(temp2500)else 0;end art;,(占空比50),例:8位环形移位寄存器(左、右移、异步置数),library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity shfrt is Port(clk,load,con:in std_logic;din:in std_lo
15、gic_vector(7 downto 0);qout:out std_logic_vector(7 downto 0);end shfrt;,architecture art of shfrt is signal q_temp:std_logic_vector(7 downto 0);begin,process(clk,load,din)begin if load=1 then q_temp=din;elsif(clkevent and clk=1)then if con=1 then q_temp=q_temp(6 downto 0),End process;qout=q_temp;End
16、 art;,例:环型顺序脉冲发生器(4位),library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity index is Port(clk,ld:in std_logic;y:out std_logic_vector(3 downto 0);end index;,architecture art of index is signal q:std_logic_vector(3 downto 0);begin,process(clk)begin if(clkevent and clk=1)then if ld=0 then q=“1000”;else q=q(0
17、),End art;,3)状态机,用户自定义数据类型,利用用户自定义数据类型枚举类型实现。,type 数据类型名 is 数据类型定义(枚举);,语法格式:,综合器自动实现枚举类型元素的编码,type statetype is(s0,s1,s2,s3);signal present_state,next_state:statetype;,type week is(sun,mon,tue,wed,thu,fri,sat);Signal day:week;,day=sun;,present_state=S0;,状态机整体描述结构和输出的描述,组合进程:描述状态逻辑、输出逻辑;时序进程:描述从次态到现
18、态转换;两段式有限状态机,状态转移的描述,CASE 现态 IS WHEN 表达式值1=顺序处理语句11;语句12;WHEN 表达式值3=顺序处理语句31;语句32;END CASE;,Moore 型状态机的描述,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY moore IS PORT(clk,x:IN STD_LOGIC;y:OUT STD_LOGIC);END moore;ARCHITECTURE behv OF moore IS TYPE State IS(s0,s1,s2,s3);SIGNAL current_state,next_sta
19、te:State;BEGIN,第一进程,完成状态转换,必须饱含时钟敏感信号,REG:PROCESS(clk)BEGIN IF(clkEVENT and clk=1)THEN current_state=next_state;END IF;END PROCESS;,COM:PROCESS(current_state,x)BEGIN CASE current_state IS WHEN s0=y y y=0;IF x=0 THEN next_state=s3;ELSE next_state=s2;END if;,第二进程:输出和状态逻辑间关系,必须包含现态、输入等敏感信号,WHEN s3=y=0;
20、IF x=0 THEN next_state=s1;ELSE next_state=s0;END IF;END CASE;END process;END behy;,摩尔型,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mealy IS PORT(clk,x:IN STD_LOGIC;y:OUT STD_LOGIC);END mealy;ARCHITECTURE behv OF mealy IS TYPE state IS(s0,s1,s2,s3);SIGNAL current_state,next_state:state;BEGIN REG:
21、PROCESS(clk)BEGIN IF(clkEVENT and clk=1)THEN current_state=next_state;END IF;END PROCESS;,Mealy型有限状态机的设计,1/0,COM:PROCESS(current_state,x)BEGIN CASE current_state IS WHEN s0=IF x=0 THEN next_state IF x=0 THEN next_state=s0;y=0;ELSE next_state=s2;y=0;END IF;,1/0,WHEN s2=IF x=0 THEN next_state IF x=0 T
22、HEN next_state=s0;y=0;ELSE next_state=s3;y=1;END IF;END case;END PROCESS;END behv;,1/0,5.5.4 VHDL的层次化(结构化)设计与元件例化(component)语句,在多层次的设计中,高层次的设计模块调用低层次的设计模块,构成模块化的设计。重点描述模块间的连接关系。,由元件声明、元件例化两部分关键语句组成。,被例化元件的来源:VHDL设计实体;其它HDL设计实体;厂商提供的工艺库中的元件、IP核。,层次化设计的优点:分工共享移植周期短,一个元件是一段结构完整的常用代码,包括声明,实体和结构体,使用compo
23、nent可以使代码具有层次化的结构。,1.元件声明:在结构体说明区中对所调用的低层次的实体模块(名称、端口类型等)声明为元件。,2.元件例化:将低层次元件调用、安装到当前层次。给出连接映射。,COMPONENT 元件名 PORT(端口名表);END COMPONENT;,例化名:低层元件名 PORT MAP(端口列表);,语法格式:,语法格式:,端口列表:低层端口名=当前名称(或,直接位置映射),一位全加器的原理图,LIBRARY IEEE;-或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a IS PORT(a,b:IN STD_LOGIC;c:OU
24、T STD_LOGIC);END or2a;ARCHITECTURE art1 OF or2a IS BEGIN c=a OR b;END art1;,LIBRARY IEEE;-半加器描述USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END adder;ARCHITECTURE art2 OF adder is BEGIN so=a XOR b;co=a AND b;END art2;,必须与元件例化中的端口顺序一致,LIBRARY IEEE;-1位二进制全加器
25、顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin:IN STD_LOGIC;cout,sum:OUT STD_LOGIC);END f_adder;ARCHITECTURE art3 OF f_adder IS COMPONENT h_adder PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END COMPONENT;元件声明 COMPONENT or2a PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;S
26、IGNAL d,e,f:STD_LOGIC;BEGIN u1:h_adder PORT MAP(ain,bin,d,e);u2:h_adder PORT MAP(a=e,b=cin,co=f,so=sum);u3:or2a PORT MAP(d,f,cout);元件例化 END art3;,VHDL 举例,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY count4 IS PORT(clk,x:IN STD_LOGIC;qout:OUT STD_LOGIC _VECTOR(1 DOWNTO 0);y:OUT STD_LOGIC);END coun
27、t4;ARCHITECTURE behv OF count4 IS TYPE state IS(s0,s1,s2,s3);SIGNAL c_state,n_state:state;BEGIN REG:PROCESS(clk)BEGIN IF(clkEVENT and clk=1)THEN c_state=n_state;END IF;END PROCESS;,4进制格雷码可逆计数器 X=0时顺时针,COM:PROCESS(c_state,x)BEGIN CASE c_state IS WHEN s0=qout qout=“01”;IF x=0 THEN n_state=s2;y=0;ELSE
28、n_state=s0;y=0;END IF;,WHEN s2=qout qout=“10”;IF x=0 THEN n_state=s0;y=1;ELSE n_state=s2;y=0;END IF;END case;END PROCESS;END behv;,可编程逻辑器件器件的开发流程,开发工具,三、软件设计流程,VHDL文本编辑(或图形输入)输入、编译,综合,FPGA/CPLD编程下载,FPGA/CPLD器件和电路系统,时序与功能仿真,修改,FPGA/CPLD适配,逻辑综合器,结构综合器,功能仿真,时序仿真,计算机打印口,下载电缆,CPLD/FPGA适配板或含CPLD/FPGA数字系统板
29、,四.下载芯片(编程),8个彩灯,4花样自动切换的彩灯控制器:第1:从右到左,然后从左到右逐次点亮,再全黑;第2:两边同时亮1个逐次向中间移动再散开;第3:两边同时亮2个逐次向中间移动再散开;第4:每三个亮、每四个亮、间隔亮。共32个种变换,循环往复。,Library ieee;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;entity caideng isPort(clk:in std_logic;q:out std_logic_vector(7 downto 0);end;architecture art of caideng issignal s:std_logic_vector(4 downto 0);,Begin process(clk)begin if clkevent and clk=1 then if s=31 then sqqqqqqqq=10000000;,when 01000=qqqqqqqqqqqqqqqqqqq=00111100;,when 11011=qqqqqnull;end case;end process;End art;,
链接地址:https://www.31ppt.com/p-5984847.html