eda变量与各种并行语句的用法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.1.4 进程ቤተ መጻሕፍቲ ባይዱ的信号与变量赋值语句
【例5-3】 】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN A <= D1; B <= A; Q1 <=B; 信号赋值是在进程结束之后 END IF; END PROCESS ; 三条语句均是并行语句,综合后得到三个D END ;
触发器。在进程结束后,三条赋值语句是同 时赋值的,每个信号所接收的都是上一时钟 周期时的值。
说明: 与例5-1和例 所实现的功能不同。 说明:例5-3与例 和例 所实现的功能不同。 与例 和例5-2所实现的功能不同
5.1.4 进程中的信号与变量赋值语句
【例5-4】 】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK ='1' THEN A:= D1; B := A; Q1 <= B; END IF; END PROCESS ; 变量的赋值是立即发生的,三 条语句的执行具有顺序性。 END ;
5.1.2 变量(VARIABLE):定义在进程之中 变量( ):
定义变量的一般表述: 定义变量的一般表述: VARIABLE 变量名 : 数据类型 := 初始值 ;
5.1.3 信号(SIGNAL):定义在进程之外 信号( ):
定义格式: 定义格式: SIGNAL 信号名: 数据类型 := 初始值 ; 信号名:
对q来说则是不完整的,因而综合后会得到一个 带有锁存器的时序和组合的混合电路。
5.1 数据对象 数据对象DATA OBJECTS
5.1.1 常数(CONSTANT) 常数( )
常数定义的一般表述: 常数名: 常数定义的一般表述: CONSTANT 常数名:数据类型 := 表达式 ; 例如: 例如:CONSTANT FBT:STD_LOGIC_VECTOR:=”0101110”; : : ” ” CONSTANT data1:INTEGER:=15; : : ; 说明:常量是一个恒定不变的量,一旦做了数据类型和赋值后,在程序, 说明:常量是一个恒定不变的量,一旦做了数据类型和赋值后,在程序, 中不能再修改,具有全局意义。 中不能再修改,具有全局意义。
图5-7 8位3态控制门电路 位 态控制门电路
5.2.2 双向端口设计 设计下图所示的双向端口: Control=’0’时,q端的信号送给x; Control=’1’ 时,in1端的信号送给q;
反响器
5.2.2 双向端口设计
【例5-10】 】 library ieee; use ieee.std_logic_1164.all; entity tri_state is port (control : in std_logic; in1: in std_logic_vector(7 downto 0); q : inout std_logic_vector(7 downto 0); x : out std_logic_vector(7 downto 0)); end tri_state; Q只有在control=1时得到了赋 architecture body_tri of tri_state is 值,q在control=0时没有赋值。 begin process(control,q,in1) begin if (control = '0') then x <= q ; else q <= in1; x<="ZZZZZZZZ" ; end if; end process; 表面看IF语句是完整,但它只是针对control而言; end body_tri;
【例5-9】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_s IS port ( enable : IN STD_LOGIC; datain : IN STD_LOGIC_VECTOR(7 DOWNTO 0); dataout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END tri_s ; ARCHITECTURE bhv OF tri_s IS BEGIN PROCESS(enable,datain) BEGIN IF enable = '1' THEN dataout <= datain ; ELSE dataout <="ZZZZZZZZ" ; END IF ; Z必须 END PROCESS; 为大写 END bhv;
三、授课课时:2课时 四、教学重点、难点:三态门的基本概念、三态门的VHDL设计方法。
5.2 双向电路和三态控制电路设计
三态门:高电平(‘1’)、低电平(‘0’)、高阻(‘Z’)。
高阻态:其引脚电平随外接引脚电平的变化而变化。
5.2 双向电路和三态控制电路设计
5.2.1 三态门设计(单向输出) 三态门设计(单向输出)
5.1.4 进程中的信号与变量赋值语句 【例5-2】 (用信号方式实现典型 触发器) 例 】 用信号方式实现典型D触发器 触发器) . . . ARCHITECTURE bhv OF DFF3 IS SIGNAL QQ : STD_LOGIC ; 信号定义在进 程之外 BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK ='1' THEN QQ <= D1 ; END IF; Q1 <= QQ; END PROCESS ; END ; 说明: 和例5-2所实现的功能都是 说明:例5-1和例 所实现的功能都是 触发器的功能 和例 所实现的功能都是D触发器的功能
要特别注意进程中信号和变量赋值的不同之处。 要特别注意进程中信号和变量赋值的不同之处。 下面通过几个例子说明变量和信号赋值时应注意的问题。 下面通过几个例子说明变量和信号赋值时应注意的问题。
5.1.4 进程中的信号与变量赋值语句
触发器) 【例5-1】(用变量的方式实现典型 触发器) 】 用变量的方式实现典型D触发器 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; 注意:该变量的说 ARCHITECTURE bhv OF DFF3 IS 明是在进程之中。 BEGIN PROCESS (CLK) VARIABLE QQ : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK = '1' THEN QQ := D1 ; END IF; Q1 <= QQ; END PROCESS ; END ;
说明:本例题实现的是典型D触发器的功能
5.1.4 进程中的信号与变量赋值语句
D1
D
Q
D
Q
D
Q
Q1
D1 CLK
D
Q
Q1
CLK
图5-1例5-3的RTL电路 例 的 电路
图5-2 例5-1的RTL电路 的 电路
【例5-5】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) begin muxval <= 0; if (a = '1') then muxval <= muxval + 1; end if; if (b = '1') then muxval <= muxval + 2; end if; case muxval is when 0 => q <= i0; when 1 => q <= i1; 因为muxval定义为信号,只有在进程 定义为信号, when 2 => q <= i2; 结束后才能实现赋值。因此, 结束后才能实现赋值。因此,在进程结 when 3 => q <= i3; 束后三次赋值中只有最后一次赋值有效 when others => null; end case; end process; END body_mux4;
图5-3 例5-5的RTL电路 的 电路
例5-6的RTL电路 的 电路
图5-5 例5-5的错误的工作时序 的错误的工作时序
图5-6 例5-6的正确工作时序 的正确工作时序
第二讲
一、教学内容: 第五章 VHDL设计进阶 VHDL设计进阶 5.2 双向电路和三态控制电路设计 二、学目的及要求: 1、进一步了解用VHDL表达和设计电路的方法; 2、更深入地理解VHDL语言现象和语句规则的特点;
【例5-6】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS BEGIN process(i0,i1,i2,i3,a,b) variable muxval : integer range 7 downto 0; begin muxval := 0; if (a = '1') then muxval := muxval + 1; end if; if (b = '1') then muxval := muxval + 2; end if; case muxval is when 0 => q <= i0; when 1 => q <= i1; when 2 => q <= i2; 此处muxval定义为变量,是即时赋值 定义为变量, when 3 => q <= i3; 因此, 的。因此,在进程中三次赋值均有效 when others => null; end case; end process; END body_mux4;
5.1 数据对象 数据对象DATA OBJECTS
5.1.4 进程中的信号与变量赋值语句 说明:变量是及时赋值;而信号是到最后才发生变化,只 有在END PROCESS时才运行。
表5-1 信号与变量赋值语句功能的比较
信号SIGNAL 信号 基本用法 适用范围 行为特性 用于作为电路中的信号连线 在整个结构体内的任何地方都能适用 在整个结构体内的任何地方都能适用 结构体内 在进程的最后才对信号赋值 变量VARIABLE 变量 用于作为进程中局部数据存储单元 用于作为进程中局部数据存储单元 进程中 只能在所定义的进程中使用 立即赋值
第一讲
一、教学内容: 第五章 VHDL设计进阶 VHDL设计进阶 5.1 数据对象 数据对象DATA OBJECTS 二、学目的及要求: 1、进一步了解用VHDL表达和设计电路的方法; 2、更深入地理解VHDL语言现象和语句规则的特点;
三、授课课时:2课时 四、教学重点、难点:信号、变量及进程中的信号和变量 赋值语句。
相关文档
最新文档