VHDL基本语法

合集下载

VHDL语法简单总结

VHDL语法简单总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。

一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。

2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。

VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。

子类型定义使用SUBTYPE关键字。

3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。

TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。

vhdl基本语法 ifdef

vhdl基本语法 ifdef

VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。

它是由美国国防部(DOD)于20世纪80年代初期的VHSIC(Very High Speed Integrated Circuits)项目中开发的。

VHDL的基本语法包括一些常用的关键字和结构,其中ifdef是其中之一。

ifdef是VHDL中的一个条件编译指令,用于根据给定的条件来判断是否包含某段代码。

在VHDL中,ifdef语句的基本语法如下:```vhdl`ifdef condition-- code to be included if condition is true`else-- code to be included if condition is false`endif```在上面的代码中,condition是一个条件表达式,可以是一个参数、宏定义或者其他已经定义过的条件。

如果condition为真,则会编译`ifdef和`endif之间的代码;如果condition为假,则会编译`else和`endif之间的代码。

使用ifdef可以让我们根据不同的条件来控制代码的编译和包含,这在一些复杂的项目中非常有用。

下面是使用ifdef的一个简单示例:```vhdl`ifdef DEBUGreport "Debug mode is enabled";`elsereport "Debug mode is disabled";`endif```在上面的代码中,如果DEBUG宏被定义了,那么report语句"Debug mode is enabled"将被编译进去;否则将编译进去"Debug mode is disabled"。

除了`ifdef语句外,VHDL还提供了一些其他的条件编译指令,如`ifndef(如果给定条件为假则编译)、`elsif(如果前面的条件为假则继续判断下一个条件)、`elsif和`endif。

VHDL基本语句

VHDL基本语句
表达式可以是一个整数或枚举类型的值或数组 选择值有四种表达方式: ● 单个数值 , 如 :6 ● 数值选择范围, 如: (2 TO 4)表示取值为2,3,4。 ● 并列数值 如: 3 5 表示取值为3或着5 ● 混合方式 以上三种方式的混合

ARCHITECTURE example OF mux4 IS BEGIN PROCESS (sel) 注 BEGIN ●CASE中的选择值必须在表达式的取值范围内; CASE sel IS WHEN 0=> q <= d0 ; ●CASE语句是无序的,所有表达式值都是并行 WHEN 1=> q <= d1 ; 处理;而IF语句是有序的,最起始、最优先 WHEN 2=> q<= d3 ; WHEN 3=> q<= d4 ; 的先处理; WHEN others => NULL; ●可以有很多分支,但OTHERS分支只能有一个, END CASE; 且只能位于最后;用来使所有选择值能涵盖表 END PROCESS; END example; 达式的所有取值,以免插入不必要的锁存器
3、用于多选控制的IF语句:
格式 IF 条件1 THEN
<顺序处理语句1>;
ELSIF 条件2 THEN <顺序处理语句2>; : ELSIF 条件n-1 THEN <顺序处理语句n-1>; ELSE <顺序处理语句n>; END IF;
P1: PROCESS (clk) BEGIN
IF (clk‘ event and clk=‗1‘ ) THEN
顺序语句
赋值语句
VHDL设计实体内的数据传递以及对端口界面外部数据的读写 都必须通过赋值语句的运行来实现。 功能是将一个值或表达式的运算结果传递给某一数据对象。 赋值语句有两种: 信号赋值语句和变量赋值语句 区别

VHDL语言的基本语法

VHDL语言的基本语法

B:二进制基数符号,表示二进制数位0或1。 二进制基数符号,表示二进制数位0 O:八进制基数符号。 八进制基数符号。 X:十六进制基数符号(0~F) 。 十六进制基数符号(0~ (0 例如: 1_1101_1110 1_1101_1110” 例如:B“1_1101_1110 --二进制数数组,位矢数组长度是9 --二进制数数组,位矢数组长度是9 二进制数数组 AD0 X“AD0” AD --十六进制数数组,位矢数组长度是12 --十六进制数数组,位矢数组长度是12 十六进制数数组
4、下标名及下标段名 下标名用于指示数组型变量或信号的某一 下标名用于指示数组型变量或信号的某一 元素, 元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的 下标段名则用于指示数组型变量或信号的 某一段元素,其语句格式如下: 某一段元素,其语句格式如下:
数组类型信号名或变量名(表达式 表达式2]); 数组类型信号名或变量名 表达式1 [TO/DOWNTO 表达式 ; 表达式
信号的使用和定义范围是实体、结构体和程序包 信号的使用和定义范围是实体、结构体和程序包.
在程序中: 在程序中 (1) 信号值的代入采用“<=”代入符,而且信号 信号值的代入采用“ ”代入符, 代入时可以附加延时。 代入时可以附加延时。 (2) 变量赋值时用“:=”,不可附加延时。 变量赋值时用“ ” 不可附加延时。 (3) 信号的初始赋值符号仍是“:=”。 信号的初始赋值符号仍是“ ” 例: X<=Y AFTER 10 ns; ; --X,Y都是信号,且Y的值经过 都是信号, 的值经过10ns延 , 都是信号 的值经过 延 时以后才被代入X。 时以后才被代入 。
(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。 数据类型的数值。 (2) 变量不能用于硬件连线和存储元件。 变量不能用于硬件连线和存储元件。 (3) 变量的适用范围仅限于定义了变量的进程或子程序中。 变量的适用范围仅限于定义了变量的进程或子程序中。 (4) 若将变量用于进程之外,必须将该值赋给一个相同的 若将变量用于进程之外, 类型的信号,即进程之间传递数据靠的是信号。 类型的信号,即进程之间传递数据靠的是信号。

《VHDL语法基础》PPT课件

《VHDL语法基础》PPT课件

(5) 在结构体ART3中,COMPONENT→END COMPONENT 语句结构对所要调用的或门和半加器两元件作了声明 (COMPONENT DECLARATION),并由SIGNAL语句定义了三 个信号D、E和F,作为中间信号转存点,以利于几个器件间的信 号连接。接下去的“PORT MAP( )”语句称为元件例化语句 (COMPONENT INSTANTIATION)。所谓例化,在电路板上, 相当于往上装配元器件;在逻辑原理图上,相当于从元件库中取 了一个元件符号放在电路原理图上,并对此符号的各引脚进行连 线。例化也可理解为元件映射或元件连接,MAP是映射的意思。 例如,语句“U2:H_ADDER PORT MAP(A=>E,B=>CIN, CO=>F,SO=>SUM)”表示将实体H_ADDER描述的元件U2的引 脚信号A、B、CO和SO分别连向外部信号E、CIN、F和SUM。
(2) VHDL具有丰富的仿真语句和库函数,使得在任何大系 统的设计早期,就能查验设计系统的功能可行性,随时可对系 统进行仿真模拟,使设计者对整个工程的结构和功能可行性做 出判断。
(3) VHDL语句的行为描述能力和程序结构,决定了它具 有支持大规模设计的分解和已有设计的再利用功能。符合市场 需求的大规模系统高效、高速的完成必须有多人甚至多个开发 组共同并行工作才能实现,VHDL中设计实体的概念、程序包 的概念、设计库的概念为设计的分解和并行工作提供了有利的 支持。
END ENTITY OR2; --实体OR2的结构体ART1的说明
ARCHITECTURE ART1 OF OR2 IS
BEGIN C<=A OR B; END ARCHITECTURE ART1;
2) 半加器的逻辑描述 -- IEEE库的使用说明

VHDL语法入门

VHDL语法入门

1.1 VHDL程序构件
配置说明
将具体的构造体分配给实体说明 示例
configuration conf1 of xor_gate is for data_flow end for; end conf1;
configuration conf2 of xor_gate is for structure end for; end conf1;

字符串
被双引号括起来的ASCII字符,如,“Hello”;

位串
被双引号括起来的数字序列,其前冠以基数说明符;如, B“0110_1111”,O“117”,X“FFE0”;
1.2 文法规则
文法格式
关键字、标识符:不区分大小写; 注释:‘--’,且只在该文本行有效; 分隔:‘;’为行分隔,VHDL的语句行可写在不同文本行
[端口说明;]
end [设计实体名] ;
1.1 VHDL程序构件
1.1 VHDL程序构件 IN
从外部输入至实体; 单向端口;
entity
1.1 VHDL程序构件 OUT
从实体输出至外部; 单向端口;
entity
1.1 VHDL程序构件 INOUT
可以从外部输入至实体; 也可以从实体输出至外部; 双向端口;
变量:
用于进程、子程序等模块的内部; 局部性数据对象;
1.3 数据对象及类型

例子:信号与变量
p2: process(a) variable tmp: integer:=1; begin tmp:=tmp*2; c2<=a+tmp; end process; end;
entity exmp1 is port(a: in Integer; b: out Integer); end; architecture behv of exmp1 is signal c1,c2: Integer; begin b<=c1+c2; p1: process(a) variable tmp: integer:=0; begin tmp:=tmp+1; c1<=a+tmp; end process;

VHDL语法简单情况总结

VHDL语法简单情况总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。

一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。

2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。

VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。

子类型定义使用SUBTYPE关键字。

3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。

TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。

第3章VHDL语法基础

第3章VHDL语法基础

--设初始值
FOR I IN 1 DOWNTO 0 LOOP
IF (A(I)=‘1’ AND B(I)=‘0’) THEN
A_LESS _B<=FALSE;
EXIT;
ELSIF (A(I)=‘0’ AND B(I)=‘1’) THEN
A_LESS _B<=TRUE;
--A<B
EXIT;
ELSE NULL;
PROCESS(A) IS
BEGIN TMP <=‘0’;
FOR N IN 0 TO 7 LOOP
TMP <=TMP XOR A(N);
END LOOP; Y<= TMP;
结果:
END PROCESS;
Y=‘0’— A含偶数个‘1’,
END ARCHITECTURE ART;
Y=‘1’— A含奇数个‘1’。
BEGIN
PROCESS(A,B,C) IS
VARIABLE N: BOOLEAN;
BEGIN
C
IF A THEN N:=B;
ELSE N:=C; END IF; OUTPUT <=N; END PROCESS;
A
OUTPUT
B
对应的硬件电路
END ARCHITECTURE ART;
例3: 由两个2选1多路选择器构成的电路逻辑描述如图所示, 其中,当P1和P2为高电平时下端的通道接通。
A
S2 S1
D C
Z B A
ARCHITECTURE ART OF MUX41 IS
SIGNA S :STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
S<=S1 & S2;

vhdl 基础语法

vhdl 基础语法

vhdl 基础语法VHDL(Very High Speed Integrated Circuit Hardware Description Language)是一种硬件描述语言,用于描述数字系统的行为和结构。

以下是VHDL的基础语法:1. 实体(Entity):用于描述模块的接口和端口。

实体的语法如下:```entity entity_name isport (-- 输入端口input_name : in data_type;-- 输出端口output_name : out data_type);end entity_name;```2. 架构(Architecture):用于描述模块的内部行为和逻辑。

架构的语法如下:```architecture architecture_name of entity_name issignal signal_name : data_type;begin-- 逻辑实现end architecture_name;```3. 信号(Signal):用于在模块内部传递数据。

信号的语法如下:```signal signal_name : data_type;```4. 过程(Process):用于描述模块的并发行为。

过程的语法如下:```process (sensitivity_list)begin-- 逻辑实现end process;```5. 语句(Statement):用于描述模块的具体操作。

常见的语句包括:- 赋值语句:```signal_name <= value;```- 选择语句:```case expression iswhen value1 =>-- 逻辑实现1when value2 =>-- 逻辑实现2when others =>-- 默认逻辑实现end case;```- 循环语句:```for i in range loop-- 逻辑实现end loop;```这些是VHDL的基础语法,可以用于描述数字系统的行为和结构。

vhdl基本语法(简略共34页)

vhdl基本语法(简略共34页)

vhdl基本语法(简略共34页)VHDL硬件描述语言1.1 VHDL概述1.1.1 VHDL的特点VHDL语言作为一种标准的硬件描述语言,具有结构严谨、描述能力强的特点,由于VHDL语言来源于C、Fortran等计算机高级语言,在VHDL语言中保留了部分高级语言的原语句,如if语句、子程序和函数等,便于阅读和应用。

具体特点如下:1. 支持从系统级到门级电路的描述,既支持自底向上(bottom-up)的设计也支持从顶向下(top-down)的设计,同时也支持结构、行为和数据流三种形式的混合描述。

2. VHDL的设计单元的基本组成部分是实体(entity)和结构体(architecture),实体包含设计系统单元的输入和输出端口信息,结构体描述设计单元的组成和行为,便于各模块之间数据传送。

利用单元(componet)、块(block)、过程(procure)和函数(function)等语句,用结构化层次化的描述方法,使复杂电路的设计更加简便。

采用包的概念,便于标准设计文档资料的保存和广泛使用。

3. VHDL语言有常数、信号和变量三种数据对象,每一个数据对象都要指定数据类型,VHDL的数据类型丰富,有数值数据类型和逻辑数据类型,有位型和位向量型。

既支持预定义的数据类型,又支持自定义的数据类型,其定义的数据类型具有明确的物理意义,VHDL是强类型语言。

4. 数字系统有组合电路和时序电路,时序电路又分为同步和异步,电路的动作行为有并行和串行动作,VHDL语言常用语句分为并行语句和顺序语句,完全能够描述复杂的电路结构和行为状态。

1.1.2 VHDL语言的基本结构VHDL语言是数字电路的硬件描述语言,在语句结构上吸取了Fortran和C等计算机高级语言的语句,如IF语句、循环语句、函数和子程序等,只要具备高级语言的编程技能和数字逻辑电路的设计基础,就可以在较短的时间学会VHDL语言。

但是VHDL毕竟是一种描述数字电路的工业标准语言,该种语言的标识符号、数据类型、数据对象以及描述各种电路的语句形式和程序结构等方面具有特殊的规定,如果一开始就介绍它的语法规定,会使初学者感到枯燥无味,不得要领。

VHDL基本语法

VHDL基本语法

一、数据类型A. 标准数据类型1)整数类型(INTEGER)VARIBLE A:INTEGER RANGE -128 TO 128范围-(231-1)~ +(231-1)2#11111111# --binary,=255D8#377#16#FF#2)实数类型和浮点类型(REAL & FLOATING)实数范围-1.0E+38 ~ +1.0E+38大多数EDA工具不支持浮点类型16#0F#E+016#FF.FF#E-13)位类型(BIT)TYPE BITIS(‘0',‘1')4)位矢量类型(BIT_VECTOR)位矢量(bit_vector)类型实际上就是位(bit)的一位数组,它的表示方法是用双引号将一组位数据括起来。

例如:"11010111"。

不难看出,采用位矢量可以很方便地表示电路描述中的总线状态,这在VHDL程序中经常用到。

B"1111-1100" --长度为8X"FBC" --长度为12,=B"1111-1011-1100"O"371" --长度为9,=B"011-111-001"5)布尔类型(BOOLEAN)6)字符类型(CHARACTER)‘A',‘a',‘B',大小写不敏感。

7)字符串类型(TRING)"VHDL","MULTI_SCREEN"8)物理类型(physical)--时间类型--The physics unit time is a predefined typeTYPE time IS RANGE -1E18 TO 1E18UNITSfs; -- Femto-secondps = 1000 fs;ns = 1000 ps;us = 1000 ns;ms = 1000 us;sec = 1000ms;min = 60 sec;END UNITS--another--DISTANCE TYPETYPE distance IS RANGE 0 TO 1E16UNITSA;nm = 10A;um = 1000nm;mm = 1000um;cm = 10mm;m = 1000 mm;km = 1000m;END UNITS;9)错误类型(NOTE,WARNING,ERROR,FAILURE)10)自然数、正整数类型(NATURAL & POSITIVE)ENTITY_compare ISPORT(a,b:INTEGER RANGE 0 to 9:=0;c:out Boolean);END compare;B. 自定义数据类型1)枚举类型(ENUMERATED)TYPE PCI_BUSstate IS(Idle,busbusy,write,read,Back off); --PCI总线状态机变量TYPEstd_ulogic IS('U',‘X',‘1',‘0',‘Z',‘W',‘L',‘H',‘-‘);TYPE boolean IS(false,true);TYPE BITIS(‘0',‘1');2)整数类型(INTEGER)TYPE digit IS INTEGER RANGE -128 TO 1283)实数类型和浮点类型(REAL & FLOATING)4)数组类型(ARRAY)TYPE MYARRAY IS ARRAY(INTEGER 0 TO 9)OFstd_LOGIC5)存取类型(ACCESS)TYPE line IS ACCESS string; --Line是指向字符串的指针6)文件类型(FILES)TYPE text IS FILE OF string;TYPE input-type IS FILE OF character;7)记录类型(RECODE)--RECORD适于描写总线,通讯协议TYPE PCI_BUS IS RECORDADDR:std_LOCIG_VECTOR(31 DOWNTO 0);DATA:std_LOGIC_VECTOR(31 DOWNTO 0);END RECORD;SEGINAL DECODE1,DECODE2:PCI_BUS;PCI_DEVICE1 <= DECODE1.ADDR;PCI_DEVICE1RAM <= DECODE1.DATA;8)时间类型(TIME)9)VHDLstd_logic在VHDL中,设计人员经常使用的数据类型是枚举类型std_ulogic和它的子类型std_logic,它们都是一个九值逻辑系统。

第3章 VHDL基础

第3章 VHDL基础

3.2 时序电路描述
图3-5 例3-7的电路图
3.2 时序电路描述
【例3-8】 ... IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; ...
图3-6 例3-8的电路图
3.2 时序电路描述
3.2.3 时序电路的不同表述
【例3-9】 ... PROCESS (CLK) BEGIN IF CLK'EVENT AND (CLK='1') AND (CLK'LAST_VALUE='0') THEN Q <= D ; --确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ; 【例3-10】 ... PROCESS (CLK) BEGIN IF CLK='1' AND CLK'LAST_VALUE='0' --同例3-9 THEN Q <= D ; END IF; END PROCESS ;
图3-7 例3-13的时序波形
3.2 时序电路描述
【例3-14】 ... PROCESS (CLK,D) BEGIN IF CLK = '1' THEN --电平触发型寄存器 Q <= D ; END IF; END PROCESS ;
图3-8 例3-14的时序波形
3.3 全加器的VHDL描述
3.3.
4. 上升沿检测表式和信号属性函数EVENT <信号名>'EVENT
3.2 时序电路描述
不完整条件语句与时序电路 【例3-7】
ENTITY COMP_BAD IS PORT( a1,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 ;

vhdl语句

vhdl语句

vhdl语句
VHDL是一种硬件描述语言,用于描述数字电路和系统的行为和结构。

以下是VHDL中的一些基本语句:
1.实体(Entity):用于声明一个电路或系统的接口,包括输入、输
出和输入/输出端口。

2.结构体(Architecture):用于描述电路或系统的实现,包括元件的
连接和行为描述。

3.信号赋值语句:用于在进程中给信号赋值,例如“a <= b;”。

4.条件赋值语句:用于根据条件给信号赋值,例如“IF condition THEN
a <=
b ELSE a <=
c END IF;”。

5.选择信号赋值语句:用于根据选择信号的值给信号赋值,例如
“SELECT CASE a WHEN value1 THEN b WHEN value2 THEN c WHEN OTHERS THEN d END CASE;”。

6.进程语句:用于描述电路或系统的行为,包括顺序执行和并行执
行。

7.元件例化语句:用于实例化一个元件,并将其连接到其他元件上。

8.生成语句:用于生成多个相同类型的元件实例。

9.子程序调用语句:用于调用一个子程序。

10.顺序语句:在仿真意义上具有一定顺序性,并不意味着这些语句
对于的硬件结构也有相同的顺序性。

所有门电路是并行地工作,并没有先后之分。

11.并行语句:在仿真运行中总处于两种状态:执行或者挂起。

当执
行到wait语句时,运行程序将被挂起,直到满足此语句设置的结束挂起条件后,将重新开始执行进程中的程序。

以上只是VHDL中的一些基本语句,实际上VHDL还支持更多的高级功能和描述方式。

VHDL常用语法

VHDL常用语法

端口映射
2.命名关联(推荐方法 推荐方法) 推荐方法 明确指出每个端口的连接信号,顺序无关。 明确指出每个端口的连接信号,顺序无关。 port map(rd=>cpu_rd,wr=>cpu_wr, mem=>cpu_mem,ready=>cpu_rdy, ras=>mem_ras,cas=>mem_cas, we=>mem_we);
case 语句
[case_label:] case expression is (when choices=>{sequential_statement}) {…} end case[case_label]; Choices<=(simple_expression|discrete_range|o thers){|…}
[label:] next[loop_label][when boolean_expression]; 当执行转跳语句时,立即中止当前的循环迭代, 不再执行当前循环中的其他语句,而是开始下一 个循环迭代。
while 循环
[loop_label:] while boolean_expression loop {sequential_statement} end loop[loop_label];
并发信号赋值语句
条件信号赋值语句
name<=[delay_mechanism] {waveform when boolean_expression else} waveform [when boolean_expression]; 与if语句具有相同的意义
选择信号赋值语句
with expression select name<=[delay_mechanism] {waveform when choices,} waveform when choices; 与case语句具有相同的意义
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

变量不是真正的物理量 , 因此不能 出现在敏感信号表中. 出现在敏感信号表中. 在 process 语句中只作为输出存在的 信号 ( 出现在信号赋值符 " < =" 的左 边 ) 不能作为敏感信 号. 既出现在信号赋值符 "<=" 的左边 , 又出现在信号赋值符 "<=" 右边的信 号 , 可以出现在敏感信号表中 , 这是因 为这些信号既作为这块电路的输出 , 又 是电路内部的反馈信号. 是电路内部的反馈信号.
例7 2 与非门. 与非门. 参见程序' (参见程序'例7') ) 说明: 说明: 本例中 , 首先将与非门输入信号 a 和 b 并置 , 生成一个 2 位的 std_logic_vector 信号 sel .信号 C 是与非门的输出. 是与非门的输出.第一个 when 中的 "|" 代表或者 , 即 3 个条件中的任何一 语句. 个满足 , 执行 C <='1' 语句.
格式 : IF 条件 1 THEN 若干顺序执行语句 1 ELSIF 条件 2 THEN 若干顺序执行语句 2 … ELSIF 条件 n-1 THEN 若干顺序执行语句 n-1 ELSE 若干顺序执行语句 n END IF;
(5) 进程语句 进程语句(PROCESS)
进程语句是一个十分重要的语句 进程语句是一个十分重要的语句 , 本质上它描述了一个功能独立的电路 本质上它描述了一个功能独立的电路 块.
CASE语句与 语句一样也是个顺序执 语句与IF语句一样也是个顺序执 语句与 行语句,但使用上有区别. 行语句,但使用上有区别. CASE语句执行时是无序的,所有表达 语句执行时是无序的, 语句执行时是无序的 式是并行处理; 语句是有序的, 式是并行处理;而IF语句是有序的, 语句是有序的 先处理最优先的条件, 先处理最优先的条件,后处理次优先 条件. 条件. 在某种情况下,两种语句都可以使用, 在某种情况下,两种语句都可以使用, 语句比IF语句描述更简捷 但 CASE语句比 语句描述更简捷, 语句比 语句描述更简捷, 更清晰.故应优先选用CASE语句. 语句. 更清晰.故应优先选用 语句
例5: : 语句描述 用PROCESS语句描述 位寄存器. 语句描述16 位寄存器. 参见程序' (参见程序'例5') ) 说明: 说明:
Register_16bits 是实体名 ,behave 是结 构体名. 构体名. reset 是异步复位信号 , 当为 '0' 位寄存器复位. 时 , 将 16 位寄存器复位.当时钟 clk 的上 如果写允许信号wen为 升沿到来时 , 如果写允许信号 为 如果wen '1',16 位输入信号 d 送输出 q; 如果 保持不变. 为'0', 输出 q 保: 1.进程的启动由敏感信号表中所标明的 进程的启动由敏感信号表中所标明的 信号来触发. 信号来触发. 2.每个PROCESS语句内部语句顺序执行; 语句内部语句顺序执行; 每个 3.多个PROCESS语句同时并行执行; 语句同时并行执行; 多个
例4: :
D 触发器 触发器: SIGNAL d ,clk,q:STD_LOGIC; PROCESS(clk) BEGIN IF clk'event AND clk='1' THEN q <=d; END IF; END PROCESS;
VHDL的层次结构设计 的层次结构设计
层次结构设计是设计较大规模硬件 的重要优点 的必要手段 , 也是 VHDL 的重要优点. .层次结构的设计方法是把一个大的系 层次结构的设计 层次结构的设计方法是把一个大的系 统划分为若干子系统 , 顶层描述各子系 之间的关系 的关系. 统的接口条件和各子系统 之间的关系. 各子系统的具体实现放在低层描述. 各子系统的具体实现放在低层描述. 同样 , 一个子系统也可以划分为若干更 小的子系统 小的子系统 , 一直划分下去 , 直到最基 本的子系统为止. 本的子系统为止.
process 语句有许多变种 , 这里只介绍 最基本的形式.
格式 : [ 进程名 :] PROCESS ( 敏感信号 1, 敏感信 号 2, … , 敏感信号 n) [ 若干变量说明语句 ] BEGIN 若干顺序执行语句 END PROCESS [ 进程名 ];
process 语句中有个敏感信号表 , 各敏感信号之间用逗号分开. 各敏感信号之间用逗号分开. 所谓敏感信号就是指当它的状态发 语句执行. 生变化时 , 启动 process 语句执行. 由于 process 语句代表一块功能独立 的电路 , 它的某些输入信号的状态 变 化 , 势必引起电路输出的变化 , 这些立 即引起 ( 当然要经过短暂的时间延迟 ) 输出信号状态 变化的信号就是敏感信 号.
除了 not 运算符的优先级最高外 , 其余逻辑 运算从左到右展开. 运算符的优先级相同 , 运算从左到右展开. 因此要注意加括号 , 如 : (a AND b) OR (e AND f) 不能写成 a AND b OR e AND f
2. 并置运算符 并置运算符 "&" 用于位的连接 , 形成矢 也可连接矢量生成更大的矢量. 量.也可连接矢量生成更大的矢量.
关系运算有如下规则 : (1) 在进行关系运算时 , 两个对象的数 据类型必须相同. 据类型必须相同. (2) 等于,不等于运算适用于所有数据 等于, 类型. 类型. (3) 大于,小于,大于等于和小于等于 大于,小于, 适用于整数,实数, 适用于整数,实数,位,位矢量的比 较.
4. 运算符的优先级 各运算符优先级从最高到最低的顺序 ( 同一行运算符优先级相同 ) 如下 : ** ( 乘方 );abs( 取绝对值 ); ; ; * ( 乘 )/( 除 );mod( 取模 ); ; ; +( 正号 ); - ( 负号 ); ; ; +( 加 );- ( 减 );&( 并置 ); ; ; ; sll( 逻辑左移 ); srl( 逻辑右移 ); ; ; rol( 逻辑循环左移 ) ; 逻辑循环左 ror( 逻辑循环右移 ); ;
2. 变量赋值语旬
格式 : 变量名 := 表达式 ; 由于在电路设计中 , 变量不与某一物理 量一一对应 , 它只起到设计的辅助作用 , 用 于保存中间结果, 于保存中间结果,做数组的下标等 , 因此变 量的赋值没有时间延迟. 量的赋值没有时间延迟.
例:
VARIABLE x,y,z: INTEGER RANGE 0 TO 255; x:=0; y:=132; z:=x;
SIGNAL a,b: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL c: STD_LOGIC_VECTOR(2 DOWNTO 0); a AND ('1' & c); c & a; --结果生成 4 位的 结果生成 std_logic_vector --结果生成 7 位的 结果生成 std_logic_vector
SIGNAL d,clk,q;
IF clk'event AND cIk = '1' THEN Q q <= d; END IF;
Qd
D
Clk
对于描述触发器来说 , 经常要用到时钟的 上升沿和下降沿 . 下面是描述它们的 4 种 方法 : clock'event AND clock ='1' clock'event AND clock ='0' rising_edge(clock)' falling_edge(clock)' --上升沿 上升沿 --下降沿 下降沿 --上升沿 上升沿 --下降沿 下降沿
举例 : SIGNAL t1,clk,clk1:STD_LOGIC; ; SIGNAL r0,r1: STD_LOGIC_VECTOR(15 DOWNTO 0); t1 <= '1'; clk1 <= NOT clk; r0 <= x" 0000"; rl <="0000000000000000";
(5)赋值语句 赋值语句
赋值语句的作用是给信号或者变量 赋值 , 它将赋值符号右边表达式的值 它将赋值符号右边表达式的值 赋给左边的信号或者变量. 赋给左边的信号或者变量. 赋值语句分为信号赋值语句和变量 赋值语句. 赋值语句.
1. 信号赋值语句 信号赋值语句 格式 : 信号名 <= 表达式 ; 由于信号是个真正的物理量 , 它对 应着电子电路的某一条连线 std_logic 或者一组连线 (std_logic_vector ) , 因此它的赋值一定有时间延迟. 因此它的赋值一定有时间延迟.
(6) IF 语句
IF语句属于描述硬件行为的语句.共有 语句属于描述硬件行为的语句. 语句属于描述硬件行为的语句 三种用法. 三种用法. 1.用于门闩控制的语句. 用于门闩控制的语句. 用于门闩控制的语句 格式: 格式: IF 条件 THEN 若干顺序执行语句 END IF;
触发器. 例1: 用 if 语句设计的 D 触发器. : ( 程序片断) 程序片断)
例:
SIGANL a,b,e,f:STD_LOGIC; SIGANL c,d: STD_LOGIC_VECTOR(7 DOWNTO 0); a AND b; a OR b; NOT a --正确 正确 c AND d; c XOR d; NOT C --正确 正确 a AND c; --错误 , 因为数据类型不同 ; 错
3. 算术运算符 算术运算符有 14 种 ,最常用的算术 最常用的算术 运算符是 + 和 -. . 例:
SIGNAL a,b: STD_LOGIC_VECTOR(3 DOWNTO 0); a+b; a+'1';
相关文档
最新文档