中国高校课件下载中心 》 教学资源 》 大学文库

《EDA技术》课程授课教案(讲稿)第3章 VHDL基础

文档信息
资源类别:文库
文档格式:PDF
文档页数:28
文件大小:746.53KB
团购合买:点击进入团购
内容简介
《EDA技术》课程授课教案(讲稿)第3章 VHDL基础
刷新页面文档预览

第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 ;

【例3-12】PROCESSBEGINWait until CLK='T'--利用wait语句Q<=D;ENDPROCESS;【例3-13】PROCESS (CLK)BEGINIF CLK='1'--利用进程的启动特性产生对CLK的边沿检测THEN Q<=D;END IF;ENDPROCESSCLKDQ【例3-14】PROCESS (CLK. D))BEGINIF CLK='1'--电平触发型寄存器THEN Q<=D;END IF;END PROCESS ;CLKDQ图3-8例3-14的时序波形全加器的VHDL描述3.3半加器描述3.3.16

6 【例 3-12】 . PROCESS BEGIN wait until CLK = '1' ; -利用 wait 语句 Q <= D ; END PROCESS; 【例 3-13】 . PROCESS (CLK) BEGIN IF CLK = '1' THEN Q <= D ; -利用进程的启动特性产生对 CLK 的边沿检测 END IF; END PROCESS 图 3-7 例 3-13 的时序波形 【例 3-14】 . PROCESS (CLK,D) BEGIN IF CLK = '1' -电平触发型寄存器 THEN Q <= D ; END IF; END PROCESS ; 图 3-8 例 3-14 的时序波形 3.3 全加器的 VHDL 描述 3.3.1 半加器描述

u1or2a8h_adderh adderdain囍CoutCoutf_adderfainbinAAXOCCcCsumu3EinebinBBSCsumsCu2Ein图3-9全加器f_adder电路图及其实体模块bine=sol=aind=col=ain·binso2= so1cin=ain bin cincout=col+ co2=ain·bin+ sol·cin=ainbin+(ainbin)cinain bin cin cout0000001000011011So=a.b+a.b00011101110111113.3.1半加器描述COS0Ico00and2?0soCbnotxnor2图3-10半加器hadder电路图及其真值表【例3-15】--半加器描述(1):布尔方程描述方法LIBRARYIEEE:USEIEEE.STD LOGIC 1164.ALL:ENTITY h adder ISPORT (a, b : IN STD LOGIC;cO, SO :OUT STD_LOGIC);ENDENTITY h_adder,ARCHITECTUREfhlOFhadderisBEGIN7

7 图 3-9 全加器 f_adder 电路图及其实体模块 e=so1=ain bin d=co1=ain•bin so2= so1 cin= ain bin cin cout= co1+ co2=ain•bin + so1•cin = ain•bin + (ain bin )cin ain bin cin cout 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 3.3.1 半加器描述 图 3-10 半加器 h_adder 电路图及其真值表 【例 3-15】 LIBRARY IEEE; -半加器描述(1):布尔方程描述方法 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 BEGIN I113 co a so b 0 1 0 1 0 1 1 1 0 0 0 0 1 1 0 0 a b so co not xnor2 and2 so  a b  a b I113 ain cout cout ain bin sum cin bin sum cin f_adder or2a f e d u3 u2 u1 b a c co B so co B so h_adder A h_adder A

SoSO s0 SOSONULL;END CASE;ENDPROCESS:END ARCHITECTURE fh1 ;【例3-17】LIBRARY IEEE:--或门逻辑描述USEIEEE.STDLOGIC_1164.ALL;ENTITY or2aISPORT(a,b :IN STD LOGIC:C : OUT STD_LOGIC),ENDENTITY or2a;ARCHITECTUREoneOFor2aISBEGINc<=aOR b;ENDARCHITECTUREone;【例3-18】IEEE:--1位二进制全加器顶层设计描述LIBRARYUSEIEEE.STD LOGIC1164.ALL,ENTITYf adderISPORT(ain,bin,cin:INSTDLOGIC;:OUTSTDLOGIC)cout,sumEND ENTITY f_adder,ARCHITECTUREfdIOFfadderIS8

8 so so so so so NULL ; END CASE; END PROCESS; END ARCHITECTURE fh1 ; 【例 3-17】 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 one ; 【例 3-18】 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

COMPONENThadder--调用半加器声明语句PORT( a, b: INSTD_LOGIC;OUT STD_LOGIC);co,so:ENDCOMPONENT;COMPONENT or2aPORT (a, b : IN STD LOGIC;C : OUT STD_LOGIC);END COMPONENT;SIGNALd,e,fSTDLOGIC;--定义3个信号作为内部的连接线。BEGINul:h adder PORTMAP(a=>ain,b=>bin,co=>d,so=>e);--例化语句b=>cin,co=>f, so=>sum);u2:h adderPORTMAP(a=>e,b=>f,u3:or2aPORT MAP(a=>d,c=>cout);END ARCHITECTURE fd1;3.3.2CASE语句1.CASE语句CASEISWhen=>...;When=>;.;;WHENOTHERS=>;ENDCASE ;2.标准逻辑矢量数据类型B:OUTSTD_LOGIC_VECTOR(7DOWNTO0);或 SIGNALA :STD_LOGIC_VECTOR(1 TO4)B<="01100010";--B(7)为'OB(4 DOWNTO 1)<="1101";-- B(4)为"TB(7 DOWNTO 4) <= A :--B(6)等于A(2)SIGNAL C : BIT_VECTOR(3 DOWNTO 0):3.并置操作符SIGNAL a : STD LOGIC VECTOR (3 DOWNTO O);SIGNALd:STD LOGIC_VECTOR(1DOWNTOO);a<TQ"d()元素与元素并置,并置后的数组长度为4IF a.d="101011"THEN..--在IF条件句中可以使用并置符例化语句3.3.3COMPONENT元件名ISPORT(端口名表);ENDCOMPONENT文件名:COMPONENT h_adderPORT c, d: IN STD_LOGIC;9

9 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; -定义 3 个信号作为内部的连接线。 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; 3.3.2 CASE 语句 1. CASE 语句 CASE IS When => ; . ; ; When => ; . ; ; . WHEN OTHERS => ; END CASE ; 2. 标准逻辑矢量数据类型 B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ; 或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4) B <= "01100010" ; - B(7)为 '0' B(4 DOWNTO 1) <= "1101" ; - B(4)为 '1' B(7 DOWNTO 4) <= A ; - B(6)等于 A(2) SIGNAL C :BIT_VECTOR(3 DOWNTO 0); 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 条件句中可以使用并置符 3.3.3 例化语句 COMPONENT 元件名 IS PORT (端口名表) ; END COMPONENT 文件名 ; COMPONENT h_adder PORT ( c,d : IN STD_LOGIC;

e,f:OUTSTD LOGIC);例化名:元件名PORTMAP([端口名=>】连接端口名..);【例3-19】ENTITYCNT4ISPORT(CLK : IN BIT :Q:BUFFERINTEGERRANGE15DOWNTO0);END;ARCHITECTUREbhvOFCNT4ISBEGINPROCESS (CLK)BEGINIFCLK'EVENTANDCLK='ITHENQ<=Q+ 1 :END IF;ENDPROCESS:END bhv,注意:1、Q的端口模式BUFFERQ<=Q+1:Q出现在“<=”两边,说明Q具有输入和输出两种模式;输入应该是输出信号的反馈方式。2、VHDL规定:加、减等算术操作符对应的操作数类型只能是INTEGER。3、时序电路描述中采用了不完整的IF语句。3.4计数器设计1.程序说明表式Q<=Q+1的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期:后者,即左项要获得当前的Q+1,需等待下一个时钟周期。2.数据类型说明Q:BUFFERINTEGERRANGE15DOWNTO0:1十进制整数0十进制整数35十进制整数10E3十进制整数,等于进制整数100016#D9#十六进制整数,等于十六进制整数D9H8#720#八进制整数,等于八进制整数7200二进制整数,等于二进制整数11010010B2#11010010#Q:BUFFERNATURALRANGE15DOWNTOO:与BIT、BITVECTOR一样,数据类型INTEGER、NATURAL、POSITIVE都定义在标准程序包STANDARD中。是默认打开的。整数、自然数和正整数数据类型(1)INTEGER在VHDL中的取值范围:-2147483647~2147483647(232/2)。即32位有符号数表示。仿真器作为有符号处理。综合器作为无符号处理。(2)VHDL综合器要求使用RANGE子句为所定义的数限定范围。10

10 e,f : OUT STD_LOGIC); 例化名 : 元件名 PORT MAP( [端口名 =>] 连接端口名,.); 【例 3-19】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= Q + 1 ; END IF; END PROCESS ; END bhv; 注意: 1、Q 的端口模式 BUFFER Q<=Q+1:Q 出现在“<=”两边,说明 Q 具有输入和输出两种模式;输 入应该是输出信号的反馈方式。 2、VHDL 规定:加、减等算术操作符对应的操作数类型只能是 INTEGER。 3、时序电路描述中采用了不完整的 IF 语句。 3.4 计数器设计 1.程序说明 表式 Q <= Q + 1 的右项与左项并非处于相同的时刻内,对于时序电路,除了 传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的 Q + 1,需等待下一个时钟周期。 2.数据类型说明 Q : BUFFER INTEGER RANGE 15 DOWNTO 0; 1 十进制整数 0 十进制整数 35 十进制整数 10E3 十进制整数,等于十进制整数 1000 16#D9# 十六进制整数,等于十六进制整数 D9H 8#720# 八进制整数,等于八进制整数 720O 2#11010010# 二进制整数,等于二进制整数 11010010B Q : BUFFER NATURAL RANGE 15 DOWNTO 0; 与 BIT、BIT_VECTOR 一样,数据类型 INTEGER、NATURAL、POSITIVE 都定 义在标准程序包 STANDARD 中。是默认打开的。 整数、自然数和正整数数据类型 (1)INTEGER 在 VHDL 中的取值范围:-2147483647~2147483647(232/2)。即 32 位有符号数表示。 仿真器作为有符号处理。综合器作为无符号处理。 (2)VHDL 综合器要求使用 RANGE 子句为所定义的数限定范围

共28页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档