
EDA技术实用教程:第四章《vhdl设计初步》课件.ppt
76页EDAEDA技术技术实用教程实用教程第第4 4章章 Very high speed integrated Hardware Description Language (VHDL)y是IEEE、工业标准硬件描述语言y用语言的方式而非图形等方式描述硬件电路x容易修改x容易保存y特别适合于设计的电路有:x复杂组合逻辑电路,如: •译码器、编码器、加减法器、多路选择器、地址译码器…...x状态机x等等……..是什么是VHDL?A A A AD D D DLabz VHDL 描述y输入端口y输出端口y电路的行为和功能zVHDL有过两个标准:yIEEE Std 1076-1987 (called VHDL 1987)yIEEE Std 1076-1993 (called VHDL 1993)VHDL的功能和标准的功能和标准A A A AD D D DLab 简单组合电路的VHDL描述z多路选择器A A A AD D D DLab多路选择器的多路选择器的VHDL描述描述2选选1多路选择器多路选择器absymux21A A A AD D D DLab图图 mux21a功能时序波形功能时序波形多路选择器功能示意波形A A A AD D D DLab【例】ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ;END ENTITY mux21a ;ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE b ;END ARCHITECTURE one ;实体结构体2选选1多路选择器的多路选择器的VHDL描述描述实体A A A AD D D DLab实体(ENTITY)ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ;END ENTITY mux21a ;…实体实体名端口类型数据类型A A A AD D D DLab★ ★ 实体名实体名★ PORT★ PORT语句和端口信号名语句和端口信号名★ ★ 端口类型端口类型INOUTINOUTBUFFER★ ★ 数据类型:数据类型:BITBIT实体 相关VHDL语法A A A AD D D DLab【例【例】】ENTITY e_name IS PORT ( p_name : port_m data_type; ... p_namei : port_mi data_type );END ENTITY e_name;或:或:ENTITY e_name IS PORT ( p_name : port_m data_type; ... p_namei : port_mi data_type );END e_name;实体表达实体表达A A A AD D D DLab结构体(ARCHITECTURE)…ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE b ;END ARCHITECTURE one ;结构体结构体名VHDL功能描述实体名A A A AD D D DLab【例【例】】ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END ARCHITECTURE arch_name ;;或:或:ARCHITECTURE arch_name OF e_name IS (说明语句说明语句)BEGIN (功能描述语句功能描述语句)END arch_name ;;结构体表达结构体表达A A A AD D D DLab信号传输信号传输( (赋值赋值) )符号和数据比较符号符号和数据比较符号z信号传输信号传输( (赋值赋值) )符号符号: :y<=<=z数据比较符号数据比较符号: :y= , < , >= , < , >A A A AD D D DLabWHEN_ELSEWHEN_ELSE条件信号赋值语句条件信号赋值语句赋值目标赋值目标 <= 表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE ... 表达式表达式 ;;y <= a WHEN s = '0' ELSE b ;A A A AD D D DLab【例例】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGINd <= a AND (NOT S) ;e <= b AND s ;y <= d OR e ; END ARCHITECTURE one ;【例【例】】 . . . ARCHITECTURE one OF mux21a IS BEGIN y <= (a AND (NOT s)) OR (b AND s) ; END ARCHITECTURE one;2选选1多路选择器的多路选择器的VHDL描述(其它)描述(其它)A A A AD D D DLab逻辑操作符逻辑操作符VHDLVHDL的逻辑操作符直接用文字来表示:的逻辑操作符直接用文字来表示:如:如:AND AND ---------- 与与OROR---------- 或或NOTNOT---------- 非非XORXOR---------- 异或异或……A A A AD D D DLab【例【例】】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a IS BEGIN PROCESS (a,b,s) BEGIN IF s = '0' THEN y <= a ; ELSE y <= b ; END IF; END PROCESS;END ARCHITECTURE one ;2选选1多路选择器的多路选择器的VHDL描述(其它)描述(其它)A A A AD D D DLabIF_THENIF_THEN条件语句条件语句IF s = '0' THENy <= a ; ELSE y <= b ;END IF;A A A AD D D DLabPROCESSPROCESS进程语句进程语句在下一节详细讲述,请课后预习A A A AD D D DLab数据类型信号赋值符条件比较符实体结构体端口定义端口模式逻辑操作符IF条件语句WHEN条件语句VHDL设计的基本概念和语句小节设计的基本概念和语句小节A A A AD D D DLabyGraphic is what you draw is what you getx“ tell me what hardware you want and I will give it to you”yVHDL is what you write is what functional you getx“ tell me how your circuit should behave and the VHDL compiler will give you the hardware that does the job”x but the designer can not control how the circuit implement原理图输入与 VHDL文本输入设计的区别A A A AD D D DLabzEasy to ModifyzIt is more powerful than GraphiczVHDL is a portable language becauseyis device independentythe same code can be applied to Device manufactured by Company A or Company B Why using VHDL instead of GraphicA A A AD D D DLabzVHDL: “tell me how your circuit should behave and I will give you hardware that does the job”zABEL, PALASM, AHDL:•“tell me what hardware you want and I will give it to you”VHDL Synthesis vs. other HDLs SynthesisA A A AD D D DLab寄存器描述及其寄存器描述及其VHDL语言现象语言现象D触发器A A A AD D D DLab【例】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC );END DFF1;ARCHITECTURE bhv OF DFF1 ISBEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ; END bhv;D触发器触发器D触发器的触发器的VHDL描述描述标准逻辑位进程体边沿检测库与程序包声明A A A AD D D DLab设计库设计库((LIBRARY))z格式:yLIBRARY <设计库名>zIEEE标准库:yLIBRARY IEEEz默认加载的设计库ySTD标准库yWORK工作库(当前设计)A A A AD D D DLab程序包的使用(程序包的使用(USE))z格式:yLIBRARY <设计库名>;yUSE <设计库名>.<程序包名>.ALL;zIEEE标准库中的STD_LOGIC_1164:z含STD_LOGIC及STD_LOGIC_VECTOR的定义zIEEE 1164A A A AD D D DLabSTD_LOGICzBIT数据类型的定义:zTYPE BIT IS (‘0’,’1’);zSTD_LOGIC数据类型:y(‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’) 九值逻辑STD_LOGIC所定义的9种数据的含义是::‘‘U’U’表示未初始化的;表示未初始化的; ‘ ‘X’X’表示强未知的;表示强未知的; ‘0’ ‘0’表示强表示强逻辑逻辑0 0;; ‘1’ ‘1’表示强逻辑表示强逻辑1 1;; ‘ ‘Z’Z’表示高阻态;表示高阻态; ‘‘W’ W’ 表示弱未知的;表示弱未知的; ‘ ‘L’L’表示弱逻辑表示弱逻辑0 0;; ‘ ‘H’H’表示弱表示弱逻辑逻辑1 1;; ‘-’ ‘-’表示忽略。
表示忽略A A A AD D D DLabSTD_LOGIC的综合器支持对于STD_LOGIC类型,综合器只支持‘X’(或‘-’),‘0’,‘1’,‘Z’A A A AD D D DLab上升沿检测上升沿检测zCLK’EVENT AND CLK = ‘1’z信号属性EVENTy<信号名>‘EVENTz函数yRISING_EDGE(CLK)A A A AD D D DLab比较用5种不同语句的D触发器VHDL程序Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)beginif clk='1' AND clk’last_value='0' then q1 <= d; end if;end process; q <= q1 ;end test1_body;A A A AD D D DLabLIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q <= d;end process; end if;end test1_body;A A A AD D D DLabEntity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = ‘1’) then q1 <= d; end if;end process; q <= q1 ;end body;A A A AD D D DLabEntity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocessbegin wait until (clk’event and clk=‘1’); q <= d;end process;end body;A A A AD D D DLabEntity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if clk='1' AND clk’last_value='0' then q1 <= d; end if;end process; q <= q1 ;end test1_body;LIBRARY IEEE;USE IEEE.std_logic_1164.all;Entity test1 isport (clk, d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocess (clk,d)begin if rising_edge(clk) then q <= d; end if;end process;end test1_body;Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 isbeginprocessbegin wait until (clk’event and clk=‘1’); q <= d;end process;end body;Entity test1 isport (clk : in bit; d : in bit; q : out bit);end test1;architecture body of test1 issignal q1 : bit ;beginprocess (clk)begin if (clk = ‘1’) then q1 <= d; end if;end process;q <= q1 ;end body;5种不同语句的D触发器VHDL程序A A A AD D D DLab信号(SIGNAL)z连线zwirez寄存器输出zregisterA A A AD D D DLab进程(PROCESS)z敏感信号z进程体z顺序语句z并行语句A A A AD D D DLabHow Many Registers?ENTITY reg1 ISPORT ( d : in BIT;clk : in BIT;q: out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clk='1' AND clk’event THENa <= d;b <= a;q <= b;END IF;END PROCESS;END reg1;寄存器有多少个?寄存器有多少个?A A A AD D D DLab综合后示意:A A A AD D D DLab【例【例】】ENTITY COMP_BAD IS PORT( a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_BAD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1' ; ELSIF a1 < b1 THEN q1 <= '0' ;-- 未提及当未提及当a1=b1时,时,q1作何操作作何操作END IF; END PROCESS ;END ;不完整条件语句与时序电路不完整条件语句与时序电路A A A AD D D DLab图图 例例3-11的电路图的电路图综合结果:综合结果:A A A AD D D DLab【例例】】ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE one OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; END PROCESS ; END 图图 例例3-12的电路图的电路图完整条件语句完整条件语句A A A AD D D DLab【例【例】】...PROCESS (CLK) BEGINIF CLK'EVENT AND (CLK='1') AND (CLK'LAST_VALUE='0') THEN Q <= D ; --确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF; END PROCESS ;【例【例】】...PROCESS (CLK) BEGINIF CLK='1' AND CLK'LAST_VALUE='0' --同例同例3-13 THEN Q <= D ; END IF; END PROCESS ;3.2.3 实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式A A A AD D D DLab【例【例】】LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN PROCESS (CLK) BEGIN IF rising_edge(CLK) -- CLK的数据类型必须是的数据类型必须是STD_LOGIC THEN Q1 <= D ; END IF; Q <= Q1 ; END PROCESS ; END ;实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式A A A AD D D DLab【【例】】 ... PROCESS BEGIN wait until CLK = '1' ; --利用利用wait语句语句 Q <= D ; END PROCESS;【例】】... PROCESS (CLK) BEGIN IF CLK = '1' THEN Q <= D ; --利用进程的启动特性产生对利用进程的启动特性产生对CLK的边沿检测的边沿检测 END IF; END PROCESS ;【【例】】... PROCESS (CLK,,D) BEGIN IF CLK = '1' --电平触发型寄存器电平触发型寄存器 THEN Q <= D ; END IF; END PROCESS ;实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式A A A AD D D DLab图图 边沿型触发器时序波形边沿型触发器时序波形图图 电平触发型寄存器的时序波形电平触发型寄存器的时序波形实现时序电路的实现时序电路的VHDL不同表达方式不同表达方式A A A AD D D DLab... ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL Q1,Q2 : STD_LOGIC; BEGINPRO1: PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK='1' THEN Q1 <= NOT (Q2 OR A); END IF; END PROCESS ;PRO2:PROCESS (Q1) BEGIN IF Q1'EVENT AND Q1='1' THEN Q2 <= D; END IF; <= Q2 ; END PROCESS ; 图图 例例3-19综合的电路综合的电路异步时序电路设计异步时序电路设计A A A AD D D DLab数据类型数据对象信号属性时钟检测VHDL库程序包时序电路异步时序VHDL设计基本概念和语言现象小节设计基本概念和语言现象小节A A A AD D D DLab 含有层次结构的VHDL描述z以下通过一个全加器的设计流程,介绍含有层次结构的VHDL程序,其中包含两个重要的语句,元件调用声明语句和元件例化语句。
A A A AD D D DLab图图 半加器半加器h_adder电路图电路图图图 全加器全加器f_adder电路图电路图 1位二进制全加器的位二进制全加器的VHDL设计设计A A A AD D D DLababsoco0000011010101101表表4-1 半加器半加器h_adder逻辑功能真值表逻辑功能真值表1. 1. CASECASE语句语句CASE语句的一般表式是:语句的一般表式是:CASE <表达式表达式> ISWhen <选择值或标识符选择值或标识符> => <顺序语句顺序语句>; ... ; <顺序语句顺序语句> ;;When <选择值或标识符选择值或标识符> => <顺序语句顺序语句>; ... ; <顺序语句顺序语句> ;;...END CASE ;;半加器描述和半加器描述和CASE语句语句A A A AD D D DLab2. 2. 标准逻辑矢量数据类型标准逻辑矢量数据类型STD_LOGIC_VECTORSTD_LOGIC_VECTOR3. 3. 并置操作符并置操作符 以下是一些并置操作示例:以下是一些并置操作示例:SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; ...a <= '1' '0' d(1) '1' ; -- 元素与元素并置,并置后的数组长度为元素与元素并置,并置后的数组长度为4 ...IF a d = "101011" THEN ... –- 在在IF条件句中可以使用并置符条件句中可以使用并置符 在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;; 或或 SIGNAL A ::STD_LOGIC_VECTOR(1 TO 4)半加器描述和半加器描述和CASE语句语句A A A AD D D DLab【例】 LIBRARY IEEE ;--或门逻辑描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY or2a IS PORT (a, b :IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECTURE one OF or2a IS BEGIN c <= a OR b ; END ARCHITECTURE fu1;【例】LIBRARY IEEE; --半加器描述(1)USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY adder; ARCHITECTURE fh1 OF adder is BEGIN so <= NOT(a XOR (NOT b)) ; co <= a AND b ; END ARCHITECTURE fh1; 半加器描述和半加器描述和CASE语句语句A A A AD D D DLab【例】LIBRARY IEEE; --半加器描述(2)USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ;BEGIN abc <= a & b ; PROCESS(abc) BEGIN CASE abc IS WHEN "00" => so<='0'; co<='0' ; WHEN "01" => so<='1'; co<='0' ; WHEN "10" => so<='1'; co<='0' ; WHEN "11" => so<='0'; co<='1' ; WHEN OTHERS => NULL ; END CASE; END PROCESS;END ARCHITECTURE fh1 ;A A A AD D D DLab【例】 ... --半加器描述(3) SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc <= a & b ; co <= cso(1) ; so <= cso(0) ; PROCESS(abc) BEGIN CASE abc IS WHEN "00" => cso<="00" ; WHEN "01" => cso<="01" ; WHEN "10" => cso<="01" ; WHEN "11" => cso<="10" ; END CASE; END PROCESS;END ARCHITECTURE fh1;A A A AD D D DLab【例】 LIBRARY IEEE; --1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 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;SIGNAL d,e,f : STD_LOGIC; BEGIN u1 : h_adder PORT MAP(a=>ain,b=>bin,co=>d,so=>e); u2 : h_adder PORT MAP(a=>e, b=>cin, co=>f,so=>sum); u3 : or2a PORT MAP(a=>d, b=>f, c=>cout); END ARCHITECTURE fd1;A A A AD D D DLab 元元件件例例化化语语句句由由两两部部分分组组成成,,第第一一部部分分是是对对一一个个现现成成的的设设计计实实体体定定义义为为一一个个元元件件,,语语句句的的功功能能是是对对待待调调用用的的元元件件作作出出调调用用声声明明,,它它的的最最简简表达式如下所示:表达式如下所示: COMPONENT 元件名元件名 IS PORT (端口名表端口名表) ;; END COMPONENT 文件名文件名 ;; 元元件件例例化化语语句句的的第第二二部部分分则则是是此此元元件件与与当当前前设设计计实实体体(顶顶层层文文件件)中中元件间及端口的连接说明。
语句的表达式如下:元件间及端口的连接说明语句的表达式如下: 例化名例化名 : 元件名元件名 PORT MAP( [端口名端口名 =>] 连接端口名连接端口名,...);全加器描述和例化语句全加器描述和例化语句A A A AD D D DLab全加器描述z LIBRARY IEEE; --1位二进制全加器顶层设计描述z USE IEEE.STD_LOGIC_1164.ALL;zUSE IEEE.STD_LOGIC_UNSIGNED.ALL;zENTITY adder ISz PORT (ain,bin,cin : IN STD_LOGIC;z cout,sum : OUT STD_LOGIC );z END ENTITY adder;z ARCHITECTURE RTL OF adder ISzSIGNAL ADDO : STD_LOGIC_VECTOR(1 DOWNTO 0); z BEGINz ADDO<= ‘0’&AIN+ BIN +CIN;zSUM<=ADDO(0);COUT<=ADDO(1);zEND ARCHITECTURE RTL;A A A AD D D DLab 计数器设计z【例3-20】zENTITY CNT4 IS z PORT ( CLK : IN BIT ; z Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; z END ; zARCHITECTURE bhv OF CNT4 ISz BEGIN z PROCESS (CLK) z BEGIN z IF CLK'EVENT AND CLK = '1' THEN z Q <= Q + 1 ; z END IF;z END PROCESS ;zEND bhv;A A A AD D D DLab4位加法计数器 z注意:表面上注意:表面上BUFFER具有双向端口具有双向端口INOUT的功能,但实际上其输入功能是不的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈完整的,它只能将自己输出的信号再反馈回来,并不含有回来,并不含有IN的功能。
的功能z建议:不使用建议:不使用BufferA A A AD D D DLab 整数类型z整数常量的书写方式示例如下:z1十进制整数z0十进制整数z35 十进制整数z10E3十进制整数,等于十进制整数1000z16#D9# 十六进制整数,等于十六进制整数D9Hz8#720# 八进制整数,等于八进制整数720Oz2#11010010# 二进制整数,等于二进制整数11010010 A A A AD D D DLabz自然数类型NATURAL z正整数类型POSITIVE z与BIT、BIT_VECTOR一样,数据类型INTEGER、NATURAL和POSITIVE都定义在VHDL标准程序包STANDARD中由于是默认打开的,所以在例3-20中,没有以显式打开STD库和程序包STANDARD A A A AD D D DLab 计数器设计的另一种表述z【【例例3-21】】z LIBRARY IEEE ; z USE IEEE.STD_LOGIC_1164.ALL ; z USE IEEE.STD_LOGIC_UNSIGNED.ALL ; z ENTITY CNT4 IS z PORT ( CLK : IN STD_LOGIC ; z Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; z END ; z ARCHITECTURE bhv OF CNT4 ISzSIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0);z BEGIN z PROCESS (CLK) z BEGIN z IF CLK'EVENT AND CLK = '1' THENz Q1 <= Q1 + 1 ; z END IF;z END PROCESS ;z Q <= Q1 ;z END bhv;A A A AD D D DLab图3-12 4位加法计数器RTL电路(Synplify综合)A A A AD D D DLab 4位加法计数器工作时序A A A AD D D DLab一般加法计数器设计z【】【】zLIBRARY IEEE;zUSE IEEE.STD_LOGIC_1164.ALL;zUSE IEEE.STD_LOGIC_UNSIGNED.ALL;zENTITY CNT10 ISz PORT (CLK,RST,EN : IN STD_LOGIC; z CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); zCOUT : OUT STD_LOGIC ); zEND CNT10;zARCHITECTURE behav OF CNT10 ISzBEGINz PROCESS(CLK, RST, EN)z VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); z A A A AD D D DLabzBEGINz IF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位计数器异步复位 z ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿检测时钟上升沿z IF EN = '1' THEN --检测是否允许计数(同步使能)检测是否允许计数(同步使能)z IF CQI < 9 THEN CQI := CQI + 1; --允许计数允许计数, 检测是否小于检测是否小于9 z ELSE CQI := (OTHERS =>'0'); --大于大于9,计数值清零,计数值清零 z END IF;z END IF;z END IF; z IF CQI = 9 THEN COUT <= '1'; --计数大于计数大于9,输出进位信号,输出进位信号z ELSE COUT <= '0';z END IF;z CQ <= CQI; --将计数值向端口输出将计数值向端口输出z END PROCESS;zEND behav;A A A AD D D DLabA A A AD D D DLabA A A AD D D DLab相关语法z1. 变量变量z变量变量VARIABLE与信号与信号SIGNAL一样,都一样,都属于数据对象,在此程序中的功能与信号属于数据对象,在此程序中的功能与信号相似。
但变量的赋值符号与信号的赋值符相似但变量的赋值符号与信号的赋值符号是不同的,信号的赋值符号是号是不同的,信号的赋值符号是“<=”,,而变量的赋值符号是而变量的赋值符号是“:= ”例如a为变量,为变量,对其赋值可以写为:对其赋值可以写为:a:= ’1’A A A AD D D DLabz2. 省略赋值操作符(OTHERS=>X)z CQI := "0000" zCQI:=(OTHERS=>’0’) z SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0);z VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0);z ... z d1 <= (OTHERS=>'0'); a1 := (OTHERS=>'0') ;A A A AD D D DLabzd2 <= (1=>'1',4=>'1',OTHERS=>'0') zd1 <= (1=>e(3),3=>e(5), OTHERS=>e(1) );A A A AD D D DLab 含并行置位的移位寄存器设计z【【例例3-23】】zLIBRARY IEEE;zUSE IEEE.STD_LOGIC_1164.ALL;zENTITY SHFRT IS -- 8位右移寄存器位右移寄存器z PORT ( CLK,,LOAD : IN STD_LOGIC; z DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);z QB : OUT STD_LOGIC );zEND SHFRT;zARCHITECTURE behav OF SHFRT ISz BEGINz A A A AD D D DLabzPROCESS (CLK, LOAD)z VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);z BEGINz IF CLK'EVENT AND CLK = '1' THENz IF LOAD = '1' THEN REG8 := DIN; --由(由(LOAD='1'))装载新数据装载新数据z ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); zEND IF;z END IF;z QB <= REG8(0); -- 输出最低位输出最低位z END PROCESS; zEND behav;A A A AD D D DLabA A A AD D D DLab自学第5章预习第6章。





![河南新冠肺炎文件-豫建科[2020]63号+豫建科〔2019〕282号](http://img.jinchutou.com/static_www/Images/s.gif)






