《VHDL设计初步》PPT课件.ppt

上传人:za****8 文档编号:15805352 上传时间:2020-09-07 格式:PPT 页数:86 大小:1.03MB
收藏 版权申诉 举报 下载
《VHDL设计初步》PPT课件.ppt_第1页
第1页 / 共86页
《VHDL设计初步》PPT课件.ppt_第2页
第2页 / 共86页
《VHDL设计初步》PPT课件.ppt_第3页
第3页 / 共86页
资源描述:

《《VHDL设计初步》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL设计初步》PPT课件.ppt(86页珍藏版)》请在装配图网上搜索。

1、第4章,VHDL设计初步,4.1 多路选择器VHDL描述 4.2 寄存器描述及其VHDL语言现象 4.3 1 位二进制全加器的VHDL设计 4.4 计数器设计 4.5 一般加法计数器设计,4.1 多路选择器VHDL描述,4.1.1 2选1多路选择器的VHDL描述 4.1.2 VHDL相关语法说明 4.1.3 VHDL设计的基本概念和语句小节,返回,【例4-1】 ENTITY mux21a IS PORT( a, b : IN BIT ; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ; ARCHITECTURE one OF mux21a IS B

2、EGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,实体,结构体,4.1.1 2选1多路选择器的VHDL描述,图4-1 mux21a实体,图4-2 mux21a结构体,VHDL的实体描述了电路的外部情况及各信号端口的基本性质。 结构体负责描述电路器件的内部逻辑功能或电路结构。 在VHDL结构体中用于描述逻辑功能和电路结构的语句分为顺序语句和并行语句两部分。 顺序语句按照语句的前后排列方式逐条顺序执行; 并行语句是同时进行的,与语句的前后顺序无关。,【例4-2-1】 ENTITY mux21a IS PORT ( a, b : IN BIT

3、; 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 ;,并行语句,【例4-2-2】 . . . ARCHITECTURE one OF mux21a IS BEGIN y = (a AND (NOT s) OR (b AND s) ; END ARCHITECTURE one;,并行语句,【例4-4】 ENTI

4、TY 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 IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ;,顺序语句,图4-3 mux21a功能时序波形,以上四例用不同的语句表达方式描述了相同的逻辑功能,都能被VHDL综合器综合成图4-2的电路结构。以下波形证实了VHDL逻辑设计的正确性。,

5、返回,1. 实体表达,【例4-4】 ENTITY e_name IS PORT ( p_name1 : port_m data_type; . p_namei : port_m data_type ); END ENTITY e_name;,4.1.2 VHDL相关语句说明,实体名,端口 信号名,端口模式,数据类型,2. 实体名:不能用数字或中文,也不能用EDA工具库中已定义好的元件名。,3. PORT语句和端口信号名,以分号“;”结尾。,4. 端口模式,IN,OUT,INOUT,BUFFER,5. 数据类型BIT,【例4-5】 ARCHITECTURE arch_name OF e_name

6、 IS (说明语句) BEGIN (功能描述语句) END ARCHITECTURE arch_name ;,在结构体中需要说明和定义的数据对象、数据类型、元件调用声明等,并非必须的,6. 结构体表达,在结构体中必须给出相应的电路功能描述语言,可以是并行语句、顺序语句或它们的混合。,y=a 表示输入端口a的数据向输出端口y传输,在VHDL仿真中赋值操作并非立即发生,而是要经历一个模拟器的最小分辩时间后,才将a 的值赋予y。 “=”两边的信号的数据类型必须一致。 S=0, “=”没有赋值的含义,只是一个数据比较符号,其输出结果的数据类型是布尔数据类型。,7. 信号传输(赋值)符号和数据比较符号,

7、8. 逻辑操作符AND、OR、NOT,9. IF_THEN条件语句:必须以语句“END IF;”结束。,10. WHEN_ELSE条件信号赋值语句,赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE . 表达式 ;,条件信号赋值语句的第一子句具有最高赋值优先级,z = a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;,11. PROCESS进程语句和顺序语句: 在VHDL中,所有合法的顺序描述的语句都必须放在进程语句中。,PROCESS旁的(a,b,s)称为进程的敏感信号表,通常要求将时所有的输入信号都放在敏感信号表中。 PROCE

8、SS语句的执行依赖于敏感信号的变化。当某一敏感信号发生变化时,就将启动此进程语句,而在执行一遍整个进程的顺序语句后,便返回进程的起始端,进入等待状态,直到下一次敏感信号表中某一信号的跳变才再次进入“启动运行”状态。 一个结构体中可以包含任意个进程语句。所有的进程语句都是并行语句。,12. 文件取名和存盘:注意文件名必须与实体名相同。,返回,数据类型,信号赋值符,条件比较符, 延时,实体,结构体,端口定义,端口模式,逻辑操作符,IF条 件语句,并行条 件语句,进程语句,顺序语句,并行语句,文件取名,文件存盘,4.1.3 VHDL设计的基本概念和语句小节,返回,VHDL主要通过对时序器件功能和逻辑

9、行为的描述,而非结构上的描述即能由计算机综合出符合要求的时序电路。,4.2.1 D触发器的VHDL描述 4.2.2 D触发器的VHDL描述的 语言现象说明 4.2.3 实现时序电路的VHDL不同表达方式 4.2.4 异步时序电路设计,4.2 寄存器描述及其VHDL语言现象,【例4-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 ;,D触发器,4.2.1 D触发器的VHDL描述,

10、ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; Q = Q1 ; -将内部的暂存数据向端口输出 END PROCESS ; END bhv;,时序电路的语句,最简单并最具代表性的时序电路是D触发器。它是现代数字系统设计中最基本的时序单元和底层元件。它的行为描述包含了VHDL对时序电路的最基本和典型的表达方式,同时也包含了VHDL中许多最具特色的语言现象。比

11、4.1节内容多了: (1)由LIBRARY引导的说明部分; (2)使用了另一种数据类型STD_LOGIC; (3)定义了一个内部节点信号SIGNAL; (4) 使用了一种新的条件判断表达式;,返回,1. 标准逻辑位数据类型STD_LOGIC,BIT数据类型定义: TYPE BIT IS(0,1);,STD_LOGIC数据类型定义: TYPE STD_LOGIC IS (U , X , 0 , 1 , Z , W , L , H , -);,STD_LOGIC所定义的9种数据的含义是: U表示未初始化的; X表示强未知的; 0表示强逻辑0; 1表示强逻辑1; Z表示高阻态; W 表示弱未知的;

12、L表示弱逻辑0; H表示弱逻辑1; -表忽略,4.2.2 VHDL描述的语言现象说明,2. 设计库和标准程序包,数据类型和函数的说明是预先放在VHDL综合器附带的设计库和程序包中的。如:BIT数据类型的定义是包含在VHDL标准程序包STANDARD中的, 而STANDARD程序包是包含在标准库STD中的。一般的,为了使用BIT数据类型,应该在程序上增加以下三句说明语句: LIBRARY WORK; LIBRARY STD; USE STD_STANDARD.ALL;,3. SIGNAL信号定义和数据对象,Q1定义为内部节点信号 定义Q1目的是为了在设计更大的电路时使用由此引入的时序电路的信号,

13、这是一种常用的时序电路设计的方式。,由于VHDL标准中规定标准库STD和工作库WORK都是默认打开的,因此可以不必将上述语句以显示表达在程序中。 使用库和程序包的一般定义表达式是: LIBRARY ; USE .ALL ;,4. 上升沿检测表式和信号属性函数EVENT,CLKEVENT AND CLK = 1 关键词EVENT是信号属性,VHDL通过以下表达式来测定某信号的跳变边沿: EVENT,短语 CLKEVENT 对 CLK 标识符的当前的一个极小的时间段内发生事件的情况进行检测。所谓发生事件,就是CLK的电平发生变化,从一种电平方式转变到另一种电平方式。,不完整的条件语句,VHDL综合

14、器将理解为当不满足条件时,不能执行语句Q1=D,即应保持Q1原值不变,这就意味着必须引进时序元件来保存Q1的原值,直到满足IF语句的判断条件后才能更新Q1的值。 显然,时序电路构建的关键在于利用这种不完整的条件语句的描述。,5. 不完整条件语句与时序电路,然而必须注意,条件语句在时序电路和组合电路的设计中的使用方式不一样。 在设计时序电路时可以使用不完整条件语句构成; 在设计组合电路时应尽量使用完整条件语句:IF THEN ELSE END IF;如果使用不完整条件语句就将综合出不希望出现的组合电路与时序电路的混合体。如下面的例4-7。,ENTITY COMP_BAD IS PORT( a1

15、: IN BIT; 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 ;,【例4-7】,图4-4 例4-7的电路图,由于在条件语句中漏掉了a1=b1时q1做何操作,结果导致了一个不完整的条件语句。综合器对此解释为:当条件a1=b1时对q1不做任何赋值操作,即在此情况下保持

16、q1的原值,这意味着必须为q1配置一个寄存器,以便保持它的原值。,【例4-8】 ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ; ARCHITECTURE ONE OF COMP_GOOD IS BEGIN PROCESS (a1,b1) BEGIN IF a1 b1 THEN q1 = 1 ; ELSE q1 = 0 ; END IF; END PROCESS ; END ;,图4-6 例4-8的电路图,返回,【例4-9】 PROCESS (CLK) BEGIN IF CLKEVENT AND (

17、CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ;,4.2.3 实现时序电路的VHDL不同表达方式,【例4-10】 PROCESS (CLK) BEGIN IF CLK=1 AND CLKLAST_VALUE=0 -同例4-10 THEN Q = D ; END IF; END PROCESS ;,【例4-11】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT (CLK : IN STD_LOGIC

18、; 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) - CLK的数据类型必须是STD_LOGIC ,必须打开STD_LOGIC_1164程序包 THEN Q1 = D ; END IF; Q = Q1 ; 赋值语句可以放在进程外,作为并行赋值语句 END PROCESS ; END ;,【例4-12】 . PROCESS BEGIN wait until CL

19、K = 1 ; -利用wait语句 Q = D ; END PROCESS;,【例4-13】. PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; -利用进程的启动特性产生对CLK的边沿检测 END IF; END PROCESS ;,【例4-14】. PROCESS (CLK,D) BEGIN IF CLK = 1 -电平触发型寄存器 THEN Q = D ; END IF; END PROCESS ;,图4-7 边沿型触发器时序波形,图4-8 电平触发型寄存器的时序波形,返回,ARCHITECTURE bhv OF MULTI_DFF IS SIGNAL

20、 Q1,Q2 : STD_LOGIC; BEGIN PRO1: PROCESS (CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1 = NOT (Q2 OR A); END IF; END PROCESS ; PRO2:PROCESS (Q1) BEGIN IF Q1EVENT AND Q1=1 THEN Q2 = D; END IF; QQ = Q2 ; END PROCESS ;,4.2.4 异步时序电路设计 【例4-15】,图4-9 例4-15综合的电路,返回,进程编号PRO1和PRO2只是标注符号,不参加综合。显然,尽管两个进程是并行语句,但被执行时刻并

21、非同时,根据敏感信号的设置,进程PRO1总是先于PRO2被启动。,图4-10半加器h_adder电路图,图4-11 全加器f_adder电路图,4.3 1位二进制全加器的VHDL设计,1位二进制全加器的设计,内部端口,外部端口,端口连线,半加器,或门,1位二进制半加器的逻辑功能,逻辑表达式:,4.3.1 半加器描述,例4-16 LIBRARY IEEE; 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; ARC

22、HITECTURE fh1 OF h_adder IS BEGIN so =NOT (a XOR (NOT b); co = a AND b; END ARCHITECTURE fh1;,1位二进制半加器描述(1),1位二进制半加器描述(2),【例4-17】 LIBRARY IEEE; -半加器描述(2) 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

23、 is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN abc = a , END CASE; END PROCESS; END ARCHITECTURE fh1 ;,1位二进制半加器描述(3),SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 ); BEGIN abc cso cso cso cso=10 ; END CASE; END PROCESS; END ARCHITECTURE fh1;,或门的VHDL设计,【例4-18】 LIBRARY IEEE ; -或门逻辑描述 USE IEEE.ST

24、D_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;,【例4-23】 LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT

25、STD_LOGIC ); END ENTITY f_adder; ARCHITECTURE fd1 OF f_adder IS 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; BEGIN u1 : h_adder PORT MAP (a=ain,b=bin,co=d,so=

26、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;,4.3.2 CASE语句,1. CASE语句,CASE IS When = ; . ; ; When = ; . ; ; . END CASE ;,CASE语句常用来描述总线行为、编码器和译码器的结构。CASE语句可读性好,简洁。 CASE语句的一般表达式是,CASE sel IS -CASE语句条件表达式sel WHEN 0 = q q q q NULL; END C

27、ASE;,使用CASE语句就注意几点: WHEN条件句中的选择值或标识符所代表的值必须在表达式的取值范围内。 除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用OTHERS表示以上已列的所有条件句中未能列出的其他可能的值。NULL表示不做任何操作。 CASE语句中的选择值只能出现一次,不允许有相同选择值的条件语句 CASE语句执行中必须选中,且只能选中所列条件语句中的一条。,2. 标准逻辑矢量数据类型STD_LOGIC_VECTOR,3. 并置操作符 ,在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如: B : OUT STD

28、_LOGIC_VECTOR (7 DOWNTO 0) ; 或 SIGNAL A : STD_LOGIC_VECTOR (1 TO 4 ),3.并置操作符,操作符表示将操作数(如逻辑位1或0)或是数组合并起来形成新的数组。例如“VH” “DL”的结果是“VHDL”;0 1 0的结果是“010”;,操作符的作用:建立新的数据,如可以将一个单元素并置于一个数的左端或右端形成更长的数组,或将两个数组并置成一个新数组等。,以下是一些并置操作示例:,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNT

29、O 0) ; . a = 10d(1)1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = 101011 THEN . - 在IF条件句中可以使用并置符,返回,元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引进一个新的低一级的设计层次。 当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座。,4.3.3 全加器描述和例化语句,元件例化语句由两部分组成,第一部分是将一

30、个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示: COMPONENT 元件名 IS PORT (端口名表) ; END COMPONENT 文件名 ;,这一部分称为元件定义语句,相当于对一个现成的设计实体进行封装,使其只留出对外的接口界面。 “端口名表”列出该元件对外通信的各端口名,端口符号不一定相同。,元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下: 例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.); PORT MAP是端口映射的意思,“=”是连接符号,其左面放置内部元件

31、的端口名,右面放置内部元件以外需要连接的端口名或信号名,这种位置排列方式是固定的。,4.4 计数器设计,4.4.1 4位加法计数器 4.4.2 整数类型 4.4.3 4位加法计数器的其它表达方式,【例4-20】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END

32、IF; END PROCESS ; END bhv;,4.4.1 4位二进制加法计数器设计,注意1:在计数器累加表达式Q=Q+1可见,在符号=的两边都出现了Q,表明Q应当具有输入和输出两种端口模式特性,同时它的输入特性应该是反馈方式,即传输符号=右边的Q来自左边的Q的反馈。显然Q的端口模式与BUFFER是最吻合的,因而定义为BUFFER模式。,注意2:VHDL规定、等算术操作符对应的操作数的数据类型只能是INTEGER; 注意3: 表达式Q=Q+1的右项与左项并非处于相同的时刻,对于时序电路,除了传输时延外,右项的结果出现于当前时钟周期;左项要获得当前的Q+1,需要等待下一个时钟周期。,返回,

33、4.4.2 整数类型,整数类型INTEGER的元素包含正整数、负整数和零。 通常VHDL仿真器将INTEGER类型作为有符号数处理,而VHDL综合器则将INTEGER作为无符号数处理。在使用整数时,VHDL综合器要求必须使用RANGE子句为所定义的数限定范围,然后根据所限定的范围来表示此信号或变量的二进制数的位数。 如:Q:BUFFER INTEGER RANGE 15 DOWNTO 0;,整数常量的书写方式示例如下: 1 十进制整数 0 十进制整数 35 十进制整数 10E3 十进制整数 16#D9# 十六进制整数 8#720# 八进制整数 2#11010010# 二进制整数 注意:在语句中

34、整数的表达不加单引号,而逻辑位的数据必须加引号。如1、”10”、”100111”。,返回,【例4-21】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; -当遇到+时,调用+号的运算符重载函数 ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; Q : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ) ; END ;,4.4.3 4位加法计数器的其它表达方式,4位数组,ARCHITECTURE bhv OF CNT4 IS SIG

35、NAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; END IF; Q = Q1 ; END PROCESS ; END bhv;,新的语言现象: 1.CLK 定义为STD_LOGIC,输出Q的数据类型明确定义为STD_LOGIC_VECTOR(3 DOWNTO 0),因此必须利用LIBRARY 语句和USE语句,打开IEEE库的程序包STD_LOGIC_1164. 2.Q的端口模式是OUT,由于没有输入的端口模式特性,因此不能直接

36、用在Q=Q+1中,但是可以通过SIGNAL Q1来实现Q1=Q1+1。,3.VHDL不允许在不同数据类型的操作数之间进行直接操作或运算。 而Q1=Q1+1中=右边的两个操作数Q1是逻辑矢量,1是整数。要使式子成立,必须调用运算符重载函数。所以在程序中有: USE STD_LOGIC_UNSIGNED.ALL;,4位加法计数器由两大部分组成:,图4-12 4位加法计数器RTL电路,锁存信号,组合电路加1器,4位锁存器,输出反馈,图4-13 4位加法计数器工作时序,归纳,数据类型,BUFFER模式,重载函数,计数器结构,返回,4.5 一般加法计数器设计,带有复位和时钟使能的10进制计数器,LIBR

37、ARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10;,【例4-22】,ARCHITECTURE behav OF CNT10 IS BEGIN PROCESS(CLK, RST, EN) VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWN

38、TO 0); BEGIN IF RST = 1 THEN CQI := (OTHERS =0) ; -计数器复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数 IF CQI 1001 THEN CQI := CQI + 1; -允许计数,ELSE CQI := (OTHERS =0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 1001 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ = CQI; -将计数

39、值向端口输出 END PROCESS; END behav;,4.5.1 相关语法 4.5.2 程序分析 4.5.3 带有并行置位的移位寄存器,返回,1. 变量,4.5.1 相关语法,变量的功能主要用于数据的暂存。 变量(variables)仅用在进程语句、函数语句、过程语句中的结构中使用,变量是一个局部量,变量的赋值立即生效,不产生赋值延时。 变量书写的一般格式为: VARIABLES 变量名:数据类型 约束条件:表达式;,根据上述格式,举例如下: VARIABLES result: std_logic:0;变量赋初值 VARIABLES x,y,z : integer; VARIABLES

40、 count: integer range 0 TO 255 :10; VARIABLES CQI: STD_LOGIC_VECTOR (3 DOWNTO 0);,为了简化表达才使用短语“(OTHERS=X)”,这是一个省略赋值操作符,它可以在较多位的位矢量赋值中作省略化的赋值,如以下语句:,2. 省略赋值操作符(OTHERS=X),SIGNAL d1 : STD_LOGIC_VECTOR (4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0);等同于d10) ;等同于a1e(3),3=e(5),others=e(1

41、) - 等同于d1= e(1) e(5) e(1) e(3) e(1),返回,4.5.2 程序分析,例4-22程序的功能:当时钟信号CLK、复位信号RST或时钟使能信号EN中任一信号发生变化,都将启动进程。此式如果RST为1,将对计数器清零,这项操作是独立于clk,称为异步;如果RST为0,则看是否有时钟信号的上升沿;若有时钟上升沿,并且EN=1,即允许计数器计数,此时若满足计数值小于9,计数器将正常计数,当计数值到9时,输出进位信号,并重新从0开始计数。,图4-14 例4-22的RTL电路,图4-15 例4-22的工作时序,返回,LIBRARY IEEE; USE IEEE.STD_LOGI

42、C_1164.ALL; ENTITY SHFRT IS - 8位右移寄存器 PORT ( CLK,LOAD : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB : OUT STD_LOGIC ); END SHFRT; ARCHITECTURE behav OF SHFRT IS BEGIN PROCESS (CLK, LOAD) VARIABLE REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0),【例4-23】,4.5.3 带有并行置位的移位寄存器,BEGIN IF CLKEVENT AND CLK = 1 THEN IF LOAD = 1 THEN - 装载新数据 REG8 := DIN; ELSE REG8(6 DOWNTO 0) := REG8(7 DOWNTO 1); END IF; END IF; QB = REG8(0); END PROCESS; - 输出最低位 END behav;,图4-16 例4-23的工作时序,(1)在第一个时钟到来时LOAD恰为高电平,(2)第二个时钟,以及以后的时钟信号都是移位时钟,(3)第二个时钟后,QB输出了右移出的第2个位1,返回,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!