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语言的基本语法

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数据类型(vhdl语法)

VHDL数据类型(vhdl语法)
S1 := “0000”;
注意!变量定义的时候尽管可以直接赋初值,但系统往往忽略。 建议变量对象定义后再进行赋值。
精品课
信号和变量的比较
(1)信号和变量的对应关系不同:信号代表电路内部信号或 连接线路;而变量则不是。
(2)信号和变量声明的位置不同:信号声明在子程序、进程的外 部;而变量声明在子程序、进程的内部。
0); C<= A( 2 downto 1); B<= A(3) & D & ‘1’;
精品课
二、VHDL数据类型与数据对象
数值类型 (1)整数
Type Integer Is Range 231-1
-231 ~
限定整数取值范围的方法: Signal A: Integer; Signal B: Integer Range 0 to 7; Signal C: Integer Range -1 to 1;
end exam1; architecture m1 of exam1 is constant num : integer := 6; begin op <= ip + num; end m1;
精品课
二、VHDL数据类型与数据对象
(2) 信号 定义格式 Signal 信号名称: 数据类型 [:=初始值]; 信号相当于电路内部元件之间的物理连线,因 此信号的赋值有一定的延迟时间.
entity full_bit_adder is port(a,b,ci:in std_logic;
y,cout:out std_logic); end full_bit_adder;
architecture bh1 of full_bit_adder is
begin

VHDL语言的基本语法解析

VHDL语言的基本语法解析

2、变量( Variable )
变量是一个局部变量,它只能在进程语句、函数语句和过程 语句结构中使用,用作局部数据存储。变量常用在实现某种算 法的赋值语句中。
一般格式:
VARIABLE 变量名:数据类型 约束条件:= 表达式;
例: VARIABLE x, y: INTEGER;
--定义x,y为整数变量
SIGNAL Y ,Z :BIT;
Y<=A(M) ;
--M是不可计算型下标表示
Z<=B(3) ;
--3是可计算型下标表示
C (0 TO 3)<=A (4 TO 7) ; -以段的方式进行赋值
C (4 TO 7)<=A (0 TO 3) ; -以段的方式进行赋值
二、VHDL语言的数据对象
1、常数( Constant )
常量的使用范围取决于它被定义的位置 :
(1)程序包中定义的常量具有最大的全局化特性,可以用在调 用此程序包的所有设计实体中;
(2)设计实体中定义的常量,其有效范围为这个实体定义的所 有的结构体;
(3)设计实体中某一结构体中定义的常量只能用于此结构体;
(4)结构体中某一单元定义的常量,如一个进程中,这个常量 只能用在这一进程中。
5,678,0,156E2(=15600) , 45_234_287(=45234287)
(2) 实数文字: 实数文字也都是十进制的数,但必 须带有小数点,如: 188.993, 88_670_551.453_909(=88670551.453909) ,
1.0,44.99E-2(=0.4499) ,1.335,0.0
?16#F.01#E+2ቤተ መጻሕፍቲ ባይዱ--( 十六进制数表示,等于 3841.00)

vhdl语法总结4

vhdl语法总结4

vhdl语法总结4四、顺序代码在PROCESS, , PROCEDURE内部的代码都是顺序执⾏的,这样的语句包括IF,WAIT,CASE和LOOP。

变量只能在顺序代码中使⽤,相对于信号⽽⾔,变量是局部的,所以它的值不能传递到PROCESS,和PROCEDURE的外部。

1. 进程(PROCESS)进程内部经常使⽤IF,WAIT,CASE或LOOP语句。

PROCESS具有敏感信号列表(sensitivity list),或者使⽤WAIT语句进⾏执⾏条件的判断。

PROCESS必须包含在主代码段中,当敏感信号列表中的某个信号发⽣变化时(或者当WAIT语句的条件得到满⾜时),PROCESS内部的代码就顺序执⾏⼀次。

语法结构如下:[label: ] PROCESS (sensitivity list)[VARIABLE name type [range] [ := initial_value; ]]BEGIN(顺序执⾏的代码)END PROCESS [label];如果要在PROCESS内部使⽤变量,则必须在关键字BEGIN之前的变量声明部分对其进⾏定义。

变量的初始值是不可综合的,只⽤于仿真。

在设计同步电路时,要对某些信号边沿的跳变进⾏监视(时钟的上升沿或下降沿)。

通常使⽤EVENT属性来监视⼀个信号是否发⽣了变化。

2. 信号和变量信号可在PACKAGE,ENTITY和ARCHITECTURE中声明,⽽变量只能在⼀段顺序描述代码的内部声明。

因此,信号通常是全局的,变量通常是局部的。

赋予变量的值是⽴刻⽣效的,在后续的代码中,此变量将使⽤新的变量值,⽽信号的值通常只有在整个PROCESS执⾏完毕后才开始⽣效。

3. IF语句IF/ELSE语句在综合时可能会产⽣不必要的优先级解码电路。

IF语句语法结构如下:IF conditions THEN assignments;ELSIF conditions THEN assignments;ELSE assignments;END IF;————————————————————————————————例:IF (x < y) temp := “1111_1111”;ELSIF (x = y AND w = ‘0’) THEN temp := “1111_0000”;ELSE temp := (OTHERS => ‘0’);4. WAIT语句如果在process中使⽤了WAIT语句,就不能使⽤敏感信号列表了。

vhdl基本语法资料

vhdl基本语法资料

VHDL 基础语法篇——VHDLVHDL硬件描述语言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基本语法

变量不是真正的物理量 , 因此不能 出现在敏感信号表中. 出现在敏感信号表中. 在 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语句. 语句. 更清晰.故应优先选用 语句

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基本语句用法

VHDL基本语句用法

10.2.4 元件例化语句
COMPONENT 元件名 IS 1)格式: GENERIC (类属表); -- 元件定义(说明)语句 PORT (端口名表); END COMPONENT 文件名;
例化名 :元件名 PORT MAP( [端口名 =>] 连接端口名,...) ; - - - - 元件例化(调用)语句。 (1) 元件声明语句用于调用已生成的元件,这些元件可能在库中, 也可能是预先编写的元件实体描述.; (2) 元件语句可以在ARCHITECTURE,PACKAGE和BLOCK的说明部分.
--输入初始值 ----当sel=0时选中 当sel为1或3时选中 当sel为2、4、5、6或7时选中 当sel为8~15中任一值时选中
CASE 语句病句举例
【例10.2】
10.1.4 LOOP语句
1 、单个LOOP语句 格式: [ LOOP标号:] LOOP 顺序语句 END LOOP [ LOOP标号 ]; 2、FOR_LOOP语句 格式:
第10章
VHDL基本语句
一:主要内容:VHDL基本语句讲解 ① 顺序语句 ② 并行语句 二:重点掌握:常用VHDL基本语句及应用
10.1 顺序语句
10.1.1 赋值语句
信号赋值语句
变量赋值语句 • 变量赋值语句:
•信号代入语句:
格式: 目的信号变量<=信号变量表达式 例: a<=b;
格式: 目的变量:=表达式 例: c:=a+d
IF 条件 THEN … END IF; 10.1.3 CASE语句
1) CASE语句的结构:
CASE 表达式 IS When 选择值 => 顺序语句; When 选择值 => 顺序语句; ... 【WHEN OTHERS =>】; END CASE ;

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,它们都是一个九值逻辑系统。

EDA 技术:VHDL语句总结

EDA 技术:VHDL语句总结

begin
if sel = "0001" then output <= in1(0) ; output2<=‘1’;
elsif (sel = "0010") then
output <= in1(0) xor in1(1) ; output2 <= ‘0’ ;
elsif sel = "0100" then
sel: in std_logic_vector(3 downto 0); output: out std_logic; output2: out std_logic); end ifexample1;
architecture arch of ifexample1 is
begin
process(in1, sel)
begin case (din) is when “00” => dout <=“0001” ; when “01” => dout <= “0010” ; when “10” => dout <=“0100” ; when “11” => dout <=“1000” ; end case;
end rtl ;
使用变量能获得比较好的综合结果,有利于优化, 但 需要锁存中间结果时必须使用信号。
❖ 初值(有三种形式,前两种综合忽略)
1、type states is (IDLE,S0,S1,S2); signal state:states; --信号state默认值为IDLE
2、signal Z : bit_vector(3 downto 0) :=“0000” ;
end if; end process; end rtl;

VHDL语法基础

VHDL语法基础
PROT(A,B:IN STD_LOGIC; CO,SO:OUT STD_LOGIC);
END ENTITY H_ADDER; -- 实体H_ADDER的结构体ART2的说明 ARCHITECTURE ART2 OF H_ADDER IS
BEGIN SO<=(A OR B) AND (A NAND B); CO<=NOT (A NAND B); END ARCHITECTURE ART2;
(5) VHDL对设计的描述具有相对独立性。设计者可以不 懂硬件的结构,也不必管最终设计的目标器件是什么,而进行 独立的设计。正因为VHDL的硬件描述与具体的工艺技术和硬 件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔 的选择范围,其中包括各种系列的CPLD、FPGA及各种门阵列 器件。
END ARCHITECTURE ART3;
3. 说明及分析
(1) 整 个 设 计 包 括 三 个 设 计 实 体 , 分 别 为 OR2 、 H_ADDER和F_ADDER,其中实体F_ADDER为顶层实体。 三个设计实体均包括三个组成部分:库、程序包使用说明,实 体说明和结构体说明。这三个设计实体既可以作为一个整体进 行编译、综合与存档,也可以各自进行独立编译、独立综合与 存档,或被其他的电路系统所调用。
COMPONENT OR2 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=>E); U2:H_ADDER PORT MAP(A=>E,B=>CIN,CO=>F,SO=>SUM); U3:OR2 PORT MAP(A=>D,B=>F,C=>COUT);

VHDL语言的基本知识点罗列

VHDL语言的基本知识点罗列

其它语句end process;* 敏感表中只能有一个时钟信号* wait on 语句只能放在进程的最前面或者最后面* 时钟的边沿描述描述时钟一定要指明是上升沿还是下降沿上升沿到来的条件:IF clk=’1’ AND clk’LAST_VALUE=’0’ AND clk’EVENT 下降沿到来的条件:IF clk=’0’ AND clk’LAST_VALUE=’1’ AND clk’EVENT 关于时钟信号的总结:IF clock_signal=current_value ANDclock_signal’LAST ANDclock_siganl’EVENT可以简单写为:IF clock_signal=clock_siganl’EVENT AND current_value. 复位信号*同步复位当复位信号有效且在给定的时钟边沿到来时,触发器才被复位. 例1:process (clock)beginif (clock_edge_condition) thenif (reset_condition) thensignal_out<=reset_value;elsesignal_out=signal_in;:其它语句:end if;end if;end process;例2:process(clock)if (clock’event and clock=’1’) thenif reset=’1’ thencount<=’0’;elsecount<=count+1;end if;end if;end process;此例中,敏感表中只有时钟信号,因为只有时钟到来时才能复位.* 异步复位只要复位信号有效,触发器就被复位,所以敏感表中除时钟信号外,还需要复位信号例1:process(reset_signal,clock_signal)beginif (reset_signal) thensignal_out<=reset_value;elsif (clock_event and clock_edge_condition) thensignal_out<=signal_in;:其它语句:end if;end process;例2:process(clock,reset)beginif reset=’1’ thencount<=’0’;elsif clock’event and clock=’1’ thencount<=count+1;end if;end process;。

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

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语言。

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

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在内的整个设计使用。

—————————————PACKAGE———————————-library ieee;use ieee.std_logic_1164.all;——————————————PACKAGE my_data_types ISTYPE vector_array IS ARRAY (natural range <>) OF STD_LOGIC_VECTOR(7 DOWNTO 0); –声明8位的数组END my_data_types;———————————–Main Code—————————————library ieee;use ieee.std_logic_1164.all;use work.my_data_types.all; –用户自定义包集——————————————————————ENTITY mux ISPORT (inp: IN vector_array(0 to 3);END mux;——————————————————————————-5.有符号数和无符号数要使用SIGNED和UNSIGNED类型数据,必须在代码开始部分声明ieee库中的包集std_logic_arith。

它们支持算术运算但不支持逻辑运算。

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;……SIGNAL a: IN SIGNED (7 DOWNTO 0);SIGNAL b: IN SIGNED (7 DOWNTO 0);SIGNAL x: IN SIGNED (7 DOWNTO 0);……v <= a + b;w <= a AND b; –非法(不支持逻辑运算)——————————————————————————-STD_LOGIC_VECTOR类型的数据不能直接进行算术运算,只有声明了std_logic_signed和std_logic_unsigned两个包集后才可以像SIGNED和UNSIGNED类型的数据一样进行算术运算。

6.数据类型转换在ieee库的std_logic_arith包集中提供了许多数据类型转换函数:1. conv_integer(p): 将数据类型为INTEGER,UNSIGNED,SIGNED,STD_ULOGIC或STD_LOGIC的操作数p转换成INTEGER类型。

不包含STD_LOGIC_VECTOR。

2.conv_unsigned(p,b):将数据类型为INTEGER,UNSIGNED,SIGNED或STD_ULOGIC 的操作数p转换成位宽为b的UNSIGNED类型数据。

3.conv_signed(p,b):将数据类型为INTEGER, UNSIGNED, SIGNED或STD_ULOGIC的操作数p转换成位宽为b的SIGNED类型的数据。

4.conv_std_logic_vector(p, b):将数据类型为INTEGER, UNSIGNED, SIGNED或STD_LOGIC的操作数p转换成位宽为b的STD_LOGIC_VECTOR类型的数据。

二、运算操作符和属性1. 运算操作符l 赋值运算符赋值运算符用来给信号、变量和常数赋值。

<=用于对SIGNAL类型赋值;:=用于对VARIABLE,CONSTANT和GENERIC赋值,也可用于赋初始值;=>用于对矢量中的某些位赋值,或对某些位之外的其他位赋值(常用OTHERS表示)。

例:SIGNAL x: STD_LOGIC;VARIABLE y: STD_LOGIC_VECTOR(3 DOWNTO 0); –最左边的位是MSBSIGNAL w: STD_LOGIC_VECTOR(0 TO 7); –最右边的位是MSBx <= ‘1’;y := “0000”;w <= “1000_0000”;– LSB位为1,其余位为0w <= (0 => ‘1’, OTHERS => ‘0’);– LSB位是1,其他位是0l 逻辑运算符操作数必须是BIT, STD_LOGIC或STD_ULOGIC类型的数据或者是这些数据类型的扩展,即BIT_VECTOR, STD_LOGIC_VECTOR,STD_ULOGIC_VECTOR。

VHDL的逻辑运算符有以下几种:(优先级递减)Ÿ NOT ——取反Ÿ AND ——与Ÿ OR ——或Ÿ NAND ——与非Ÿ NOR ——或非Ÿ XOR ——异或操作数可以是INTEGER, SIGNED, UNSIGNED, 如果声明了std_logic_signed或std_logic_unsigned,可对STD_LOGIC_VECTOR类型的数据进行加法或减法运算。

+ ——加- ——减* ——乘/ ——除** ——指数运算MOD ——取模REM ——取余ABS ——取绝对值加,减,乘是可以综合成逻辑电路的;除法运算只在除数为2的n次幂时才能综合,此时相当于对被除数右移n位;对于指数运算,只有当底数和指数都是静态数值(常量或GENERIC 参数)时才是可综合的;对于MOD运算,结果的符号同第二个参数的符号相同,对于REM 运算,结果的符号同第一个参数符号相同。

l 关系运算符=, /=, <, >, <=, >=左右两边操作数的类型必须相同。

l 移位操作符<左操作数> <移位操作符> <右操作数>其中左操作数必须是BIT_VECTOR类型的,右操作数必须是INTEGER类型的(可以为正数或负数)。

VHDL中移位操作符有以下几种:u sll 逻辑左移–数据左移,右端补0;u srl 逻辑右移–数据右移,左端补0;u sla 算术左移–数据左移,同时复制最右端的位,填充在右端空出的位置;u sra 算术右移–数据右移,同时复制最左端的位,填充在左端空出的位置;u rol 循环逻辑左移—数据左移,从左端移出的位填充到右端空出的位置上;u ror 循环逻辑右移–数据右移,从右端移出的位填充到左端空出的位置上。

例:x <= “01001”,那么:y <= x sll 2; –逻辑左移2位,y<=”00100”y <= x sla 2; –算术左移2位,y<=”00111”y <= x srl 3; –逻辑右移3位,y<=”00001”y <= x sra 3; –算术右移3位,y<=”00001”y <= x rol 2; –循环左移2位,y<=”00101”y <= x srl -2; –相当于逻辑左移2位用于位的拼接,操作数可以是支持逻辑运算的任何数据类型。

有以下两种:² &² (, , , )与Verilog中{}的功能一样。

2. 属性(ATTRIBUTE)l 数值类属性数值类属性用来得到数组、块或一般数据的相关信息,例如可用来获取数组的长度和数值范围等。

以下是VHDL中预定义的可综合的数值类属性:d’LOW–返回数组索引的下限值d’HIGH–返回数组索引的上限值d’LEFT–返回数组索引的左边界值d’RIGHT–返回数组索引的右边界值d’LENGTH –返回矢量的长度值d’RANGE–返回矢量的位宽范围d’REVERSE_RANGE –按相反的次序返回矢量的位宽范围例:定义信号SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);则有:d’LOW = 0, d’HIGH = 7, d’LEFT = 7, d’RIGHT = 0, d’LENGTH = 8,d’RANGE = (7 DOWNTO 0), d’REVERSE_RANGE = (0 TO 7).l 信号类属性对于信号s,有以下预定义的属性(可综合的):s’EVENT若s的值发生变化,则返回布尔量TRUE,否则返回FALSEs’STABLE 若s保持稳定,则返回TRUE,否则返回FALSE例:clk的上升沿判断IF (clk’EVENT AND clk = ‘1’)IF (NOT clk’STABLE AND clk = ‘1’)WAIT UNTIL (clk’EVENT AND clk = ‘1’)3. 通用属性语句GENERIC语句提供了一种指定常规参数的方法,所指定的参数是静态的,增加了代码的可重用性,类似于Verilog中的parameter与defparam。

相关文档
最新文档