收藏 分享(赏)

电子设计自动化第三讲.ppt

上传人:dzzj200808 文档编号:3357801 上传时间:2018-10-18 格式:PPT 页数:58 大小:2MB
下载 相关 举报
电子设计自动化第三讲.ppt_第1页
第1页 / 共58页
电子设计自动化第三讲.ppt_第2页
第2页 / 共58页
电子设计自动化第三讲.ppt_第3页
第3页 / 共58页
电子设计自动化第三讲.ppt_第4页
第4页 / 共58页
电子设计自动化第三讲.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、电子与通信工程系,上节回顾,VHDL数据对象 信号-重要 变量-重要 常量 VHDL数据类型,电子与通信工程系,上节回顾-信号(Signals),代表连线,Port也是一种信号 没有方向性,可给它赋值,也可当作输入 在Package、Entity、Architecture中定义用= 进行赋值 目标信号名= 表达式AFTER 时间量;用 : = 进行初始化 设定的初始值不可综合,用于仿真 signal count:bit_vector(3 downto 0):=“0011”;,电子与通信工程系,3.变量(Variable),临时数据,没有物理意义只能在Process、Function、 Proc

2、edure中定义,并只在 其内部有效,要使其全局有效,先转换为Signal。 用 := 进行赋值 用 := 进行初始化variable result : std_logic := 0;,电子与通信工程系,信号与变量赋值(差异),【例6-3】 ARCHITECTURE bhv OF DFF3 ISSIGNAL A,B : STD_LOGIC ; BEGINPROCESS (CLK) BEGINIF CLKEVENT AND CLK = 1 THENA = D1 ;B = A ;Q1 = B ;END IF; END PROCESS ; END ;,电子与通信工程系,信号与变量赋值(差异),【例6

3、-4】 . ARCHITECTURE bhv OF DFF3 IS BEGINPROCESS (CLK)VARIABLE A,B : STD_LOGIC ;BEGINIF CLKEVENT AND CLK = 1 THENA := D1 ;B := A ;Q1 = B ;END IF;END PROCESS ; END ;,电子与通信工程系,数据类型,电子与通信工程系,7,2.3.5 词 法,1程序注释,注释从“-”符号开始,到该行末尾结束。,2数字,VHDL语言数字表示法有十进制表示法、二进制表示法和八进制表示法。,(课本P247),电子与通信工程系,8,整数举例:010,1,345_67,

4、3e8浮点数举例:10.0,3.1415,1.2E-3,2.1e+5,其中:整数:= 数字或下划线连接的数字指数:= E + 整数或E - 整数,(1)十进制数表示法,书写格式为:,十进制文字:= 整数.整数 指数,(2)基表示二、八、十六进制数的方法,用“基”表示数的书写格式为:,电子与通信工程系,9,举例:2#10110101# -二进制表示法8#267# -八进制表示法16#8F# -十六进制表示法30 = 3E1 = 16#1E# = 2#11_11#E130.0 = 300.0e-1 = 16#1E.0# = 2#11.11#E+3,上式中:基:= 整数基于基的整数:= 扩展数字 下

5、划线 扩展数字扩展数字:= 数字/字母,以基表示的数:= 基#基于基的整数.基于基的整数 #指数,电子与通信工程系,10,3字符,VHDL中的字符为被单引号括起来的ASCII字符。,其书写格式为:,字符文字:=图形字符,例如:A *,电子与通信工程系,11,4字符串,VHDL中的字符串为被双引号括起来的图形字符序列,可以为空。,其书写格式为:,字符串:=“图形字符”,例如:“A” “ ” “string”,电子与通信工程系,12,位串是被双引号括起来的扩展数字序列,在数字序列前冠以基数说明符。,其书写格式为:,位串文字:=基数说明符“位值”,B为二进制基说明符,O为八进制基说明符,X为十六进制

6、基说明符,例如: B“1111_1101” X“FD” O“375”,5数字位字符串(位矢量),位串的长度等价于二进制数的长度。,位值:=扩展数字 或下划线扩展数字,电子与通信工程系,13,2.3.6 运算操作符,VHDL语言的操作符有5种:,逻辑运算符(LOGICAL),关系运算符(RELATIONAL),算术运算符(ARITHMETIC),并置运算符(CONCATENATION),1逻辑运算符,在VHDL语言中,逻辑运算符有7种:,(课本P256),移位运算符(SHIFT),SYN,适用于BIT、BOOLEAN、STD_LOGIC或BIT_VECTOR,STD_LOGIC_VECTOR,电

7、子与通信工程系,14, NOT 取反 AND 与 OR 或 NAND 与非 NOR 或非 XOR 异或 XNOR 同或,在一个VHDL语句中存在两个逻辑表达式时,左右没有优先级差别(不包括NOT)。一个逻辑式中,先做括号里的运算,再做括号外运算。,逻辑运算符的书写格式为:,(1)a=b AND c AND d AND e; 运算符相同,且是AND,OR,XOR中的一种 (2)a=(b AND c) OR (d AND e);,电子与通信工程系,【例9-21】 SIGNAL a ,b,c : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d,e,f,g : STD

8、_LOGIC_VECTOR (1 DOWNTO 0) ; SIGNAL h,I,j,k : STD_LOGIC ; SIGNAL l,m,n,o,p : BOOLEAN ; . a=b AND c; -b、c 相与后向a赋值,a、b、c的数据类型同属4位长的位矢量 d=e OR f OR g ; - 两个操作符OR相同,不需括号 h=(i NAND j)NAND k ; - NAND不属上述三种算符中的一种,必须加括号 l=(m XOR n)AND(o XOR p); - 操作符不同,必须加括号 h=i AND j AND k ; - 两个操作符都是AND,不必加括号 h=i AND j OR

9、 k ; - 两个操作符不同,未加括号,表达错误 a=b AND e ; - 操作数b 与e的位矢长度不一致,表达错误 h=I OR L ; - I 的数据类型是位STD_LOGIC,而L的数据类型是 . - 布尔量BOOLEAN,因而不能相互作用,表达错误。,电子与通信工程系,16,2关系运算符,VHDL语言中6种关系运算:,(1) 等于 (2) 不等于 (3) 小于 (4) 小于等于 (5) 大于 (6) 大于等于,在VHDL程序设计中运算符有如下规则:,SYN,电子与通信工程系,17,等号“”和不等号“”可以适用所有类型的数据。,小于 “”、小于等于 “”、大于 “”、大于等于 “”适用

10、于整数、实数、位矢量及数组类型的比较。,两个位矢量类型的对象比较时,自左至右,按位比较。,小于等于 “”和代入(信号赋值) “”是相同的,在读VHDL语言的语句时,要根据上下文关系来判断。,在进行关系运算时,左右两边的操作数的数据类型必须相同,电子与通信工程系,18,3算术运算符,VHDL语言有10种算术运算符:,+ 加运算 - 减运算 * 乘运算 / 除运算 REM 取余运算 MOD 求模运算 + 正 - 负 * 指数运算 ABS 取绝对值,SYN,电子与通信工程系,19,算术运算符的使用规则如下:,一元运算的操作数(正、负)可以是任何数值类型(整数、实数、物理量)。,加减运算的操作数可以是

11、整数、实数。对于加、减运算的两个操作数必须类型相同。,乘除的操作数可以同为整数和实数,物理量乘或除以整数仍为物理量,物理量除以同一类型的物理量即可得到一个整数量。,求模和取余的操作数必须是同一整数类型数据。,一个指数的运算符的左操作数可以是任意整数或实数,而右操作数应为一整数。,电子与通信工程系,20,4并置运算符,并置运算符“”用于位的连接。,并置运算符有如下使用规则:,并置运算符可用于位的连接,形成位矢量,并置运算符可用于两位矢量的连接构成更大的位矢量,位的连接也可以用集合体的方法,即将并置符换成逗号,例如:,DATA_C D0 ,SYN,电子与通信工程系,21,5移位运算符,(1)SLL

12、 逻辑左移 (2)SRL 逻辑右移 (3)SLA 算术左移 (4)SRA 算术右移 (5)ROL 循环左移 (6)ROR 循环右移,SYN,数据类型为 BIT, BIT_VECTOR, BOOLEAN,条件:,电子与通信工程系,22,6操作符的运算优先级,NOT ABS * * / MOD REM +(positive) -(negative) + - & SLL SRL SLA SRA ROL ROR = /= = AND OR NAND NOR XOR XNOR,高,低,电子与通信工程系,23,类似于C语言,VHDL中的顺序语句执行顺序与书写顺序一致,赋值语句IF语句CASE语句LOOP语

13、句NEXT语句EXIT语句WAIT语句子程序调用语句RETURN语句NULL语句,2.4.1 顺序语句,Sequential Statements,(课本P276),2.4、VHDL语法基础,电子与通信工程系,24,顺序语句具有如下特征:,顺序语句的功能操作有算术、逻辑运算,信号、变 量的赋值,子程序调用等。,顺序语句只能出现在进程process或子程序中。,顺序语句描述的系统行为有时序流、控制流、条件分支和迭代算法等。,顺序语句用于定义进程、子程序等的算法。,顺序语句是按出现的次序加以执行的。,电子与通信工程系,1 顺序赋值语句,信号赋值语句,变量赋值语句,赋值目标,赋值符号,赋值源,信号或

14、变量,= :=,数值、逻辑或 运算表达式,电子与通信工程系,IF THEN ;ELSIF THEN ;ELSIF THEN ;ELSE ;END IF;,IF语句的一般形式为:,2.IF 语句,IF THEN ;END IF;,IF THEN ;ELSE ;END IF;,电子与通信工程系,27,(1)完整IF语句:,architecture dataflow of mux4 is beginprocess(s,a0,a1,a2,a3)beginif s=“00“ then y=a0;elsif s=“01“ then y=a1;elsif s=“10“ then y=a2;else y=a3

15、;end if;end process; end dataflow;,电子与通信工程系,28,电子与通信工程系,29,(2)不完整IF语句:,library ieee; use ieee.std_logic_1164.all; entity dff_2 isport(clk:in std_logic;d: in std_logic;q: out std_logic); end dff_2;,(课本P74),电子与通信工程系,30,architecture behavioral of dff_2 is signal q1:std_logic; -在芯片内部定义一个数据的暂存节点 beginpro

16、cess(clk)beginif clkevent and clk=1 then q1=d;end if;q=q1; -将内部的暂存数据向端口输出end process; -q=q1; end behavioral;,电子与通信工程系,31,library ieee; use ieee.std_logic_1164.all; entity comp_good isport(a: in std_logic;b: in std_logic;q: out std_logic); end comp_good; architecture one of comp_good is beginprocess(

17、a,b)beginif ab then q=1;else q=0;end if;end process; end one;,电子与通信工程系,32,library ieee; use ieee.std_logic_1164.all; entity comp_bad isport(a: in std_logic;b: in std_logic;q: out std_logic); end comp_bad; architecture one of comp_bad is beginprocess(a,b)beginif ab then q=1;elsif ab then q=0;end if;e

18、nd process; end one;,电子与通信工程系,33,电子与通信工程系,34,entity mux4_3 isport(input:in std_logic_vector(3 downto 0);sel: in std_logic_vector(1 downto 0);q: out std_logic); end mux4_3; architecture dataflow of mux4_3 is beginprocess(input,sel)beginif sel=“00“ then q=input(0);elsif sel=“01“ then q=input(1);elsif

19、sel=“10“ then q=input(2);else q=input(3);end if;end process; end dataflow;,电子与通信工程系,35,电子与通信工程系,36,library ieee; use ieee.std_logic_1164.all; entity encoder_2 isport(a,b,c,d,e,f,g,h:in std_logic;codeout: out std_logic_vector(2 downto 0); end encoder_2;,电子与通信工程系,37,architecture behavioral of encoder_

20、2 is beginprocess(a,b,c,d,e,f,g,h)beginif h=1 then codeout=“111“;elsif g=1 then codeout=“110“;elsif f=1 then codeout=“101“;elsif e=1 then codeout=“100“;elsif d=1 then codeout=“011“;elsif c=1 then codeout=“010“;elsif b=1 then codeout=“001“;elsif a=1 then codeout=“000“;else codeout=“ZZZ“; end if; end

21、process; end behavioral;,WHEN语句,电子与通信工程系,38,电子与通信工程系,IF语句,注意如果if引导event代表时钟,此时不能有else复句 用于组合逻辑的if,如果没有else付句,一定要在IF语句前面有缺省赋值,否则会造成不需要的latch,电子与通信工程系,CASE语句,CASE语句的结构如下:CASE IS WHEN ; WHEN | ; WHEN ; WHEN OTHERS ; END CASE;,多条件选择值的一般表达式为:选择值 |选择值 ,选择值可以有四种不同的表达方式:单个普通数值,如6。数值选择范围,如(2 TO 4),表示取值为2、3或4

22、。并列数值,如35,表示取值为3或者5。混合方式,以上三种方式的混合。,(课本P81、P276),电子与通信工程系,PORT(z1 , z2 , z3 , z4 : out std_logic); SIGNAL value : INTEGER RANGE 0 TO 15;CASE value ISWHEN 0 = z1 z2 z3 z4 = 1 ; - - value=815时END CASE,【例】,电子与通信工程系,SIGNAL value : INTEGER RANGE 0 TO 15;SIGNAL out1 : STD_LOGIC ;.CASE value IS - 缺少以WHEN引导

23、的条件句END CASE;.CASE value ISWHEN 0 = out1 out1 out1 out1= 0;END CASE;,CASE语句使用时容易发生的错误:,电子与通信工程系,【例】(3-8译码器)library ieee; use ieee.std_logic_1164.all;entity decode38 is port(a,b,c,G1,G2,G2B: in std_logic;y: out std_logic_vector(7 downto 0); end entity decode38;architecture ex of decode38 is signal in

24、data: std_logic_vector(2 downto 0); beginindata= c process(indata,G1,G2,G2B)beginif(G1 = 1and G2 = 0 and G2B = 0) then,接下页,电子与通信工程系,case indata iswhen “000“ = y y y y y y y y y = “XXXXXXXX“;end case;elsey = “11111111“;end if;end process; end architecture ex;,接上页,电子与通信工程系,IF与Case的区别if具有优先级,电子与通信工程系,4

25、 LOOP语句,(1)单个LOOP语句,其语法格式如下: LOOP标号: LOOP 顺序语句END LOOP LOOP标号 ;,(2)FOR LOOP语句,语法格式如下:LOOP标号: FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 上下界必须确定END LOOP LOOP标号;,(2)while LOOP语句,语法格式如下:LOOP标号: WHILE 条件 LOOP 顺序语句 END LOOP LOOP标号;,电子与通信工程系,【例】 SIGNAL a, b, c : STD_LOGIC_VECTOR (1 TO 3); . FOR n IN 1 To 3 LOOP a(n) =

26、b(n) AND c(n); END LOOP;,此段程序等效于顺序执行以下三个信号赋值操作: a(1) = b(1) AND c(1); a(2) = b(2) AND c(2); a(3) = b(3) AND c(3);,电子与通信工程系,【例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY p_check ISPORT ( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0);y : OUT STD_LOGIC ); END p_check; ARCHITECTURE opt OF p_check ISSIGNAL

27、tmp :STD_LOGIC ; BEGINPROCESS(a) BEGINtmp =0;FOR n IN 0 TO 7 LOOPtmp = tmp XOR a(n);END LOOP ;y = tmp;END PROCESS;END opt;,电子与通信工程系,49,5NEXT语句,NEXT语句的书写格式为:,NEXT 标号 WHEN 条件表达式,NEXT语句的规则如下:,NEXT语句结束本次循环迭代,而转入下一次循环迭代。 标号表明下一次循环的起始位置。 WHEN 条件表达式是NEXT语句的执行条件。 若NEXT语句后不跟标号,即从LOOP语句的起始位置进入下一个循环。 若NEXT语句后不

28、跟WHEN 条件,NEXT语句立即无条件跳出循环。 NEXT语句主要用于LOOP语句的内部循环控制。,电子与通信工程系,50,. l_x: for cnt_value in 1 to 8 loop s1: a(cnt_value):=0;k:=0; l_y: loop s2: b(k):=0; next l_x when (ef); s3: b(k+8):=0;k:=k+1; end loop l_y; end loop l_x;.,电子与通信工程系,51,6EXIT语句,EXIT语句的书写格式为:,EXIT 标号 WHEN 条件表达式;,EXIT语句的规则如下:,EXIT语句用于LOOP语句

29、的循环控制,表示结束LOOP语句。而NEXT语句在LOOP语句中结束本次循环,继续下一次的循环。 EXIT语句不含标号和条件表达式时,表明无条件结束LOOP语句的执行。 EXIT语句含有标号时,表明跳到标号处继续执行。 EXIT语句含有WHEN 条件时,如果条件为“真”,跳出LOOP语句;如果条件为“假”,则继续LOOP循环。 EXIT语句为程序需要处理保护、出错和警告状态时,提供了一种快捷、简便的调试方法。,电子与通信工程系,52,WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足及敏感信号量变化。,7WAIT语句,书写格式为:,WAIT -无限等待 WAIT ON -敏感信号量

30、变化 WAIT UNTIL 表达式 -表达式成立时进程启动 WAIT FOR 时间表达式 -时间到,进程启动,电子与通信工程系,6.1.7 WAIT语句,一般地,只有WAIT UNTIL格式的等待语句可以被综合器接受(其余语句格式只能在VHDL仿真器中使用) ,WAIT_UNTIL语句有以下三种表达方式: WAIT UNTIL 信号=Value ; - (1) WAIT UNTIL 信号EVENT AND 信号=Value; - (2) WAIT UNTIL NOT 信号STABLE AND 信号=Value; - (3),如果设clock为时钟信号输入端,以下四条WAIT语句所设的进程启动条

31、件都是时钟上跳沿,所以它们对应的硬件结构是一样的: WAIT UNTIL clock =1; WAIT UNTIL rising_edge(clock) ; WAIT UNTIL NOT clockSTABLE AND clock =1; WAIT UNTIL clock =1 AND clockEVENT;,电子与通信工程系,54,architecture behave of cntm16_2 is begin co0);elsif(enable=1) then qcnt=qcnt+1;end if;end if;end process; end behave;,电子与通信工程系,55,电子

32、与通信工程系,56,architecture behave of cntm16_3 is begin co0);elsif enable=1 thenqcnt=qcnt+1;end if;end process; end behave;,电子与通信工程系,57,电子与通信工程系,58,8子程序调用语句,9RETURN语句,10NULL语句,CASE Opcode IS WHEN “001“ = tmp := rega AND regb ; WHEN “101“ = tmp := rega OR regb ; WHEN “110“ = tmp := NOT rega ; WHEN OTHERS = NULL ; END CASE ;,空操作语句的语句格式如下: NULL; 通常用于Case语句中,表示所余的不用条件下的操作行为。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 通信信息 > 电子设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报