好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

2VHDL设计初步1.ppt

75页
  • 卖家[上传人]:ni****g
  • 文档编号:590541732
  • 上传时间:2024-09-14
  • 文档格式:PPT
  • 文档大小:2.39MB
  • / 75 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第二章 VHDL设计初步 硬件描述语言概述 4选1数据选择器VHDL描述 VHDL设计基本语法结构 寄存器描述及其VHDL语言现象 全加器VHDL设计 VHDL文本设计方法初步 QuartusII工具软件使用 l原理图输入与原理图输入与 HDL 文本输入设计的区别文本输入设计的区别 1. Graphic is what you draw is what you get1. Graphic is what you draw is what you getØ“ tell me what hardware you want and I will give it to you”2. HDL is what you write is what functional you getØ“ tell me how your circuit should behave and the HDL compiler will give you the hardware that does the job”Ø but the designer can not control how the circuit implement2.1 2.1 硬件描述语言硬件描述语言((((HHardware ardware D Description escription L Languageanguage)))) lHDL的种类的种类 VHDL的含义的含义VHSIC (Very High Speed Integrated Circuit)HardwareDescriptionLanguage VHDL发展历史发展历史l1981年年,, 诞生于美国国防部赞助的研究计划,目的诞生于美国国防部赞助的研究计划,目的是为了把电子电路的设计以电子文档的方式保存下是为了把电子电路的设计以电子文档的方式保存下来;来;l1983—1985年年,, IBM、、TI等公司对其进行了细致开等公司对其进行了细致开发;发; l1987年底年底,,VHDL被被IEEE和美国国防部确认为标准和美国国防部确认为标准硬件描述语言硬件描述语言 ,即,即IEEE-1076(简称(简称87版版) l1993年年,,IEEE对对VHDL进行了修订,公布了新版本进行了修订,公布了新版本的的VHDL,即,即IEEE标准的标准的1076-1993((1164)版本)版本 l1996年年,,IEEE又推出又推出IEEE-1076.3和和IEEE-1076.4,,以解决可综合以解决可综合VHDL描述在描述在 不同不同EDA厂商之间的移厂商之间的移植问题,以及植问题,以及ASIC/FPGA的门级库描述问题。

      的门级库描述问题 VHDL特点特点l与其他的硬件描述语言相比,与其他的硬件描述语言相比,VHDL具有更强的行为具有更强的行为描述能力描述能力 lVHDL丰富的仿真语句和库函数,使得在设计的早期丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的功能可行性,随时可对设计进行就能查验设计系统的功能可行性,随时可对设计进行仿真模拟仿真模拟 lVHDL语句的行为描述能力和程序结构决定了他具有语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能支持大规模设计的分解和已有设计的再利用功能l对于用对于用VHDL完成的一个确定的设计,可以利用完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把工具进行逻辑综合和优化,并自动的把VHDL描述设描述设计转变成门级网表计转变成门级网表lVHDL对设计的描述具有相对独立性,设计者可以不对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计是什么,而进行独立的设计 2.2 42.2 4选选1 1数据选择器数据选择器VHDLVHDL描述描述一、一、4选选选选1 1数据选择器的数据选择器的数据选择器的数据选择器的VHDLVHDL描述描述描述描述library IEEE;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;use IEEE.std_logic_unsigned.all;d d0 0y ymux4_mux4_1 1d d2 2d d1 1d d3 3selsel2 2entity mux4_1 isentity mux4_1 isport(sel: in STD_LOGIC_VECTOR(1 downto 0);port(sel: in STD_LOGIC_VECTOR(1 downto 0); d0,d1, d0,d1, d2,d2, d3:in STD_LOGIC;d3:in STD_LOGIC; y: out STD_LOGIC); y: out STD_LOGIC);end mux4_1;end mux4_1; architecture example of mux4_1 isarchitecture example of mux4_1 isbeginbegin process (sel, d0, d1, d2, d3) process (sel, d0, d1, d2, d3) begin begin case sel is case sel is when "00" => y <= d0; when "00" => y <= d0; when "01" => y <= d1; when "01" => y <= d1; when "10" => y <= d2; when "10" => y <= d2; when "11" => y <= d3; when "11" => y <= d3; when others => y <= 'X'; when others => y <= 'X'; end case; end case; end process; end process;end example; end example; 二、不同描述方式的二、不同描述方式的二、不同描述方式的二、不同描述方式的4 4选选选选1 1数据选择器数据选择器数据选择器数据选择器例例例例1 1library IEEE;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;use IEEE.std_logic_unsigned.all;entity mux4_1 isentity mux4_1 isport(sel: in STD_LOGIC_VECTOR(1 downto 0);port(sel: in STD_LOGIC_VECTOR(1 downto 0); d0,d1, d0,d1, d2,d2, d3:in STD_LOGIC;d3:in STD_LOGIC; y: out STD_LOGIC); y: out STD_LOGIC);end mux4_1;end mux4_1; Architecture aaa of mux4_1 is Architecture aaa of mux4_1 is BeginBeginy <= (d0 AND NOT(sel(1)) AND NOT(sel(0))) ORy <= (d0 AND NOT(sel(1)) AND NOT(sel(0))) OR(d1 AND NOT(sel(1)) AND sel(0)) OR(d1 AND NOT(sel(1)) AND sel(0)) OR(d2 AND sel(1) AND NOT(sel(0))) OR (d2 AND sel(1) AND NOT(sel(0))) OR (d3 AND sel(1) AND sel(0)) ;(d3 AND sel(1) AND sel(0)) ;End aaa;End aaa; 例例例例2 2library IEEE;library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;use IEEE.std_logic_unsigned.all;entity mux4_1 isentity mux4_1 isport(port(S S: in STD_LOGIC_VECTOR(1 downto 0);: in STD_LOGIC_VECTOR(1 downto 0); A,B,A,B, C,C, D D:in STD_LOGIC;:in STD_LOGIC; X X: out STD_LOGIC);: out STD_LOGIC);end mux4_1;end mux4_1;A AX Xmuxmux4-14-1C CB BD DS S2 2 ARCHITECTURE ARCHITECTURE logiclogic OF mux4_1 IS OF mux4_1 ISBEGIN BEGIN WITH WITH S S SELECT SELECT X X <= <=A A WHEN “00”, WHEN “00”, B B WHEN “01”, WHEN “01”, C C WHEN “10”, WHEN “10”, D D WHEN OTHERS; WHEN OTHERS;End End logiclogic; ; 例例3library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity mux4 isport(SEL: in STD_LOGIC_VECTOR(1 downto 0); A, B, C, D:in STD_LOGIC; MUX_OUT: out STD_LOGIC);end mux4; architecture example0 of mux4 isbegin process (SEL, A, B, C, D) begin case SEL is when "00" => MUX_OUT <= A; when "01" => MUX_OUT <= B; when "10" => MUX_OUT <= C; when "11" => MUX_OUT <= D; when others => MUX_OUT <= ‘Z'; end case; end process;end example0; 结论:结论:1.VHDL程序有结构的,由三部分组成。

      程序有结构的,由三部分组成2.同一种功能模块可以由不同的语句来描述,同一种功能模块可以由不同的语句来描述,而且描述的模块功能可大可小(可编程期间而且描述的模块功能可大可小(可编程期间的优势所在)的优势所在)3.程序中有些字词可以自行修改,有些是固定程序中有些字词可以自行修改,有些是固定不变的 2.3 VHDL2.3 VHDL设计的基本语法结构设计的基本语法结构 用用一一个个VHDL程程序序来来描描述一个模块电路述一个模块电路电路电路模型模型IN1INmOUTnOUT11. VHDL程序的基本结构程序的基本结构lUse Library(库)(库) 用来说明电路模型需要使用的标准库用来说明电路模型需要使用的标准库lEntity(实体实体)用来说明电路模型的端口构成和信号属性用来说明电路模型的端口构成和信号属性lArchitecture(构造体构造体)用一些语句来描述电路模型的功能用一些语句来描述电路模型的功能 librarylibrary IEEE; IEEE;useuse IEEE.std_logic_1164.all; IEEE.std_logic_1164.all;useuse IEEE.std_logic_arith.all; IEEE.std_logic_arith.all;useuse IEEE.std_logic_unsigned.all; IEEE.std_logic_unsigned.all;entityentity mux4_1 is mux4_1 isportport( (S S: in STD_LOGIC_VECTOR(1 downto 0);: in STD_LOGIC_VECTOR(1 downto 0); A,B,A,B, C,C, D D:in STD_LOGIC;:in STD_LOGIC; X X: out STD_LOGIC);: out STD_LOGIC);endend mux4_1; mux4_1;引用库引用库实体实体 结构体结构体ARCHITECTURE logic OF mux4_1 ISBEGIN WITH S SELECT X <=A WHEN “00”, B WHEN “01”, C WHEN “10”, D WHEN OTHERS;End logic;1)1)实体实体实体实体l类似一个类似一个“黑盒黑盒”,实,实体描述了体描述了“黑盒黑盒”的输的输入输出口构成和信号属入输出口构成和信号属性性黑盒黑盒黑盒黑盒A AB BC CX XMUX4_1MUX4_1D DS S 实体举例实体举例实体举例实体举例entity mux4_1 isport(S: in STD_LOGIC_VECTOR(1 downto 0); A, B, C, D:in STD_LOGIC; X: out STD_LOGIC);end mux4_1;黑盒黑盒黑盒黑盒A AB BC CX XMUX4_1MUX4_1D DS S包含三条语句。

      包含三条语句①①entity mux4_1 is Entity、、is是关键字是关键字mux4_1为实体名,由设为实体名,由设计者自定,表达电路模计者自定,表达电路模型的名字,型的名字, ②②PORT()端口说明语句端口说明语句port(S: in…….. ); 描述电路模型端口及端口信号描述电路模型端口及端口信号 PORT信信息息一一般般有有 Name((端端口口信信号号名名)),Mode((端端口模式)口模式)和和Type(端口信号数据类型)(端口信号数据类型)entity mux4_1 isport(S: in STD_LOGIC_VECTOR(1 downto 0); A, B, C, D:in STD_LOGIC; X: out STD_LOGIC);end mux4_1;端口说明格式端口说明格式端口说明格式端口说明格式 PORT((Name1::Mode Type ; Name2::Mode Type; … … )); Mode(端口模式)(端口模式)IN::数据只能从端口流入实体数据只能从端口流入实体OUT::数据只能从端口流出实体数据只能从端口流出实体INOUT::数据从端口流入或流出实体数据从端口流入或流出实体BUFFER::数据从端口流出实体,同时可被内部反馈数据从端口流出实体,同时可被内部反馈Entity端口说明格式端口说明格式端口说明格式端口说明格式 PORT((Name1::Mode Type ; Name2::Mode Type; … … )); Type(端口信号数据类型)(端口信号数据类型)lVHDL规定:任何数据对象必须严格限定其取值范围。

      即规定:任何数据对象必须严格限定其取值范围即对其传输的信号或存储的数据的类型做明确界定对其传输的信号或存储的数据的类型做明确界定l有有BIT :位类型;:位类型; BOOLEAN:布尔类型;:布尔类型; INTEGER::整型;整型; STD_LOGIC:标准逻辑位,:标准逻辑位,STD_LOGIC_VECTOR:标准逻辑矢量等标准逻辑矢量等端口说明格式端口说明格式端口说明格式端口说明格式 PORT((Name1::Mode Type ; Name2::Mode Type; … … )); ③③实体结束语句:实体结束语句: end mux4_1;entity mux4_1 isport(S: in STD_LOGIC_VECTOR(1 downto 0); A, B, C, D:in STD_LOGIC; X: out STD_LOGIC);end mux4_1;my_designd[11:0]oeclkad[11:0]a[11:0]intas练习:练习:练习:练习:编写编写 包含以下内容的实体代码包含以下内容的实体代码端口端口 d 为为12位输入总线位输入总线 端口端口 oe 和和 clk 都是都是1位输入位输入端口端口 ad 为为 12位双向总线位双向总线端口端口 a 为为12位输出总线位输出总线端口端口 int 是是1位输出位输出端口端口 as 是一位输出同时被用作内部是一位输出同时被用作内部反馈反馈 ENTITY my_design IS PORT (d: IN std_logic_vector(11 DOWNTO 0);oe,clk:IN std_logic;ad: INOUT std_logic_vector(11 DOWNTO 0);a: OUT std_logic_vector(11 DOWNTO 0);int: OUT std_logic;as: BUFFER std_logic);END my_design;my_designd[11:0]oeclkad[11:0]a[11:0]intas 2)2)构造体(结构体构造体(结构体 Architecture)l用来描述实体的内部结构和逻辑功能用来描述实体的内部结构和逻辑功能l每一个构造体必须有一个实体(每一个构造体必须有一个实体(ENTITY)与它相)与它相对应,所以两者一般成对出现对应,所以两者一般成对出现l一个实体(一个实体(ENTITY)可以有多个构造体)可以有多个构造体l构造体的运行是并发的构造体的运行是并发的ARCHITECTURE logic OF mux4_1 ISBEGIN WITH S SELECT X <=A WHEN “00”, B WHEN “01”, C WHEN “10”, D WHEN OTHERS;End logic; 结构体语句格式结构体语句格式结构体语句格式结构体语句格式 ArchitectureArchitecture 结构体名结构体名 OfOf 实体名实体名 IsIs [说明语句说明语句] BeginBegin [功能描述语句功能描述语句] EndEnd 结构体名结构体名;ARCHITECTURE logic OF mux4_1 ISBEGIN WITH S SELECT X <=A WHEN “00”, B WHEN “01”, C WHEN “10”, D WHEN OTHERS;End logic; 3)3)库(库(Library))v 用来存储预先完成的程序包和数据集合体的仓库用来存储预先完成的程序包和数据集合体的仓库 v 在在VHDL设计中若使用库中内容,必须在该设计的设计中若使用库中内容,必须在该设计的实体前使用库语句和实体前使用库语句和USE语句语句v 语句格式语句格式语句格式语句格式:: Library 库名;库名; Use 库名库名.程序包名程序包名. All; Use 库名库名.程序包名程序包名. 项目名项目名;librarylibrary IEEE; IEEE;useuse IEEE.std_logic_1164.all; IEEE.std_logic_1164.all;useuse IEEE.std_logic_arith.all; IEEE.std_logic_arith.all;useuse IEEE.std_logic_unsigned.all; IEEE.std_logic_unsigned.all;l IEEE库是库是VHDL设计中最常见的库,设计中最常见的库,包含包含IEEE标准程序标准程序包和一些支持工业包和一些支持工业标准的程序包标准的程序包 例例1::LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY test isPORT( A,B,C : IN Bit; D,E: OUT Bit );END test;ABCDE2. 2.VHDLVHDL相关语法说明相关语法说明相关语法说明相关语法说明1 1)数据类型)数据类型)数据类型)数据类型 ARCHITECTURE a OF test ISBEGIND <= A and B;E <= not C;END a;ABCDEØ BIT :位类型,其值只能为:位类型,其值只能为 ‘0’或或 ‘1’例:例:Signal a: BIT;(;( a <= ‘1’ ))Ø BIT_VECTOR :位矢量类型,包含一组位类型:位矢量类型,包含一组位类型例:例:Signal a: BIT_VECTOR (7 DOWNTO 0) ( a <= “00000001” 、、 a <= a + 1) ØSTD_LOGIC:标准逻辑:标准逻辑ØSTD_LOGIC_VECTOR:标准逻辑矢量:标准逻辑矢量①①他们是数字电路设计的工业标准逻辑类型,有他们是数字电路设计的工业标准逻辑类型,有9种取值。

      种取值取值取值取值取值含义含义含义含义‘ ‘U U’ ’未初始化未初始化未初始化未初始化‘ ‘0 0’ ’强强强强0 0‘ ‘1 1’ ’强强强强1 1‘ ‘Z Z’ ’高阻高阻高阻高阻‘ ‘WW’ ’弱未知弱未知弱未知弱未知‘ ‘L L’ ’弱弱弱弱0 0‘ ‘HH’ ’弱弱弱弱1 1‘ ‘- -’ ’忽略忽略忽略忽略②②若电路中有三态逻辑若电路中有三态逻辑(Z) 必须用必须用STD_LOGIC 和和 STD_LOGIC _VECTOR③③要使用这种类型代码中必须申要使用这种类型代码中必须申明库和程序包说明语句明库和程序包说明语句LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; 2 2)信号传输(赋值)符号和数据比较符号)信号传输(赋值)符号和数据比较符号)信号传输(赋值)符号和数据比较符号)信号传输(赋值)符号和数据比较符号x <= d0 when (s = “00”) else d1 when (s = “01”) else d2 when (s = “10”) else d3 ;Øx <= d0表示输入端口表示输入端口d0的数据向输出端口的数据向输出端口x传输,传输,也叫也叫d0向向 x赋值。

      表示电路内部连线或端口,有传赋值表示电路内部连线或端口,有传输延迟Øwhen (s = “00”)判断的条件,通过测定判断的条件,通过测定s = “00”的比的比较结果确定信号的流向较结果确定信号的流向 ,,“ =”为数据比较符号为数据比较符号比较运算符还有比较运算符还有“/=”、、“<=”、、“>=”、、“<”、、“>” 3 3)逻辑操作符号)逻辑操作符号)逻辑操作符号)逻辑操作符号ARCHITECTURE a OF test ISBEGIND <= A and B;E <= not C;END a;ABCDEØAnd、、 not是逻辑是逻辑操作符号操作符号VHDL提供提供7种逻种逻辑操作符辑操作符运算符运算符运算符运算符功能功能功能功能ANDAND与与与与OROR或或或或NANDNAND与非与非与非与非NORNOR或非或非或非或非XORXOR异或异或异或异或XNORXNOR异或非异或非异或非异或非NOTNOT非非非非 4 4)信号赋值语句)信号赋值语句)信号赋值语句)信号赋值语句例例1 ::ARCHITECTURE a OF test ISBEGIND <= A and B;E <= not((C and A));END a;vv直接信号赋值语句直接信号赋值语句直接信号赋值语句直接信号赋值语句语法格式:语法格式:语法格式:语法格式: vvVHDLVHDL支持所有的标准逻辑运算:支持所有的标准逻辑运算:支持所有的标准逻辑运算:支持所有的标准逻辑运算: AND, OR, NOT, XOR, XNOR, NANDsignal_name <= signal_name <= signal_name <= signal_name <= 逻辑表达式逻辑表达式逻辑表达式逻辑表达式 signal_namesignal_namesignal_namesignal_name <= <= <= <= value_1value_1value_1value_1 WHEN WHEN WHEN WHEN condition1condition1condition1condition1 ELSE ELSE ELSE ELSE value_2value_2value_2value_2 WHEN WHEN WHEN WHEN condition2condition2condition2condition2 ELSE ELSE ELSE ELSE ... ... ... ... value_nvalue_nvalue_nvalue_n WHEN WHEN WHEN WHEN conditionnconditionnconditionnconditionn ELSE ELSE ELSE ELSE value_x;value_x;value_x;value_x;vv条件信号赋值语句条件信号赋值语句条件信号赋值语句条件信号赋值语句( When_Else )( When_Else )语法格式:语法格式:语法格式:语法格式:例例2::ARCHITECTURE a OF test ISBEGIN x <= d0 when (s =“00”) else d1 when (s =“01”) else d2 when (s =“10”) else d3 ;END a; x <= d0 when (s =“00”) else d1 when (s =“01”) else d2 when (s =“10”) else d3 ;v根据指定条件对信号赋值,条件可以为任意逻根据指定条件对信号赋值,条件可以为任意逻辑表达式。

      辑表达式v根据条件出现的先后次序,根据条件出现的先后次序,ELSE子句有优先子句有优先权权(按优先顺序逐条测试条件按优先顺序逐条测试条件)v最后一个最后一个 ELSE子句隐含了所有未列出的条件子句隐含了所有未列出的条件v每一子句结尾没有标点,只有最后一句有每一子句结尾没有标点,只有最后一句有“;;” 例例3::ARCHITECTURE logic OF mux4_1 ISBEGIN WITH S SELECT X <= A WHEN “00”, B WHEN “01”, C WHEN “10”, D WHEN OTHERS;End logic;vv选择信号赋值语句选择信号赋值语句选择信号赋值语句选择信号赋值语句( With_Select_When )( With_Select_When )语法格式:语法格式:语法格式:语法格式:WITH WITH selection_signalselection_signal SELECT SELECT signal_namesignal_name <= <= value_1value_1 WHEN WHEN value_avalue_a , , value_2value_2 WHEN WHEN value_bvalue_b , , ...... value_nvalue_n WHEN WHEN value_nvalue_n , , value_xvalue_x WHEN OTHERS WHEN OTHERS ; ; WITHWITH S S SELECTSELECT X X <=<= A A WHENWHEN “00”, “00”, B B WHENWHEN “01”, “01”, C C WHENWHEN “10”, “10”, D D WHENWHEN OTHERSOTHERS; ;v 所有的所有的“WHEN”子句必须是互斥的子句必须是互斥的v 一般用一般用“When Others”来处理未考虑到的情况来处理未考虑到的情况v 每一子句结尾是逗号,最后一句是分号每一子句结尾是逗号,最后一句是分号WITHWITH s s SELECTSELECT x <= a x <= a WHENWHEN ””000000”” | | | | ““001001”” | | | | ““010010””, , b b WHENWHEN ““101101”” | | | | ““111111””, , c c WHEN OTHERSWHEN OTHERS; ;表示或逻辑表示或逻辑表示或逻辑表示或逻辑 3. 3.真值表的真值表的真值表的真值表的VHDLVHDL描述描述描述描述EN A2 A1 A0Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y00 X X X 0 0 0 0 0 0 0 01 0 0 00 0 0 0 0 0 0 11 0 0 10 0 0 0 0 0 1 01 0 1 00 0 0 0 0 1 0 01 0 1 10 0 0 0 1 0 0 01 1 0 00 0 0 1 0 0 0 01 1 0 10 0 1 0 0 0 0 01 1 1 00 1 0 0 0 0 0 01 1 1 11 0 0 0 0 0 0 01 1)三线)三线)三线)三线————八线译码器的八线译码器的八线译码器的八线译码器的VHDLVHDL程序:程序:程序:程序: LIBRARYLIBRARY IEEE ; IEEE ;USEUSE IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ;USEUSE IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_ARITH.ALL;USEUSE IEEE.STD_LOGIC_UNSIGNED.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYENTITY encoder encoder ISIS PORT (PORT ( A : IN STD_LOGIC_VECTOR( 2 DOWNTO 0) ; A : IN STD_LOGIC_VECTOR( 2 DOWNTO 0) ; EN : IN STD_LOGIC ; EN : IN STD_LOGIC ; Y : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0)) ; Y : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0)) ;END END encoder;encoder;ARCHITECTURE ARCHITECTURE a a OFOF encoder encoder ISISSIGNALSIGNAL sel: STD_LOGIC_VECTOR( 3 DOWNTO 0) ; sel: STD_LOGIC_VECTOR( 3 DOWNTO 0) ;BEGINBEGINØ “SIGNAL SIGNAL sel: ……sel: ……”sel为内部连接信号,必须在结为内部连接信号,必须在结构体说明区域先说明后才能在结构体中使用。

      构体说明区域先说明后才能在结构体中使用 (( BEGIN )) sel <= EN & A; -- --将将将将ENEN、、、、X7X7、、、、X6X6、、、、…X0…X0合并以简化程序合并以简化程序合并以简化程序合并以简化程序WITH sel SELECT Y<= "00000001" WHEN "1000", "00000010" WHEN "1001", "00000100" WHEN "1010", "00001000" WHEN "1011", "00010000" WHEN "1100", "00100000" WHEN "1101", "01000000" WHEN "1110", "10000000" WHEN "1111", “00000000” WHEN OTHERS ; --包含包含EN=0的情况的情况END a ;sel(3) <= EN;sel(3) <= EN;sel(2) <= A(2);sel(2) <= A(2);sel(1) <= A(1);sel(1) <= A(1);sel(0) <= A(0);sel(0) <= A(0);Ø “&”是是“并置并置”运算符,实现将多个信号合并成总运算符,实现将多个信号合并成总线形式。

      线形式Ø VHDL程序中,每条语句都要以程序中,每条语句都要以“;;”结束 2 2)八线)八线)八线)八线————三线优先编码器的三线优先编码器的三线优先编码器的三线优先编码器的VHDLVHDL程序:程序:程序:程序:EN X7 X6 X5 X4 X3 X2 X1 X0Y2 Y1 Y00 X X X X X X X X0 0 01 0 0 0 0 0 0 0 10 0 01 0 0 0 0 0 0 1 00 0 11 0 0 0 0 0 1 0 00 1 01 0 0 0 0 1 0 0 00 1 11 0 0 0 1 0 0 0 01 0 01 0 0 1 0 0 0 0 01 0 11 0 1 0 0 0 0 0 01 1 01 1 0 0 0 0 0 0 01 1 1 LIBRARYLIBRARY IEEE ; IEEE ;USEUSE IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ;USEUSE IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_ARITH.ALL;USEUSE IEEE.STD_LOGIC_UNSIGNED.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYENTITY Coder Coder ISIS PORT (PORT ( X : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;X : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ; EN : IN STD_LOGIC ;EN : IN STD_LOGIC ; Y Y : OUT STD_LOGIC_VECTOR( 2 DOWNTO 0)) ;: OUT STD_LOGIC_VECTOR( 2 DOWNTO 0)) ;ENDEND Coder ; Coder ;ARCHITECTUREARCHITECTURE a a OFOF Coder Coder ISISSIGNAL SIGNAL Sel: STD_LOGIC_VECTOR(8Sel: STD_LOGIC_VECTOR(8 DOWNTO 0);DOWNTO 0);BEGINBEGIN Sel <= EN Sel <= EN && X ;-- X ;--将将将将ENEN、、、、X7X7、、、、X6X6、、、、…X0…X0合并以简化程序合并以简化程序合并以简化程序合并以简化程序 Y <= “111” Y <= “111” WHENWHEN (Sel =(Sel =“110000000”“110000000”) ) ELSEELSE "110" "110" WHENWHEN (Sel = (Sel = "101000000" "101000000" ) ) ELSEELSE "101" "101" WHENWHEN (Sel = (Sel = "100100000" "100100000" ) ) ELSEELSE "100" "100" WHENWHEN (Sel = (Sel = "100010000" "100010000" ) ) ELSEELSE "011" "011" WHENWHEN (Sel = (Sel = "100001000" "100001000" ) ) ELSEELSE “010" “010" WHENWHEN (Sel = (Sel = "100000100" "100000100" ) ) ELSEELSE "001" "001" WHENWHEN (Sel = (Sel = "100000010" "100000010" ) ) ELSEELSE "000" "000" WHENWHEN (Sel = (Sel = "100000001" "100000001" ) ) ELSEELSE "000" ; "000" ; --包含包含EN=0的情况的情况ENDEND a ; a ;vv利用利用WithWith…SelectSelect……WhenWhen语句、语句、WhenWhen…ElseElse语句或语句或CaseCase…WhenWhen语句来实现真值表语句来实现真值表 LIBRARYLIBRARY ieee; ieee;USEUSE ieee.std_logic_1164.all; ieee.std_logic_1164.all;ENTITY simp ENTITY simp ISISPORTPORT(a, b, c, d : IN Std_Logic;(a, b, c, d : IN Std_Logic;g : OUT Std_Logic);g : OUT Std_Logic);ENDEND simp; simp;ARCHITECTUREARCHITECTURE logic logic OFOF simp simp ISISSIGNAL SIGNAL e e,,,,f : Std_Logic;f : Std_Logic;BEGINBEGIN e <= a or b; e <= a or b; f <= not(c or d); f <= not(c or d); g <= e and f; g <= e and f;ENDEND logic; logic;a ab bc cd dg ge ef fvv 例:端口信号和内部连接信号的说明例:端口信号和内部连接信号的说明例:端口信号和内部连接信号的说明例:端口信号和内部连接信号的说明端口信号端口信号端口信号端口信号在构造体内声明的内部连接信号在构造体内声明的内部连接信号在构造体内声明的内部连接信号在构造体内声明的内部连接信号 v 信号赋值信号赋值l lSIGNALSIGNAL temp : Std_Logic_Vector (7 downto 0); temp : Std_Logic_Vector (7 downto 0);l l整体赋值整体赋值整体赋值整体赋值: :temp <= “10101010”;temp <= “10101010”;temp <= x”AA” ;temp <= x”AA” ; l l逐位赋值逐位赋值逐位赋值逐位赋值: :temp(7) <= ‘1’;temp(7) <= ‘1’;l l多位赋值多位赋值多位赋值多位赋值: :l ltemp (7 downto 4) <= “1010”temp (7 downto 4) <= “1010”;;;;多位赋值多位赋值多位赋值多位赋值用双引号用双引号用双引号用双引号逐位赋值逐位赋值逐位赋值逐位赋值用单引号用单引号用单引号用单引号赋值标志赋值标志赋值标志赋值标志 2.4 2.4 寄存器描述及其寄存器描述及其VHDLVHDL语言现象语言现象一、、D D触发器的触发器的VHDLVHDL描述描述DclkQdq上升沿触发的上升沿触发的上升沿触发的上升沿触发的DFFDFFLIBRARYLIBRARY IEEE ; IEEE ; USEUSE IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ;ENTITYENTITY ddf_logic ddf_logic ISIS PORTPORT (d ,clk: (d ,clk:IN STD_LOGIC; IN STD_LOGIC; q: OUT STD_LOGIC) ; q: OUT STD_LOGIC) ; ENDEND ddf_logic ; ddf_logic ;ARCHITECTUREARCHITECTURE example example OFOF ddf_logic ddf_logic ISISBEGINBEGIN PROCESSPROCESS (clk) (clk) BEGINBEGIN IF IF clk’event and clk=‘1’ clk’event and clk=‘1’ thenthenq <= d; q <= d; END IF;END IF;END PROCESSEND PROCESS; ;ENDEND example; example;eventevent: :信号属性函数关键字,信号属性函数关键字,信号属性函数关键字,信号属性函数关键字,检测检测检测检测clkclk电平是否发生变化。

      电平是否发生变化电平是否发生变化电平是否发生变化clk’event and clk=‘1’clk’event and clk=‘1’检测上升检测上升检测上升检测上升沿下降沿触发:下降沿触发:下降沿触发:下降沿触发:clk’event clk’event and clk=‘0’and clk=‘0’rising_edge(clk):测定上升沿函数,必须测定上升沿函数,必须定义定义clk为为STD_LOGICSTD_LOGIC,同时要引用,同时要引用,同时要引用,同时要引用IEEE.STD_LOGIC_1164.ALL IEEE.STD_LOGIC_1164.ALL 程序程序程序程序包包包包 二、二、D D触发器触发器VHDLVHDL描述的语言现象说明描述的语言现象说明 ——进程语句和顺序语句进程语句和顺序语句PROCESSPROCESS (clk) (clk) BEGINBEGIN IF clk’event and clk=‘1’ thenIF clk’event and clk=‘1’ thenq <= d; q <= d; END IF;END IF;END PROCESSEND PROCESS; ;[ [ [ [进程名称进程名称进程名称进程名称:]:]:]:] PROCESS PROCESS PROCESS PROCESS( ( ( (敏感信号敏感信号敏感信号敏感信号1,1,1,1,敏感信号敏感信号敏感信号敏感信号2,2,2,2,…………) ) ) ) 〈〈〈〈说明区说明区说明区说明区〉〉〉〉 BEGINBEGINBEGINBEGIN 〈〈〈〈顺序语句顺序语句顺序语句顺序语句〉〉〉〉 END PROCESS END PROCESS END PROCESS END PROCESS [ [ [ [进程名称进程名称进程名称进程名称] ] ] ];;;;进程语句基本格式:进程语句基本格式:进程语句基本格式:进程语句基本格式: LIBRARYLIBRARY ieee; ieee;USEUSE ieee.std_logic_1164.all; ieee.std_logic_1164.all;ENTITYENTITY if_case if_case ISIS PORT PORT ( a, b, c, d, e, f : IN Std_Logic;( a, b, c, d, e, f : IN Std_Logic;sel : IN Std_Logic_Vector(1 downto sel : IN Std_Logic_Vector(1 downto 0);0); x, y, z : OUT Std_Logic); x, y, z : OUT Std_Logic);ENDEND if_case; if_case;ARCHITECTUREARCHITECTURE logic logic OFOF if_case if_case ISISBEGINBEGINif_label:if_label:PROCESSPROCESS (a, b, c, d, sel) (a, b, c, d, sel)BEGINBEGIN IFIF sel="00" sel="00" THENTHEN y <= a; y <= a; ELSIF ELSIF sel="01" sel="01" THEN THEN y <= b; y <= b; ELSIF ELSIF sel="10" sel="10" THENTHEN y <= c; y <= c; ELSEELSE y <= d; y <= d; END IFEND IF; ;END PROCESS END PROCESS if_label;if_label;进程语句举例进程语句举例case_label: PROCESS(a, b, c, d, sel)BEGIN CASE sel IS WHEN “00” =>z <= not a; WHEN “01” =>z <= not b; WHEN “10” =>z <= not c; WHEN “11” =>z <= not d; WHEN OTHERS =>z <= ‘0’; END CASE;END PROCESS case_label; x<= (e and y) or (f and z)END logic;①①①①一个构造体内可有多个进程语句一个构造体内可有多个进程语句一个构造体内可有多个进程语句一个构造体内可有多个进程语句②②②②进程和进程之间是并行关系进程和进程之间是并行关系进程和进程之间是并行关系进程和进程之间是并行关系③③③③进进进进程程程程和和和和进进进进程程程程之之之之间间间间的的的的数数数数据据据据交交交交换换换换通通通通过过过过信信信信号完成号完成号完成号完成④④④④进进进进程程程程的的的的运运运运行行行行依依依依赖赖赖赖于于于于敏敏敏敏感感感感表表表表内内内内参参参参数数数数的的的的变化变化变化变化 ④④④④进程赖以启动的信号敏感表进程赖以启动的信号敏感表进程赖以启动的信号敏感表进程赖以启动的信号敏感表v进程内部输入信号的改变,都将启动进程,执行进进程内部输入信号的改变,都将启动进程,执行进程内相应顺序语句。

      程内相应顺序语句v一些一些VHDLVHDL综合器,综合后,对应进程的硬件系统对综合器,综合后,对应进程的硬件系统对进程中的所有输入的信号都是敏感的,不论在源程进程中的所有输入的信号都是敏感的,不论在源程序的进程中是否把所有的输入信号都列入敏感表序的进程中是否把所有的输入信号都列入敏感表v为了使软件仿真与综合后的硬件仿真对应起来,应为了使软件仿真与综合后的硬件仿真对应起来,应当将进程中的所有输人信号都列入敏感表中当将进程中的所有输人信号都列入敏感表中 PROCESS (clkPROCESS (clk,,,,d d) ) PROCESSPROCESS (clk) (clk) BEGINBEGIN IF clk’event and clk=‘1’ thenIF clk’event and clk=‘1’ thenq <= d; q <= d; END IF;END IF; END PROCESSEND PROCESS; ; ⑤⑤⑤⑤进程内部是一组连续执行的顺序语句进程内部是一组连续执行的顺序语句进程内部是一组连续执行的顺序语句进程内部是一组连续执行的顺序语句v每一条顺序语句的执行每一条顺序语句的执行( (指仿真执行指仿真执行) )顺序是与它顺序是与它们的书写顺序基本一致的。

      反映了信号操作的优们的书写顺序基本一致的反映了信号操作的优先级v顺序语句包括:顺序赋值语句、顺序语句包括:顺序赋值语句、流程控制语句流程控制语句、、等待语句、子程序调用语句、返回语句、空操作等待语句、子程序调用语句、返回语句、空操作语句语句PROCESSPROCESS (clk) (clk) BEGINBEGIN IFIF clk’event and clk=‘1’ clk’event and clk=‘1’ thenthen q <= d; q <= d; END IFEND IF; ;END PROCESSEND PROCESS; ;IFIF 条件式条件式 ThenThen 顺序语句顺序语句END IFEND IF;;;;v根据条件式产生的判断结果根据条件式产生的判断结果TRUETRUE或或FALSEFALSE,有条件,有条件地选择执行其后的顺序语句地选择执行其后的顺序语句v如果如果clkclk没有发生变化,则跳过该没有发生变化,则跳过该IfIf语句那么那么q ?q ?VHDLVHDLVHDLVHDL综合器理解为:综合器理解为:综合器理解为:综合器理解为:保持保持保持保持q q q q的原值不变的原值不变的原值不变的原值不变 ENTITYENTITY comp_bad comp_bad is is PORTPORT(a, b(a, b: IN: INStd_Logic;Std_Logic; q: OUT q: OUTStd_LogicStd_Logic); );ENDEND comp_bad; comp_bad;ARCHITECTUREARCHITECTURE a OF comp_bad IS a OF comp_bad ISBEGINBEGIN PROCESS PROCESS (a,b) (a,b) BEGIN BEGIN IFIF a > b a > b then then q <=‘1’;q <=‘1’; ELSIFELSIF a < b a < b then then q <=‘0’; q <=‘0’; -- --为提及为提及为提及为提及a=b,a=b, q q保持,配置寄存器保持,配置寄存器保持,配置寄存器保持,配置寄存器 END IFEND IF; ; END PROCESS END PROCESS; ;END END a;a;a ba bq q0 00 0保持保持保持保持0 10 10 01 01 01 11 11 1保持保持保持保持改进:改进:改进:改进:PROCESSPROCESSPROCESSPROCESS (a,b) (a,b) (a,b) (a,b) BEGINBEGINBEGINBEGIN IFIFIFIF a > b a > b a > b a > b then then then then q <=q <=q <=q <=‘‘‘‘1 1 1 1’’’’; ; ; ; ELSEELSEELSEELSE q <= q <= q <= q <=‘‘‘‘0 0 0 0’’’’; ; ; ; END IFEND IFEND IFEND IF; ; ; ;END PROCESSEND PROCESSEND PROCESSEND PROCESS; ; ; ;a ba bq q0 00 00 00 10 10 01 01 01 11 11 10 0 三、电平触发的三、电平触发的三、电平触发的三、电平触发的D D触发器触发器触发器触发器 ————————D D D D锁存器锁存器锁存器锁存器DclkQdq电平触发的电平触发的电平触发的电平触发的DFFDFFLIBRARYLIBRARY IEEE ; IEEE ; USEUSE IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ;ENTITYENTITY ddf_logic ddf_logic ISIS PORTPORT (d,clk:IN STD_LOGIC; (d,clk:IN STD_LOGIC; q: OUT STD_LOGIC) ; q: OUT STD_LOGIC) ; ENDEND ddf_logic ; ddf_logic ;ARCHITECTUREARCHITECTURE example example OFOF ddf_logic ddf_logic ISISBEGINBEGIN PROCESSPROCESS (clk , d ) -- (clk , d ) --把把把把d d加到敏感表中加到敏感表中加到敏感表中加到敏感表中BEGINBEGINIF IF clk=‘1’thenclk=‘1’thenq <= d; q <= d; END IF;END IF; END PROCESSEND PROCESS; ;ENDEND example; example;高电平敏感的高电平敏感的D锁存器;锁存器;低电平敏感:低电平敏感:clk=‘0’ 上升沿触发上升沿触发上升沿触发上升沿触发D D触发器触发器触发器触发器高电平有效的高电平有效的高电平有效的高电平有效的D D锁存器锁存器锁存器锁存器 四、同步时序逻辑和异步时序逻辑四、同步时序逻辑和异步时序逻辑四、同步时序逻辑和异步时序逻辑四、同步时序逻辑和异步时序逻辑例例例例1 1 ::::ENTITYENTITY CNT4B CNT4B ISISPORTPORT ( CLK ( CLK,,,, : IN STD_LOGIC; : IN STD_LOGIC; OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); COUT : OUT STD_LOGIC ); ENDEND CNT4B; CNT4B;ARCHITECTUREARCHITECTURE behav behav OFOF CNT4B CNT4B ISIS SIGNALSIGNAL Q : STD_LOGIC_VECTOR(3 DOWNTO 0); Q : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINBEGIN P_REG: P_REG:PROCESSPROCESS(CLK)(CLK) BEGINBEGIN IFIF CLK'EVENT AND CLK = '1' CLK'EVENT AND CLK = '1' THENTHEN Q <= Q + 1; Q <= Q + 1; END IF;END IF; OUTY <= Q; OUTY <= Q; END PROCESS END PROCESS P_REG ;P_REG ;COUT <= Q(0) AND Q(1) AND Q(2) AND Q(3); COUT <= Q(0) AND Q(1) AND Q(2) AND Q(3); ENDEND behav; behav;ØØ4 4位二进制加法计数器。

      位二进制加法计数器位二进制加法计数器位二进制加法计数器ØØ一个单一时钟信号的进程对应产一个单一时钟信号的进程对应产一个单一时钟信号的进程对应产一个单一时钟信号的进程对应产生同步时序逻辑生同步时序逻辑生同步时序逻辑生同步时序逻辑ØØ异步时序逻辑最好用多个进程语异步时序逻辑最好用多个进程语异步时序逻辑最好用多个进程语异步时序逻辑最好用多个进程语句来实现句来实现句来实现句来实现 例例例例2 2 :异步时序逻辑:异步时序逻辑:异步时序逻辑:异步时序逻辑 ARCHITECTUREARCHITECTURE behav behav OFOF CNT4B CNT4B ISIS SIGNALSIGNAL Q1,Q2 : STD_LOGIC; Q1,Q2 : STD_LOGIC;BEGINBEGIN PRO1PRO1: :PROCESSPROCESS(CLK)(CLK) BEGINBEGIN IFIF CLK'EVENT AND CLK = '1' CLK'EVENT AND CLK = '1' THENTHEN Q1 <= NOT ( Q2 OR A); Q1 <= NOT ( Q2 OR A); END IF;END IF; END PROCESS END PROCESS PRO1PRO1 ; ; -- --进程标号,不参加综合进程标号,不参加综合进程标号,不参加综合进程标号,不参加综合 PRO2:PRO2:PROCESSPROCESS(Q1)(Q1) BEGIN BEGIN IF IF Q1'EVENT AND Q1 = '1' Q1'EVENT AND Q1 = '1' THENTHEN Q2 <= D; Q2 <= D; END IF;END IF; <= Q2; <= Q2; END PROCESS END PROCESS PRO2PRO2 ; ; -- --两个时钟进程通过两个时钟进程通过两个时钟进程通过两个时钟进程通过Q1Q1进行通信进行通信进行通信进行通信ENDEND behav; behav; 2.52.5 全加器全加器VHDLVHDL设计设计一、半加器、半加器\ \半减器的半减器的VHDLVHDL描述和块语句描述和块语句输入值输入值半加器(半加器(A+BA+B))半减器(半减器(A A--B B))A AB BSumSumCarryCarryDifferenceDifferenceBorrowBorrow0 00 00 00 00 00 00 01 11 10 01 11 11 10 01 10 01 10 01 11 10 01 10 00 0半加器:半加器:半加器:半加器:Sum = A Sum = A    B BCarry = ABCarry = AB半减器:半减器:半减器:半减器:Difference = A Difference = A    B BBorrow = ABBorrow = AB ENTITY test isPORT(A,B: IN Std_Logic;Carry,Sum : OUT Std_Logic;Borrow :OUT Std_Logic;Difference :OUT Std_Logic);END test;ARCHITECTURE a OF test ISBEGINHalf_Adder : BlockBeginSum <= A Xor B; Carry <= A and B;End Block Half_Adder;Half_Subtractor: BlockBeginDifference <= A Xor B;Borrow <= Not A and B;End Block Half_Subtractor;END a; v用于实现用于实现VHDLVHDL中的模块化设计的又一个方式中的模块化设计的又一个方式v可以把多个并行语句打包,形成构造体中的一可以把多个并行语句打包,形成构造体中的一个子模块个子模块1.1.块语句说明块语句说明2. 2.块语句基本格式块语句基本格式块标号块标号: BLOCK <块说明部分块说明部分>BEGIN <并行语句区并行语句区>END BLOCK [块标号块标号] ; 块语句描述的模块之间是并行的块语句描述的模块之间是并行的块语句描述的模块之间是并行的块语句描述的模块之间是并行的二、二、CASECASE语句描述的半加器语句描述的半加器ENTITY testtesttesttest isPORT(A,B: IN Std_Logic;(A,B: IN Std_Logic;(A,B: IN Std_Logic;(A,B: IN Std_Logic;Carry,Sum : OUT Std_Logic);Carry,Sum : OUT Std_Logic);Carry,Sum : OUT Std_Logic);Carry,Sum : OUT Std_Logic);END test;test;test;test;ARCHITECTURE a a a a OF test test test test IS SIGNAL X : STD_LOGIC_VECTOR(1 DOWNTO 0);STD_LOGIC_VECTOR(1 DOWNTO 0);STD_LOGIC_VECTOR(1 DOWNTO 0);STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN PROCESS (X)PROCESS (X)PROCESS (X)PROCESS (X) BEGIN BEGIN BEGIN BEGIN CASECASECASECASE X X X X ISISISISWHENWHENWHENWHEN "00 "00 "00 "00““““ => Sum<= => Sum<= => Sum<= => Sum<=‘‘‘‘0 0 0 0’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "01" => Sum<= "01" => Sum<= "01" => Sum<= "01" => Sum<=‘‘‘‘1 1 1 1’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "10 "10 "10 "10””””=> Sum<==> Sum<==> Sum<==> Sum<=‘‘‘‘1 1 1 1’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "11 "11 "11 "11””””=> Sum<==> Sum<==> Sum<==> Sum<=‘‘‘‘0 0 0 0’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘1 1 1 1’’’’; ; ; ; WHEN OTHERSWHEN OTHERSWHEN OTHERSWHEN OTHERS => NULL; => NULL; => NULL; => NULL; END CASE;END CASE;END CASE;END CASE;END PROCESS;END PROCESS;END PROCESS;END PROCESS;A AB BSumSumCarryCarry0 00 00 00 00 01 11 10 01 10 01 10 01 11 10 01 1选择信号选择信号不同选择值不同选择值不同流向不同流向 1. 1.CASE语句的基本格式语句的基本格式CASE CASE CASE CASE 表达式表达式表达式表达式 ISISISISWHENWHENWHENWHEN value_1value_1value_1value_1 => => => => 顺序语句顺序语句顺序语句顺序语句1;1;1;1;……………………; ; ; ;顺序语句顺序语句顺序语句顺序语句m ;m ;m ;m ;WHENWHENWHENWHEN value_2value_2value_2value_2 => => => => 顺序语句顺序语句顺序语句顺序语句1;1;1;1;……………………; ; ; ;顺序语句顺序语句顺序语句顺序语句n ;n ;n ;n ;……………………WHEN OTHERSWHEN OTHERSWHEN OTHERSWHEN OTHERS => => => => ……………………; ; ; ;END CASE;END CASE;END CASE;END CASE;• •WHENWHENWHENWHEN条件句中的选择值必在表达式的取值范围内。

      条件句中的选择值必在表达式的取值范围内条件句中的选择值必在表达式的取值范围内条件句中的选择值必在表达式的取值范围内• •除非所有条件句中的选择值能完整覆盖除非所有条件句中的选择值能完整覆盖除非所有条件句中的选择值能完整覆盖除非所有条件句中的选择值能完整覆盖CASECASECASECASE语句中语句中语句中语句中表达式的取值,否则最末一个条件句中的选择必须表达式的取值,否则最末一个条件句中的选择必须表达式的取值,否则最末一个条件句中的选择必须表达式的取值,否则最末一个条件句中的选择必须用用用用“ “OTHERSOTHERSOTHERSOTHERS” ”表示• •CASECASECASECASE语句中每一条件句的选择值只能出现一次,不语句中每一条件句的选择值只能出现一次,不语句中每一条件句的选择值只能出现一次,不语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现能有相同选择值的条件语句出现能有相同选择值的条件语句出现能有相同选择值的条件语句出现 2. 2.CASE语句说明语句说明 • •CASECASECASECASE语句执行中必须选中,且只能选中所列条件语句执行中必须选中,且只能选中所列条件语句执行中必须选中,且只能选中所列条件语句执行中必须选中,且只能选中所列条件语句中的一条。

      语句中的一条语句中的一条语句中的一条PROCESS (X)PROCESS (X)PROCESS (X)PROCESS (X) BEGIN BEGIN BEGIN BEGIN CASECASECASECASE X X X X ISISISISWHENWHENWHENWHEN "00 "00 "00 "00““““ => Sum<= => Sum<= => Sum<= => Sum<=‘‘‘‘0 0 0 0’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "01" => Sum<= "01" => Sum<= "01" => Sum<= "01" => Sum<=‘‘‘‘1 1 1 1’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "10 "10 "10 "10””””=> Sum<==> Sum<==> Sum<==> Sum<=‘‘‘‘1 1 1 1’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘0 0 0 0’’’’; ; ; ; WHENWHENWHENWHEN "11 "11 "11 "11””””=> Sum<==> Sum<==> Sum<==> Sum<=‘‘‘‘0 0 0 0’’’’;Carry<=;Carry<=;Carry<=;Carry<=‘‘‘‘1 1 1 1’’’’; ; ; ; WHEN OTHERSWHEN OTHERSWHEN OTHERSWHEN OTHERS => NULL; => NULL; => NULL; => NULL; END CASE;END CASE;END CASE;END CASE;END PROCESS;END PROCESS;END PROCESS;END PROCESS; 二、全加器的二、全加器的VHDLVHDL描述和元件例化语句描述和元件例化语句S = A S = A    B B    C CCY = AB+AC+BCCY = AB+AC+BC LIBRARYLIBRARYLIBRARYLIBRARY IEEE ; IEEE ; IEEE ; IEEE ;USEUSEUSEUSE IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ; IEEE.STD_LOGIC_1164.ALL ;USEUSEUSEUSE IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_ARITH.ALL; IEEE.STD_LOGIC_ARITH.ALL;USEUSEUSEUSE IEEE.STD_LOGIC_UNSIGNED.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYENTITYENTITYENTITY FullAdderFullAdderFullAdderFullAdder isisisisPORTPORTPORTPORT(A,B,C: IN Std_Logic;(A,B,C: IN Std_Logic;(A,B,C: IN Std_Logic;(A,B,C: IN Std_Logic; CY : OUT Std_LogicCY : OUT Std_LogicCY : OUT Std_LogicCY : OUT Std_Logic;;;; S : OUT Std_Logic);S : OUT Std_Logic);S : OUT Std_Logic);S : OUT Std_Logic);ENDENDENDEND FullAdderFullAdderFullAdderFullAdder; ; ; ;ARCHITECTUREARCHITECTUREARCHITECTUREARCHITECTURE a a a a OFOFOFOF FullAdderFullAdderFullAdderFullAdder ISISISISBEGINBEGINBEGINBEGIN S <= A Xor B Xor C;S <= A Xor B Xor C;S <= A Xor B Xor C;S <= A Xor B Xor C; CY CY CY CY <= (A and B) OR (A and C) OR (B and C);<= (A and B) OR (A and C) OR (B and C);<= (A and B) OR (A and C) OR (B and C);<= (A and B) OR (A and C) OR (B and C);EndEndEndEnd a;a;a;a;A BSCYC 1.1.1.1.4 4位串行进位加法器位串行进位加法器 用用例化语句例化语句实现实现4 4位串行进位串行进位加法器。

      位加法器 ENTITYENTITY Adder_4Adder_4 isisPORTPORT( A ,B: IN Std_Logic_Vector(3 Downto 0);( A ,B: IN Std_Logic_Vector(3 Downto 0); S S: OUT Std_Logic_Vector(3 Downto 0);: OUT Std_Logic_Vector(3 Downto 0); C : C : INOUTINOUTStd_Logic_Vector(4 Downto 0) );Std_Logic_Vector(4 Downto 0) );ENDEND Adder_4; Adder_4;FullAdderFullAdderFullAdderFullAdderS(3)S(2)S(1)S(0)C(4)C(3)C(2)C(1)C(0)A(3) B(3)A(2) B(2)A(1) B(1)A(0) B(0)ABCSCYABCSCYABCSCYABCSCY ARCHITECTUREARCHITECTURE a a OFOF Adder_4 Adder_4 ISIS ComponentComponent FullAdder FullAdder PortPort ( A ( A : IN : INStd_Logic;Std_Logic; B B : IN : INStd_Logic;Std_Logic; C C : IN : INStd_Logic;Std_Logic; CY : OUT CY : OUT Std_Logic;Std_Logic; S S : OUT : OUT Std_Logic );Std_Logic ); End Component End Component ; ;BEGINBEGIN 元件说明部分元件说明部分保留字保留字元件名称元件名称端口端口说明说明A BSCYC BEGINBEGINBEGINBEGIN U0: U0: U0: U0: FulladderFulladderFulladderFulladder Port Port Port Port Map Map Map Map (A=>A(0), (A=>A(0), (A=>A(0), (A=>A(0), B=>B(0), B=>B(0), B=>B(0), B=>B(0), C=>C(0), C=>C(0), C=>C(0), C=>C(0), Cy Cy Cy Cy =>C(1), =>C(1), =>C(1), =>C(1), S S S S => S(0));=> S(0));=> S(0));=> S(0)); U1: Fulladder U1: Fulladder U1: Fulladder U1: Fulladder Port Map Port Map Port Map Port Map (A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1)); U2: Fulladder U2: Fulladder U2: Fulladder U2: Fulladder Port Map Port Map Port Map Port Map (A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2)); U3: Fulladder U3: Fulladder U3: Fulladder U3: Fulladder Port Map Port Map Port Map Port Map (A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3)); C(0) <= '0'; C(0) <= '0'; C(0) <= '0'; C(0) <= '0';ENDENDENDEND a; a; a; a;例化名例化名元件映射部分元件映射部分元件名元件名保留字保留字FullAdderFullAdderFullAdderFullAdderS(3)S(2)S(1)S(0)C(4)C(3)C(2)C(1)C(0)A(3) B(3)A(2) B(2)A(1) B(1)A(0) B(0)ABCSCYABCSCYABCSCYABCSCY BEGINBEGINBEGINBEGIN U0: U0: U0: U0: FulladderFulladderFulladderFulladder Port Port Port Port Map Map Map Map (A=>A(0), (A=>A(0), (A=>A(0), (A=>A(0), B=>B(0), B=>B(0), B=>B(0), B=>B(0), C=>C(0), C=>C(0), C=>C(0), C=>C(0), Carry =>C(1), Sum => S(0));Carry =>C(1), Sum => S(0));Carry =>C(1), Sum => S(0));Carry =>C(1), Sum => S(0)); U1: Fulladder U1: Fulladder U1: Fulladder U1: Fulladder Port Map Port Map Port Map Port Map (A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1));(A(1),B(1),C(1),C(2),S(1)); U2: Fulladder U2: Fulladder U2: Fulladder U2: Fulladder Port Map Port Map Port Map Port Map (A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2));(A(2),B(2),C(2),C(3),S(2)); U3: Fulladder U3: Fulladder U3: Fulladder U3: Fulladder Port Map Port Map Port Map Port Map (A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3));(A(3),B(3),C(3),C(4),S(3)); C(0) <= '0'; C(0) <= '0'; C(0) <= '0'; C(0) <= '0';ENDENDENDEND a; a; a; a;FullAdderFullAdderFullAdderFullAdderS(3)S(2)S(1)S(0)C(4)C(3)C(2)C(1)C(0)A(3) B(3)A(2) B(2)A(1) B(1)A(0) B(0)ABCSCYABCSCYABCSCYABCSCY名字关联名字关联位置关联位置关联 2.2.2.2.元件例化语句说明元件例化语句说明元件例化语句说明元件例化语句说明vv元件例化语句实现元件的引用元件例化语句实现元件的引用元件例化语句实现元件的引用元件例化语句实现元件的引用vv包括元件说明、元件映射两部分包括元件说明、元件映射两部分包括元件说明、元件映射两部分包括元件说明、元件映射两部分ARCHITECTURE a OF Adder_4 ISARCHITECTURE a OF Adder_4 ISARCHITECTURE a OF Adder_4 ISARCHITECTURE a OF Adder_4 IS Component FullAdderComponent FullAdderComponent FullAdderComponent FullAdder Port ( A Port ( A Port ( A Port ( A : IN : IN : IN : INStd_Logic;Std_Logic;Std_Logic;Std_Logic; B B B B : IN : IN : IN : INStd_Logic;Std_Logic;Std_Logic;Std_Logic; C C C C : IN : IN : IN : INStd_Logic;Std_Logic;Std_Logic;Std_Logic; CY : OUT CY : OUT CY : OUT CY : OUT Std_Logic;Std_Logic;Std_Logic;Std_Logic; S S S S : OUT : OUT : OUT : OUT Std_Logic );Std_Logic );Std_Logic );Std_Logic ); End Component ; End Component ; End Component ; End Component ;BEGINBEGINBEGINBEGIN U0: U0: U0: U0: Fulladder Fulladder Fulladder Fulladder Port Port Port Port Map Map Map Map (A=>A(0), (A=>A(0), (A=>A(0), (A=>A(0), B=>B(0), B=>B(0), B=>B(0), B=>B(0), C=>C(0), C=>C(0), C=>C(0), C=>C(0), Carry Carry Carry Carry =>C(1), =>C(1), =>C(1), =>C(1), Sum => S(0));Sum => S(0));Sum => S(0));Sum => S(0)); U1: Fulladder Port Map (A(1),B(1),C(1),C(2),S(1)); U1: Fulladder Port Map (A(1),B(1),C(1),C(2),S(1)); U1: Fulladder Port Map (A(1),B(1),C(1),C(2),S(1)); U1: Fulladder Port Map (A(1),B(1),C(1),C(2),S(1)); U2: Fulladder Port Map (A(2),B(2),C(2),C(3),S(2)); U2: Fulladder Port Map (A(2),B(2),C(2),C(3),S(2)); U2: Fulladder Port Map (A(2),B(2),C(2),C(3),S(2)); U2: Fulladder Port Map (A(2),B(2),C(2),C(3),S(2)); U3: Fulladder Port Map (A(3),B(3),C(3),C(4),S(3)); U3: Fulladder Port Map (A(3),B(3),C(3),C(4),S(3)); U3: Fulladder Port Map (A(3),B(3),C(3),C(4),S(3)); U3: Fulladder Port Map (A(3),B(3),C(3),C(4),S(3)); C(0) <= '0'; C(0) <= '0'; C(0) <= '0'; C(0) <= '0';END a;END a;END a;END a; v元件例化语句元件例化语句是在是在VHDLVHDL设计设计中实现中实现层次化层次化设计设计的重要途的重要途径。

      径v可以在当前的可以在当前的VHDLVHDL模块设计模块设计中将现成的硬中将现成的硬件描述语言设件描述语言设计的实体作为计的实体作为元件引用元件引用3.3.3.3.举例:比较举例:比较A A、、B B是否相等是否相等 NXOR2NXOR2 vv 图中引用的元件:图中引用的元件: ENTITYENTITY eqcomp4 is eqcomp4 is PORTPORT(A, B(A, B :IN:INStd_Logic_Vector(3 Downto 0);Std_Logic_Vector(3 Downto 0); Y: OUT Y: OUT Std_LogicStd_Logic););ENDEND eqcomp4; eqcomp4;ARCHITECTUREARCHITECTURE a a OFOF eqcomp4 eqcomp4 ISIS Component AND4Component AND4 Port (a, b, c, d: INPort (a, b, c, d: INStd_Logic;Std_Logic; y y : OUT: OUT Std_Logic);Std_Logic); End Component; End Component; Component XNOR2Component XNOR2 Port (M, N :IN Port (M, N :IN Std_Logic;Std_Logic;P :OUTP :OUT Std_Logic );Std_Logic ); End Component; End Component; signal X: Std_Logic_Vector(3 to 0);signal X: Std_Logic_Vector(3 to 0);vv比较相等电路的比较相等电路的VHDLVHDL程序:程序:NXOR2NXOR2 BEGINBEGIN U0: XNOR2 Port Map (A(0),B(0),X(0)); U0: XNOR2 Port Map (A(0),B(0),X(0)); U1: XNOR2 Port Map (A(1),B(1),X(1)); U1: XNOR2 Port Map (A(1),B(1),X(1)); U2: XNOR2 Port Map (A(2),B(2),X(2)); U2: XNOR2 Port Map (A(2),B(2),X(2)); U3: XNOR2 Port Map (A(3),B(3),X(3)); U3: XNOR2 Port Map (A(3),B(3),X(3)); U4: AND4 Port Map (X(0),X(1),X(2),X(3), Y ); U4: AND4 Port Map (X(0),X(1),X(2),X(3), Y );ENDEND a; a; 2.6 VHDL2.6 VHDL文本输入设计方法初步及文本输入设计方法初步及QuartusIIQuartusII工具软件使用工具软件使用 为工程设计建立文件夹(新建工程) 输入设计项目文件和存盘 选定目标器件 启动编译 建立仿真波形文件 仿真测试和波形分析 引脚锁定并编译 编程下载/配置 硬件测试 QuartusII工具软件使用及安装 。

      点击阅读更多内容
      相关文档
      2026年一级消防工程师考试《消防安全综合能力》预习卷.docx 2025年执业药师《药学专业知识(一)》预测试卷一.docx 2026年证券从业资格考试《证券市场基本法律法规》提分卷二.docx 2025高考真题--全国II卷高考英语真题【原卷+听力音频+听力原文+答案】.docx 2024年高考真题--新课标全国ⅠⅠ卷【英语】真题及答案(含听力音频).docx 2025年秋江苏开放大学农业生态工程060165形考作业123答案.docx 2026年一级造价工程师考试《建设工程造价案例分析(土建专业)》模拟卷.docx 2024年一级建造师-港口与航道工程管理与实务-2024年真题解析.docx 2026年一级建造师考试《公路工程管理与实务》破题卷.docx 2026年证券从业资格考试《金融市场基础知识》提分卷二.docx 2025年秋江开机电设备故障诊断与维修050096第1次形考作业带答案.docx 2025年高考真题---山东省高考真题地理试卷(含答案).docx 2025年高考真题--山东省生物高考真题(含答案).docx 2025年秋江苏开放⼤学建筑材料第⼀次作业答案.docx 2025年高考真题--云南高考地理真题(含答案).docx 2025高考真题--北京卷语文真题(含答案).docx 2025年秋江苏开放⼤学机电设备伺服与变频应⽤第1次形考作业答案.docx 2025年秋江苏开放⼤学机械创新设计060260过程性考核作业1.docx 2025年秋江苏开放大学 知识产权文献检索与应用060933过程性考试.docx 2025年高考云南物理真题(答案参考).docx
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.