《EDA技术及应用VHDL设计初步课件》由会员分享,可在线阅读,更多相关《EDA技术及应用VHDL设计初步课件(58页珍藏版)》请在金锄头文库上搜索。
1、EDA技术及应用主讲:牛军浩主讲:牛军浩第四章第四章 VHDL设计初步设计初步4.1 多路选择器的VHDL描述4.2 寄存器描述及其VHDL语言现象4.3 1位二进制全加器的VHDL描述4.4 计数器设计4.5 一般加法计数器设计教学目的教学目的通过简单、完整而典型的通过简单、完整而典型的VHDL设计示例,初步了解用设计示例,初步了解用VHDL表达和表达和设计电路的方法。设计电路的方法。 4.1 多路选择器的VHDL描述1. 2选1多路选择器的示意图和真值表absyax0axb1babys01当s=0时,y=a当s=1时,y=b4.1 多路选择器的VHDL描述2. 2选1多路选择器实现原理图形
2、输入法001y=a0a110y=bb04.1 多路选择器的VHDL描述2. 2选1多路选择器实现VHDL文本输入法1实实体体结结构构体体实体名称实体名称端口名称端口名称流动方向流动方向数据类型数据类型结构体名结构体名功能描述功能描述4.1 多路选择器的VHDL描述2. 2选1多路选择器实现VHDL文本输入法2实实体体结结构构体体4.1 多路选择器的VHDL描述2. 2选1多路选择器实现VHDL文本输入法3实实体体结结构构体体4.1 多路选择器的VHDL描述3. 相关语句结构和语法实体表达结构ENTITY、IS、PORT、END都是描述实体的关键词,不分大写小写,但是为了便于阅读,一般在设计中将
3、关键词使用大写,自定义使用小写。4.1 多路选择器的VHDL描述3. 相关语句结构和语法实体名称实体名表达的是该设计电路的器件名,通常根据相应电路的功能来确定。不能用数字或中文、不能与工具库中已定义的元件名、不能数字开头。4.1 多路选择器的VHDL描述3. 相关语句结构和语法实体名称举例mux4174LS04 and2adder4bnot4输入与门4.1 多路选择器的VHDL描述3. 相关语句结构和语法端口语句和名称端口以PORT();来引导端口模式有:IN、OUT、INOUT、BUFFER数据类型有:BOOLEAN、BIT、INTEGER、CHAR型等4.1 多路选择器的VHDL描述3.
4、相关语句结构和语法结构体表达结构ARCHITECTURE、OF、IS、BEGIN、END都是描述结构体的关键词。功能描述语句:并行语句,顺序语句并行语句:WHEN_ELSE,逻辑操作赋值顺序语句:IF_THEN_ELSE功能描述语句4.1 多路选择器的VHDL描述3. 相关语句结构和语法文件名称使用VHDL语句编写:后缀是.vhd使用Verilog HDL语句编写:后缀是.v使用原理图输入设计:后缀是.gdf文件名称建议和实体名称相同4.1 多路选择器的VHDL描述4. 思考y = ab + c_思考1:画出真值表a b c yxx 1 10x 0 01 b 0 b_4.1 多路选择器的VHD
5、L描述4. 思考y = ab + c_思考2:使用原理图方式实现上式功能4.1 多路选择器的VHDL描述4. 思考y = ab + c_思考3:使用VHDL实现上式功能4.1 多路选择器的VHDL描述5. 赋值符号Y = (a AND (NOT s) or (b AND s)赋值符号4.1 多路选择器的VHDL描述6. 各种表达式的比较-布尔逻辑表达式y = (a AND (NOT s) OR (b AND s)4.1 多路选择器的VHDL描述6. 各种表达式的比较-条件赋值表达式y = a WHEN s1=0 ELSE b ;赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHE
6、N 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式 ;4.1 多路选择器的VHDL描述7. 各种表达式的比较-IF_THEN_ELSE表达IF (s=0) THEN y=a; ELSE y=b;END IF;IF 条件表达式 THEN 赋值语句;ELSIF 条件表达式 THEN 赋值语句;ELSIF 条件表达式 THEN 赋值语句;ELSE 条件表达式 ;END IF;4.1 多路选择器的VHDL描述8. 小结4.1 节中主要通过多路选择器的实现过程,学习了VHDL描述的基本语言结构,以及组合逻辑电路的功能描述方法布尔逻辑表达式WHEN_ELSE条件表达式IF_THEN_EL
7、SE表达式4.2 寄存器描述及其VHDL语言1. 教学目的通过D触发器的VHDL实现过程,学习时序电路时序电路的VHDL描述方法。4.2 寄存器描述及其VHDL语言2. D触发器的功能描述当CP=0时,触发器不工作,处于维持状态。当CP=1时,它的功能如下:当D=0时,次态=0,当D=1时,次态=1。4.2 寄存器描述及其VHDL语言3. VHDL实现LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 ISPORT( clk : IN STD_LOGIC; d: IN STD_LOGIC;q: OUT STD_LOGIC);END dff1
8、;ARCHITECTURE bhv OF dff1 ISSIGNAL q1 : STD_LOGIC;BEGIN PROCESS (clk,q1) BEGINIF CLKEVENT AND CLK=1 THEN q1 = d;END IF; END PROCESS; q=q1;END bhv;引用库数据类型内部节点时钟条件4.2 寄存器描述及其VHDL语言4. VHDL实现引用库LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;LIBRARY 设计库名称;USE 设计库.程序包名.ALL;数据类型、函数等放在设计库中和程序包中。因为使用了STD_LOGIC的数据类
9、型,而该数据类型放置在设计库IEEE的STD_LOGIC_1164程序包中,所以在使用前需要先申明。4.2 寄存器描述及其VHDL语言4. VHDL实现数据类型PORT(clk : IN STD_LOGIC; d: IN STD_LOGIC;q: OUT STD_LOGIC);BIT的定义:TYPE BIT IS (0, 1);STD_LOGIC的定义:TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-)4.2 寄存器描述及其VHDL语言4. VHDL实现信号定义(内部节点)SIGNALq1 : STD_LOGIC;不必定义端口模式(如IN、OUT)目的是为了设计更大的时
10、序电路qq1X1PORT(clk : IN STD_LOGIC; d: IN STD_LOGIC;q: OUT STD_LOGIC);q=q1;4.2 寄存器描述及其VHDL语言4. VHDL实现时钟表达式IF clkEVENT AND clk=1检测时钟信号的上升沿表示clk信号有变化,并且变化后为14.2 寄存器描述及其VHDL语言4. VHDL实现存储功能的产生不完整的条件语句实现存储功能元件如果是完整的条件语句,则只能构成逻辑电路IF clkEVENT AND clk=1THEN q1 = d;END IF;4.2 寄存器描述及其VHDL语言5. 实现时序电路的不同描述IF (clkE
11、VENT) AND (clk=1) AND (clkLAST_VALUE=0)IF (clk=1) AND (clkLAST_VALUE=0)IF rising_edge(clk) -STD_LOGIC_1164定义定义Wait until clk = 1;4.2 寄存器描述及其VHDL语言6. 同步时序电路和异步时序电路移位寄存器移位寄存器二进制计数器二进制计数器只需一个时钟进程只需一个时钟进程需两个时钟进程需两个时钟进程4.2 寄存器描述及其VHDL语言6. 同步时序电路和异步时序电路PROCESS (clk)BEGIN*END PROCESS;PROCESS (q)BEGIN*END P
12、ROCESS;4.3 1位二进制全加器的VHDL描述1. 半加器功能描述全加器可由两个半加器和一个或门构成半加器是最简单的加法器,把半加器是最简单的加法器,把2个个1位二进位二进制数相加,不考虑低位的进位制数相加,不考虑低位的进位 ,产生一个,产生一个2位和,和的低位叫半加和,高位叫半加进位位和,和的低位叫半加和,高位叫半加进位半加器由一个与门,一个或门和一个异或门构成4.3 1位二进制全加器的VHDL描述2. 半加器真值表及电路图abco so0000010110011110co = a AND bso = a XOR b4.3 1位二进制全加器的VHDL描述3. 半加器VHDL描述方法布尔
13、表达式LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS PORT( a,b : IN STD_LOGIC; co,so: OUT STD_LOGIC);END h_adder;ARCHITECTURE a OF h_adder ISBEGINco = a AND b;so = a XOR b;END a;4.3 1位二进制全加器的VHDL描述3. 半加器VHDL描述方法真值表表达方式abco so00000101100111104.3 1位二进制全加器的VHDL描述4. 全加器图形输入法考虑低位进位的情况下,考虑低位进位的情况
14、下,2个输入和个输入和4.3 1位二进制全加器的VHDL描述5. 全加器VHDL描述或门通过顶层调用底层元件,实现全加器,下面使用通过顶层调用底层元件,实现全加器,下面使用VHDL描述实描述实现或门逻辑。现或门逻辑。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2aIS PORT( a,b : IN STD_LOGIC; c : OUT STD_LOGIC);END or2a;ARCHITECTURE a OF or2aISBEGIN c = a or b;END a;4.3 1位二进制全加器的VHDL描述5. 全加器VHDL描述顶层设计通
15、过顶层调用底层元件,实现全加器通过顶层调用底层元件,实现全加器def4.3 1位二进制全加器的VHDL描述6. 新学内容总结a. 标准逻辑矢量数据类型标准逻辑矢量数据类型b.并置操作符并置操作符c. CASE语句语句d. 顶层描述及例化语句顶层描述及例化语句4.3 1位二进制全加器的VHDL描述6. 新学内容总结标准逻辑矢量数据类型STD_LOGIC_VECTOR 标准一维数组,标准一维数组,数组中每一位的数据类型都是数组中每一位的数据类型都是STD_LOGICSTD_LOGIC 标准位类型标准位类型定义方法:定义方法:A : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)B
16、 : OUT STD_LOGIC_VECTOR(1 TO 5)赋值方法:赋值方法:A = “01010101”; A(7 DOWNTO 4 ) =“0101”;4.3 1位二进制全加器的VHDL描述6. 新学内容总结并置操作符并置操作符并置操作符&的作用:的作用:将操作数或者数组合并成新的数组将操作数或者数组合并成新的数组操作符操作符 举例举例 功能功能= c, IF(s=0)THEN比较操作符比较操作符 & abc = a & b并置操作符并置操作符 使用方法:使用方法:0 & 1 & a & d(1)定义信号定义信号注释操作符注释操作符 4.3 1位二进制全加器的VHDL描述6. 新学内容
17、总结CASE语句利用利用CASE语句可以直接表达电路的逻辑真值表,语句可以直接表达电路的逻辑真值表,有效直观有效直观功能表达语句功能表达语句 功能功能cain,b=bin,co=d,so=e);u2 : h_adder2 PORT MAP(a=e,b=cin,co=f,so=sum);u3 : or2a PORT MAP(a=d,b=f,c=cout);1.例化名相当于电子电路里的标号例化名相当于电子电路里的标号2.元件名即调用的元件实体的名称,相对于器件名称元件名即调用的元件实体的名称,相对于器件名称3.PORT MAP表示端口映射,端口到外部引脚或引线表示端口映射,端口到外部引脚或引线的连
18、接关系的连接关系4.两个例化元件之间不能直接连接两个例化元件之间不能直接连接5. = 是连接符号是连接符号例化名例化名: 元件名元件名 PORT MAP(端口名端口名=X, 端口名端口名=Y, )4.3 1位二进制全加器的VHDL描述7. 思考 习题4-2 思考 习题4-3 思考 习题4-44.4 计数器设计1. 计数器的VHDL描述BUFFERINTEGERq=q+14.4 计数器设计1. 计数器的VHDL描述BUFFERBUFFERINOUTINOUT元件元件等效于在结构体等效于在结构体BEGIN之前定义了一个信号,供反馈使用之前定义了一个信号,供反馈使用4.4 计数器设计1. 计数器的V
19、HDL描述INTEGERINTEGERBITSTD_LOGICSTD_LOGIC_VECTOR1.INTEGER类型可用类型可用32位有符号的二进制数表示,取位有符号的二进制数表示,取值范围:值范围:-2147483647+21474836472.INTEGER必须有必须有RANGE限定范围,否则无法综合限定范围,否则无法综合3.VHDL规定加、减等算术符对应的操作数的数据类规定加、减等算术符对应的操作数的数据类型只能是型只能是INTEGER型(除非重载算术操作符)型(除非重载算术操作符)4.NATURAL、POSITIVE是是INTEGER的子类型的子类型5.在语句中在语句中INTEGER类
20、型表达式不加类型表达式不加 4.4 计数器设计1. 计数器的VHDL描述运算符重载4.4 作业1. 端口模式有那些?各有什么区别?2. 习题4-24.5 4位2进制计数器设计1. 带进位计数器的VHDL描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt4 IS PORT( clk : IN STD_LOGIC; q : BUFFER INTEGER RANGE 15 DOWNTO 0; c : OUT STD_LOGIC);END cnt4 ;ARCHITECTURE a OF cnt4 ISBEGINPROCESS(clk)BEGINI
21、F(clkEVENT AND (clk = 1) THEN IF (q 15) THEN q =q +1; c=0;ELSE q = 0; c clk, q = qL, c=s1 );u2: cnt4 PORT MAP(clk = s1 , q = qH, c=cout);END a;4.5 作业1.设计一位十进制计数器,即计数范围09要求:有进位输出2. 使用第一题中的一位十进制计数器,设计3位十进制计数器,即计数范围000999 要求:有进位输出采用顶层设计的方法,调用习题1的设计。4.5 作业1.设计一位十进制计数器,即技术范围09要求:有进位输出LIBRARY IEEE;USE IEE
22、E.STD_LOGIC_1164.ALL;ENTITY cntten IS PORT( clk : IN STD_LOGIC; q : BUFFER INTEGER RANGE 9 DOWNTO 0; c : OUT STD_LOGIC);END cntten ;ARCHITECTURE a OF cntten ISBEGINPROCESS(clk)BEGINIF(clkEVENT AND (clk = 1) THEN IF (q 9) THEN q =q +1; c=0;ELSE q = 0; c clk, q = qL, c=s1 ); u2: cntten PORT MAP(clk = s1 , q = qH, c=s2); u3: cntten PORT MAP(clk = s2 , q = qV, c=cout);END a;