第3章VHDL基础3.1VHDL基本语法3.1.1组合电路描述回mux21aaySbsD图3-1mux2la实体图3-2mux21a结构体【例3-1】]ENTITY mux21a ISPORT(a, b:IN BIT;S:INBIT:y:OUT BITOEND ENTITY mux21a;ARCHITECTUREoneOFmux21a ISBEGINy<=a WHEN s=''ELSEbENDARCHITECTUREone;【例3-2】ENTITYmux21aISPORT(a, b, s: IN BIT;y:OUTBIT ),ENDENTITY mux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e: BIT;BEGINd<=aAND (NOT S);e<=bAND s; y<=d OReENDARCHITECTURE one;【例3-3]ENTITY mux21a ISPORT(a, b,S:INBIT:y : OUT BITO.END ENTITY mux21a;ARCHITECTUREoneOFmux2laISBEGINPROCESS (a,b,s)BEGIN
1 第 3 章 VHDL 基础 3.1 VHDL 基本语法 3.1.1 组合电路描述 【例 3-1】 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 ; 【例 3-2】 ENTITY mux21a IS PORT ( a, b, s: IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ; END ARCHITECTURE one ; 【例 3-3】 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 图 3-1 mux21a 实体 图 3-2 mux21a 结构体
IFs='O'THENy<=a; ELSEy<=b;END IF:END PROCESS;ENDARCHITECTUREone;5.12us10.24 us15.36us25.6us30.72upps20.48usHame22.089688usIDB1aDB1bDDBY图3-3mux21a功能时序波形3.1.2VHDL结构1.实体表达【例3-4】ENTITYe_nameISPORT(p_name:port_mdata_type;,data_type );p_namei:port_miEND ENTITY e_name;2.实体名3.端口语句和端口信号名4.端口模式“IN”“OUT”“INOUT”“BUFFER”5.数据类型6.结构体表达【例3-5】ARCHITECTUREarchnameOFenameIS[说明语句]BEGIN(功能描述语句)ENDARCHITECTUREarchname;7.赋值符号和数据比较符号IF a THEN ...注意,a的数据类型必须是booleanIF (s1=0')AND(s2=1)OR(c<b+1) THEN..8.逻辑操作符AND(与)OR(或)NAND(与非)NOR(或非)XOR(异或)、XNOR(同或)和NOT(取反)2
2 IF s = '0' THEN y <= a ; ELSE y <= b ; END IF; END PROCESS; END ARCHITECTURE one ; 3.1.2 VHDL 结构 1. 实体表达 【例 3-4】 ENTITY e_name IS PORT ( p_name : port_m data_type; . p_namei : port_mi data_type ); END ENTITY e_name; 2. 实体名 3. 端口语句和端口信号名 4. 端口模式 “IN”、“OUT”、“INOUT”、“BUFFER” 5. 数据类型 6. 结构体表达 【例 3-5】 ARCHITECTURE arch_name OF e_name IS [说明语句] BEGIN (功能描述语句) END ARCHITECTURE arch_name ; 7. 赋值符号和数据比较符号 IF a THEN . - 注意,a 的数据类型必须是 boolean IF (s1='0')AND(s2='1')OR(c<b+1) THEN . 8. 逻辑操作符 AND(与)、OR(或)、NAND(与非)、NOR(或非)、XOR(异或)、XNOR(同或)和 NOT(取 反) 图 3-3 mux21a 功能时序波形
BIT、BOOLEAN、STDLOGIC9.条件语句10.WHENELSE条件信号赋值语句赋值目标<=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE表达式;z<=aWHENpl='I'ELSEb WHEN p2='1'ELSEc11.进程语句和顺序语句IF THEN ELSE ENDIF:PROCESS...ENDPROCESS12.文件取名和存盘".vhd"adder f.vhd3.2时序电路描述3.2.1D触发器【例3-6】LIBRARYIEEE:USE IEEE.STD LOGIC_1164.ALL;ENTITYDFF1ISPORT (CLK : IN STD LOGIC;D:IN STD LOGIC:Q:OUT STD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQI:STDLOGIC;--类似于在芯片内部定义一个数据的暂存节点BEGINPROCESS (CLK,Q1)BEGINIFCLK'EVENTANDCLK='ITHEN QI <=D;END IF;END PROCESS ;Q<=Q1;-将内部的暂存数据向端口输出(双横线--是注释符号)ENDbhv,QDDDFF1图3-4D触发器3.2.2时序描述VHDL规则3
3 BIT、BOOLEAN、STD_LOGIC 9. 条件语句 10. WHEN_ELSE 条件信号赋值语句 赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE . 表达式 ; z <= a WHEN p1 = '1' ELSE b WHEN p2 = '1' ELSE c ; 11. 进程语句和顺序语句 IF_THEN_ELSE_END IF; PROCESS. END PROCESS 12. 文件取名和存盘 “.vhd” adder_f.vhd 3.2 时序电路描述 3.2.1 D 触发器 【例 3-6】 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 ; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK,Q1) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= D ; END IF; END PROCESS ; Q <= Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号) END bhv; 图 3-4 D 触发器 3.2.2 时序描述 VHDL 规则
1.标准逻辑位数据类型STDLOGICBIT数据类型定义:TYPE BITIS(O',1');,--只有两种取值STDLOGIC数据类型定义:TYPESTDLOGICIS(U,X,O,T,Z,W,L,H-)--有9种取值STDLOGIC所定义的9种数据的含义是:“U’表示未初始化的;“0’表示强逻辑0;“X”表示强未知的;“W”表示弱未知的;1表示强逻辑1;“Z'表示高阻态;“’表示忽略。L'表示弱逻辑0;‘H’表示弱逻辑1;2.设计库和标准程序包LIBRARY WORK;LIBRARY STD ;USE STD.STANDARD.ALL;LIBRARY<设计库名>;USE<设计库名><程序包名>.ALL;LIBRARY IEEE;USEIEEE.STDLOGIC1164.ALL;3.信号定义和数据对象4.上升沿检测表式和信号属性函数EVENT<信号名>'EVENT5.不完整条件语句与时序电路【例3-7】ENTITYCOMP BADISPORT(al, bl:INBIT),qlOUTBITEND;ARCHITECTURE one OF COMP BAD ISBEGINPROCESS (al,bl)BEGINIF al>blTHENql <='1':ELSIFa1<b1 THENql<='o";--未提及当al=b1时,ql作何操作END IF:END PROCESS ;END ;[61latrsOORSa1q15q1q1_1图3-5例3-7的电路图【例3-8】a14
4 1. 标准逻辑位数据类型 STD_LOGIC BIT 数据类型定义: TYPE BIT IS('0','1'); -只有两种取值 STD_LOGIC 数据类型定义: TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','-'); -有 9 种取值 STD_LOGIC 所定义的 9 种数据的含义是: ‘U’表示未初始化的; ‘X’表示强未知的; ‘0’表示强逻辑 0; 1’表示强逻辑 1; ‘Z’表示高阻态; ‘W’ 表示弱未知的; L’表示弱逻辑 0; ‘H’表示弱逻辑 1; ‘-’表示忽略。 2. 设计库和标准程序包 LIBRARY WORK ; LIBRARY STD ; USE STD.STANDARD.ALL ; LIBRARY <设计库名>; USE < 设计库名>.<程序包名>.ALL ; LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; 3. 信号定义和数据对象 4. 上升沿检测表式和信号属性函数 EVENT <信号名>'EVENT 5. 不完整条件语句与时序电路 【例 3-7】 ENTITY COMP_BAD IS PORT( a1,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 ; 图 3-5 例 3-7 的电路图 【例 3-8】
IF al>blTHENql<=T:ELSEql <='0'; END IF;...b1q1a1图3-6例3-8的电路图3.2.3时序电路的不同表述【例3-9】PROCESS (CLK)BEGINIFCLK'EVENTAND (CLK=1)AND (CLK'LAST_VALUE=0)THEN--确保CLK的变化是一次上升沿的跳变O<=D:END IF;END PROCESS ;【例3-10】PROCESS (CLK)BEGINIF CLK=1'ANDCLK'LAST VALUE=O'--同例3-9THEN Q<=D;END IF:;ENDPROCESS;【例3-11]LIBRARYIEEE;USE IEEE.STD LOGIC 1164.ALL;ENTITY DFF3ISPORT(CLK, D:IN STD LOGIC;Q:OUT STD LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNAL QI : STD LOGIC;BEGINPROCESS (CLK)BEGINIFrising_edge(CLK)--必须打开STD_LOGIC_1164程序包THENQ1 <= D;END IF;ENDPROCESSQ<=Q1 ,--在此,赋值语句可以放在进程外,作为并行赋值语句END;5
5 IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; . 图 3-6 例 3-8 的电路图 3.2.3 时序电路的不同表述 【例 3-9】 . PROCESS (CLK) BEGIN IF CLK'EVENT AND (CLK='1') AND (CLK'LAST_VALUE='0') THEN Q <= D ; -确保 CLK 的变化是一次上升沿的跳变 END IF; END PROCESS ; 【例 3-10】 . PROCESS (CLK) BEGIN IF CLK='1' AND CLK'LAST_VALUE='0' -同例 3-9 THEN Q <= D ; END IF; END PROCESS ; 【例 3-11】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT (CLK,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) - 必须打开 STD_LOGIC_1164 程序包 THEN Q1 <= D ; END IF; END PROCESS ; Q <= Q1 ; -在此,赋值语句可以放在进程外,作为并行赋值语句 END ;