VHDL的并行语句

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

case语句
null语句(空语句,值保持不变)
进程语句的构成
PROCESS语句结构
进程说明 信 号 赋 值 语 句 变 量 赋 值 语 句
顺序描述语句 进 程 启 动 语 句 子 程 序 调 用 语 句 顺 序 描 述 语 句 进 程 跳 出 语 句
敏感信号参数表
Example will be more clear
2. 第一个语句称为选择信号赋值语句,将为多个选 项选择目的信号q并分配正确的值。在选择信号的 赋值中该表达式所有可能的值必须有一个匹配的 选项(或者一定要放一个other副句)。
进程语句
VHDL中最重要的语句 进程和进程语句之间是并行关系 进程内部定义了一组连续执行的顺序语句 基本格式: [进程标号:] PROCESS [(信号敏感表)] [内部变量说明区] BEGIN 〈顺序语句段〉 END PROCESS [进程标号];
选择信号赋值语句
基本格式 WITH 表达式 SELECT 目标信号<= 表达式1 WHEN 选择条件1, 表达式2 WHEN 选择条件2, …… 举例 表达式n WHEN 选择条件n; WITH sel SELECT

所有可能情况都要考 q <= a WHEN “00”, A 虑,但可以在最后加 B 上Others语句来处理 b WHEN “01”, C 未考虑到的情况D
条件信号赋值语句

基本格式:
目标信号<=表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE …… 最后一句不要加 WHEN但要加“;” 表达式n;
举例:
q <= c WHEN selb = ‘0’ ELSE b WHEN sela = ‘0’ ELSE a;
a b sela
选择信号赋值语句
LIBRARY ieee; sel 是 USE ieee.std_logic_1164.all; Std_Logic数据 ENTITY cmpl_sig IS PORT ( a, b, sel : IN STD_LOGIC; 类型 z : OUT STD_LOGIC; Std_Logic数据 END cmpl_sig; ARCHITECTURE logic OF cmpl_sig IS 类型的值包括 BEGIN {„0‟,‟1‟,‟X‟,‟Z‟} WITH sel SELECT 所以要加 z <= a WHEN '0', b WHEN '1', Others语句 ‘Z' WHEN OTHERS; END logic;
CPLD/FPGA的开发与应用
第6章
VHDL的并行语句
• VHDL 的信号赋值语句 • VHDL 的进程(Process)语句 • VHDL的元件例化(Component)语句 • VHDL的块(Block)语句
VHDL的常用语句
VHDL分并行(Concurrent)语句和顺序(Sequential)语句两大类 • 并行语句(Concurrent): 并行语句之间值的更新是同时进行的,与语句所在的位置和 顺序无关。 并行语句总是处于进程(PROCESS)的外部。 所有并行语句都是并行执行的,即与它们出现的先后次序无关。 如when….else语句 • 顺序语句(Sequential): 顺序语句总是处于进程(PROCESS)的内部,并且从仿真的角 度来看是顺序执行的。 如if-then-else语句
If I want more -- 4 to 1 Mux

Once again, you are due with Language not Graphic, so it is easy
Entity test1 is port (in1, in2, in3, in4 : in bit; sel1, sel2 : in bit; d : out bit); end test1; architecture test1_body of test1 is begin d <= in1 when sel1 = „0‟ and sel2 = „0‟ else in2 when sel1 = „0‟ and sel2 = „1‟ else in3 when sel1 = „1‟ and sel2 = „0‟ else in4; end test1_body;
第6章
VHDL的并行语句
并行语句1
构 造 体
signal
并行语句2 signal 并行语句3
构造体组织结构
构 造 体
元 素 说 明
常 数 说 明 信 号 说明
数据类型说明 元件例化说明 子程序说明 块 语 句


体 构 造 体
功 能 说 明
进 程 语 句 信号赋值语句 元件例化语句 子程序调用语句
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 mux4 OF mux4 IS SINGAL sel:INTEGER; BEGIN WITH sel SELECT q <= i0 AFTER 10 ns WHEN 0, i1 AFTER 10 ns WHEN 1, i2 AFTER 10 ns WHEN 2, i3 AFTER 10 ns WHEN 3, 'X' AFTER 10 ns WHEN OTHERS; sel <= 0 WHEN a='0' AND b= '0' ELSE 1 WHEN a = '1' AND b= '0' ELSE 2 WHEN a = '0' AND b= '1' ELSE 3 WHEN a = '1' AND b= '1' ELSE 4;
If I want more choice --
It is easy
Entity test1 is port (in1, in2, in3, in4 : in bit; sel : in integer; out1 : out bit); end test1; architecture test1_body of test1 is begin with sel select out1 <= in1 when 0, in2 when 1, in3 when 2, in4 when 3, „Z‟ when others; end test1_body;
常用并行语句包括:

信号赋值语句
简单信号、条件信号、选择信号赋值语句

进程(Process)语句

元件例化(Component)语句
块(Block)语句

信号赋值语句
信号赋值语句是VHDL最基本的描述形式
并行信号赋值语句包括: •简单信号赋值语句(Simple Signal Assignments)
c selb
q
Conditional Signal Assigments

The output get the value when the condition is true e.g. 2 to 1 multiplexer
Entity test1 is port (in1, in2, sel : in bit; d : out bit); end test1; architecture test1_body of test1 is begin d <= in1 when sel = „0‟ else in2; end test1_body;
进程语句部分在BEGIN和END PROCESS之间,进程内的所有语句都是按顺序 一个接一个执行的。
进程在结构体中的位置
结构体(Architecture)
声明区(Declarations)
信号声明;声明用于该结构体的类型,常数,元件,子程序。
并发语句
信号赋值(Signal Assignments 计算结果,并赋值给信号 元件例化 (Component Instantiations) 过程调用(Procedure Calls 调用一个预先定义好的一个 算法。
Select Signal Assignments

The output get value when matching with the selected item
Entity test1 is port (a, b: in bit; sel : in bit; c : out bit); end test1; architecture test1_body of test1 is begin with sel select c <= a when „1‟, b when „0‟; end test1_body;
i0 i1 q i2 MUX4 i3 a b
选择信号赋值语句
条件信号赋值语句
END mux4;
条件信号赋值语句和选择信号赋值语句
1. 例中的第二个语句类型称为条件信号赋值语句, 该语句将根据计算每个语句的条件对目的信号sel 赋值(根据信号a和b的值将把0到4的值分配给 sel)。语句按WHEN的条件依次地一次执行一句,直 到语句的条件都满足为止。
进程(Processes)
定义一个新算法实现电路功 能。在过程中赋值顺序语句 。语句按放置的顺序执行。
调用另一个实体所描述的电路 。即元件调用
Βιβλιοθήκη Baidu
进程语句的构成
进程(Process) 声明区(Declarations) 声明内部变量;用于该进程的常数;元件;子程序。 顺序语句 信号赋值(<=) 过程调用 变量赋值(:=) if语句 loop语句(循环) next语句(跳过剩余循环) exit语句(退出循环) wait语句(等待时钟信号)

基本语法: PROCESS (sensitivity list) [variable declarations] BEGIN <list of sequential statements>; END PROCESS;
• 关键字PROCESS后括号中的信号清单称为敏感表,它列举可激活进程语句 的信号,唯有这些信号可激活进程,并引起进程语句的再次执行。 • 关键字BEGIN把进程语句分为进程说明和进程语句两部分。 进程说明在敏感表和BEGIN之间,对局部变量或进程内部参数进行说明。 进程内不能说明信号,只能说明变量。
Entity test1 is port (a, b, sel1, sel2 : in bit; result : out bit); end test1; architecture test1_body of test1 is begin process (sel1, sel2,a, b) begin if (sel1 = „1‟) then result <= a; elsif (sel2 = „1‟) then result <= b; else result <= „0‟; Result change if sel1, sel2, a or b change the value end if; end process; Wait : I can do the same join with Concurrent Statement end test1_body;
•条件信号赋值语句( Conditional Signal Assignments ) •选择信号赋值语句( Selected Signal Assignments )
简单信号赋值语句

基本格式: 目标信号 <= 举例:
值或表达式

signal b<=‘1’ a < c <
a,b,c:bit; AFTER 10ns; = NOT(b) ; = a xor b ;
q
c WHEN “10”,
d WHEN Others;
Sel
2
注意:WITH-SELECT-WHEN语句必须指明所有互斥条 件(即穷举),在上例中即“sel”的所有取值组合。 假设“sel”的类型为“std_logic_vector”,则取值 组合除了00,01,10,11外还有0X,0Z,x1…等。虽然这 些取值组合在实际电路中不一定出现,但也应列出。 因此在选择信号赋值语句中为避免麻烦可以用 “others”代替其他各种组合情况。
Simple Signal Assignment

These kind of statements are executed in Parallel Entity test1 is port ( a, b, e : in bit; c, d : out bit); end test1; architecture test1_body of test1 is begin c <= a and b; d <= e; end test1_body;
相关文档
最新文档