vhdl基本语法
8.VHDL基本语句和函数
4)
格式
IF
条件1 THEN 条件1 顺序语句1 顺序语句1; 条件2 ELSIF 条件2 THEN 顺序语句2 顺序语句2; …… 条件n ELSIF 条件n THEN 顺序语句n; 顺序语句n; ELSE 顺序语句n+1; 顺序语句n+1; IF; END IF;
注意
这类语句可以实现不同类型电路的描述。 这类语句可以实现不同类型电路的描述。 其任一分支顺序语句的执行条件是以上各分支 条件相与, 条件相与,即语句中顺序语句的执行条件具有 向上相与的功能。 向上相与的功能。
注意ቤተ መጻሕፍቲ ባይዱ
•条件句中的选择值必须在表达式的取值范围内; 条件句中的选择值必须在表达式的取值范围内; 条件句中的选择值必须在表达式的取值范围内 •CASE语句中每一条件句的选择只能出现一次,相同 CASE语句中每一条件句的选择只能出现一次 CASE语句中每一条件句的选择只能出现一次, 选择值的条件语句不能重复出现; 选择值的条件语句不能重复出现; •所有表达式的值都必须穷举,不能穷举的值用 所有表达式的值都必须穷举, 所有表达式的值都必须穷举 OTHERS表示 表示。 OTHERS表示。
Library ieee; use ieee.std_logic_1164.all; entity test_06 is port( d: in std_logic; x: out std_logic); end test_06; architecture test_06 of test_06 is signal a: std_logic_vector(3 downto 0); signal b: std_logic_vector(2 downto 0); begin process begin a<="1010"; b<="111"; if(a>b) then x<=d; else x<='0'; end if; end process; end test_06;
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语言的基本语法
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课件
(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语言的基本语法解析
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基本语法
变量不是真正的物理量 , 因此不能 出现在敏感信号表中. 出现在敏感信号表中. 在 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 基础语法篇——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语法(yǔfǎ)简单总结VHDL语法简单(jiǎndān)总结VHDL语法(yǔfǎ)简单总结一个(yī ɡè)VHDL程序代码包含实体(shítǐ)(entity)、结构(jiégòu)体(architecture)、配置(pèizhì)(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.子类型在原有已定义数据类型(lèixíng)上加一些约束条件,可以定义(dìngyì)该数据类型的子类型。
VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。
子类型定义使用(shǐyòng)SUBTYPE关键字。
3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起(yīqǐ)形成的一种新的数据类型。
TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型(lèixíng)语法结构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);–滤波器系数(xìshù)类型定义SIGNAL delay_regs: delay_lines; –信号延迟(yánchí)寄存器声明CONSTANT coef: coeffs := ( ); –常量(chángliàng)系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以(suǒyǐ)必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。
第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(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语言入门教程VHDL是一种硬件描述语言,主要用于设计数字电路和系统。
它是由美国国防部门于1980年代初开发的,目的是为了改进电子设计自动化(EDA)工具的开发效率和设计文档的可重复性。
VHDL广泛应用于数字信号处理(DSP)、嵌入式系统、通信系统和各种ASIC(专用集成电路)和FPGA(现场可编程门阵列)的设计。
本教程将介绍VHDL的基础知识,包括语法、数据类型和常见的建模技术。
一、VHDL的语法VHDL的语法由标识符、关键字、运算符和分隔符组成。
其中,标识符用于给变量、信号和实体命名,关键字用于定义语言特定的操作,运算符用于数学和逻辑运算,分隔符用于分隔语句。
VHDL中的代码以一个实体(entity)的声明开始,然后是体(architecture)的声明,最后是信号声明和进程(process)的描述。
以下是一个简单的例子:```vhdlentity AND_gate isportA, B: in std_logic;C: out std_logicend entity AND_gate;architecture Behavior of AND_gate isbeginC <= A and B;end architecture Behavior;```在这个例子中,我们声明了一个名为AND_gate的实体,它有两个输入信号A和B,一个输出信号C。
然后我们定义了一个名为Behavior的体,它描述了AND门的行为:C等于A与B的逻辑与运算结果。
二、VHDL的数据类型VHDL支持许多数据类型,包括标量类型、数据类型、自定义类型和引用类型。
标量类型包括bit、bit_vector、integer、real、std_logic和std_ulogic等。
其中,bit_vector是一组连续的位,std_logic和std_ulogic用于表示单个信号。
数据类型是由标量类型和数组类型组成的。
数组类型可以是一维、二维或更高维的,用于存储多个数据。
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基本语法
一、数据类型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.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基本语法
Testbench文件的编写
时间标度指令`timescale 用于说明程序中 的时间单位和仿真精度。
`timescale module reg test; set; 10ns/1ns
编译指令
程序示例
仿真和延迟时间值度量单位参数 时间单位精度参数
parameter d = 1.55; initial begin
编译指令
是被包含进当前源文件的其他文件名
条件编译指令包括`ifdef,`else,`endif
这些指令用来控制源代码程序是否参与编译:
`define a; ……… `Ifdef a: 程序段1 `else 程序段2 `endif
版板所有 © 广州周立功单片机发展有限公司 2007
//`define a; ……… `Ifdef a: 程序段1 `else 程序段2 `endif
版板所有 © 广州周立功单片机发展有限公司 2007
广州周立功单片机发展有限公司
版板所有 © 广州周立功单片机发展有限公司 2007
系统任务和编译预处理语句 仿真控制任务
系统任务
主要用在测试文件的initial模块内,配合时间延时控制仿真时间 $finish $stop
$finish: 退出仿真器,返回操作系统
$stop: 把EDA工具置成暂停模式,可以通过相应的命令使仿真继续;
$stop和$finish可以带参数,如$finish(0),根据参数的不同,
编译预处理
编译指令
同C语言的编译预处理指令一样,Verilog HDL也提供了大量的 编译语句。通过编译语句,EDA工具开发商使得用他们的工具解释 Verilog HDL 模型变得相当容易。
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语言简介
括号可改变运算次序
下面以加法器为例说明并置运算符的用法:
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY addition IS PORT (A,B:IN STD_LOGIC_VECTOR( 3 DOWNTO 0); Q1: OUT STD_LOGIC_VECTOR( 4 DOWNTO 0)); END addition; ARCHITECTURE behav OF addition IS BEGIN PROCESS (A,B) BEGIN Q1 <= (‘0’ & A) + (‘0’ & B); END PROCESS; END behav;
二选一电路的实体说明: entity mux is port ( a: in std_logic; b: in std_logic; s: in std_logic; f: out std_logic ) end mux;
A B S
F
实体举例3
带类属参数说明的实体: entity adder is generic (width: integer := 2); port ( in_a : in std_logic_vector(width-1 downto 0); in_b : in std_logic_vector(width-1 downto 0); z : out std_logic_vector(width-1 downto 0); carry: out std_logic) ); end entity adder;
VHDL基本结构与语法
第5章 VHDL 基本结构与语法本章通过几个例题介绍VHDL 语言的基本结构和语法规则5.1 VHDL 基本结构一个相对完整的VHDL 设计由以下四部分组成:(1) 库LIBRARY 、程序包PACKAGE :库用于存储预先完成的程序包和数据集合体;程序包用于声明在设计中将要用到的常数、数据类型、元件及子程序等。
(2) 实体ENTITY :定义设计的输入输出端口。
(3) 结构体ARCHITECTURE :定义实体的实现,即电路的具体描述。
可有多个结构体,但只有一个起作用。
(4) 配置CONFIGURA TION :为实体选定某个特定的结构体。
以上四个部分不是每个VHDL 程序必须的,但每个VHDL 程序至少含有1个实体和1个结构体。
1个实体可有多个结构体,通过配置选择1个结构体对实体起作用,其他结构体不起作用。
当只有1个结构体时不要实体。
【例5-1】2选1多路数据选择器,其功能见图5-1。
功能描述为当S=0时A 送Y , S=1时B 送Y 。
其对应的VHDL 描述为:ENTITY mux21a IS --给出实体名mux21a 和管脚定义 PORT (a,b : IN BIT ;s : INBIT ; y : OUT BIT );END mux21a ;ARCHITECTURE one OF mux21a IS --结构体,描述电路器件的内部逻辑 BEGIN功能或电路结构。
y <=a WHEN s=’0’ ELSE b;END one ;综合后结构体的门电路见图5-3。
5.1.1 实体ENTITY :定义本设计的输入输出端口/信号。
图5-1 例5-1功能示意图图5-3 例5-1综合后的门电路A S约定:[]表示为可选项;--开始的语句为注释,不参与编译和综合;黑体单词为保留字。
1、实体框架:ENTITY实体名IS--此处无分号[GENERIC(常数名:数据类型[:设定值]);]PORT - -端口定义(端口1:端口模式端口类型;…端口n:端口模式端口类型- -最后一个无分号);END[ENTITY] 实体名;注:END中带ENTITY、ARCHITECTURE为IEEESTDl076_1993版的语法要求,不带为IEEESTD1076 1987的语法要求。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU。
一般情况下,一个完整的VHDL语言程序至少要包含程序包、实体和结构体三个部分。
实体给出电路单元的外部输入输出接口信号和引脚信息,结构体给出了电路单元的内部结构和信号的行为特点, 程序包定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等。
一位全加器的逻辑表达式是:S=A⊕B⊕CiCo=AB+ACi+BCi全加器的VHDL程序的文件名称是fulladder.VHD,其中VHD是VHDL程序的文件扩展名,程序如下:LIBRARY IEEE; --IEEE标准库USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fulladder IS -- fulladder是实体名称PORT(A, B, Ci : IN STD_LOGIC; --定义输入/输出信号Co, S : OUT STD_LOGIC);END fulladder;ARCHITECTURE addstr OF fulladder IS --addstr是结构体名BEGINS <= A XOR B XOR Ci;Co <= (A AND B) OR (A AND Ci) OR (B AND Ci);END addstr;从这个例子中可以看出,一段完整的VHDL代码主要由以下几部分组成:第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
第二部分是程序的实体,定义电路单元的输入/输出引脚信号。
程序的实体名称fulladder是任意取的,但是必须与VHDL程序的文件名称相同。
实体的标识符是ENTITY,实体以ENTITY开头,以END结束。
其中,定义A、B、Ci是输入信号引脚,定义Co和S是输出信号引脚。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。
结构体有三种描述方式,分别是行为(BEHA VIOR)描述、数据流(DATAFLOW)描述方式和结构(STRUCTURE) 描述方式,其中数据流(DA TAFLOW)描述方式又称为寄存器(RTL)描述方式,例中结构体的描述方式属于数据流描述方式。
结构体以标识符ARCHITECTURE开头,以END结尾。
结构体的名称addstr是任意取的。
小提示:VHDL每条语句是以分号“;”作为结束符的,并且VHDL对空格是不敏感的,所以符合之间空格的数目是可以自己设定的。
可以按自己的习惯任意添加,增强代码可读性。
1.1.3 VHDL语言的实体(ENTITY)说明语句实体是VHDL程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要的输入/输出信号引脚。
端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,信号的输入/输出状态被称为端口模式,在实体中还定义信号的数据类型。
实体说明语句的格式为:ENTITY 实体名称ISGENERIC(常数名称1:类型[:=缺省值];常数名称2:类型[:=缺省值];…常数名称N:类型[:=缺省值];);PORT(端口信号名称1:输入/输出状态数据类型;端口信号名称2:输入/输出状态数据类型;…端口信号名称N:输入/输出状态数据类型);END 实体名称;小提示:VHDL语言具有87标准与93标准两种格式,以上为VHDL的87标准,对于93标准要使用END ENTITY 实体名称;结束实体。
注意为了保证代码的可综合性与通用性,最好采用87标准的VHDL格式,有些EDA工具不一定支持93标准的VHDL语言格式。
(Quartus II支持VHDL93、87标准)类属GENERIC常用来定义实体端口大小,数据宽度,元件例化数目等。
一般在简单的设计中不常用。
例1-1-2一个同步十六进制加法计数器,带有计数控制、异步清零、和进位输出等功能。
电路有三个输入端和五个输出端,分别是时钟脉冲输入端CLK,计数器状态控制端EN,异步清零控制端Rd,四位计数输出端Q0, Q1, Q2, Q3和一个进位输出端Co。
当计数器输出0000~1110时,Co=0,只有当计数器输出1111时,Co=1。
该设计的实体部分如下:ENTITY cntm16 ISPORT(EN : IN STD_LOGIC;Rd : IN STD_LOGIC;CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END cntm16;1. 实体名称表示所设计电路的电路名称,必须与VHDL文件名相同,实体名称是“cntm16”,所存的VHDL文件名必须是“cntm16.VHD”。
2. 端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义,如EN,Rd,CLK,Co分别表示计数允许信号,异步清零信号,时钟输入信号和进位输出信号,Q是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。
3. 端口信号输入/输出状态有以下几种状态:IN 信号进入电路单元。
OUT 信号从电路单元输出。
INOUT 信号是双向的,既可以进入电路单元也可以从电路单元输出。
BUFFER 信号从电路单元输出,同时在电路单元内部可以使用该输出信号。
小提示:O UT 与BUFFER信号的区别就在于信号是否往内部有反馈,将输出端口定义为BUFFER型,可以省去一个用于中间运算的一个临时信号,但是并不推荐这么做。
4. 端口数据类型(TYPE)定义端口信号的数据类型,在VHDL中,常用的端口信号数据类型如下:(1)位(BIT)型:表示一位信号的值,可以取值‘0’和‘1’,放在单引号里面表示,如X < =‘1’,Y <=‘0’。
(2)位向量(BIT_VECTOR)型:表示一组位型信号值,在使用时必须标明位向量的宽度(个数)和位向量的排列顺序,例如:Q : OUT BIT_VECTOR(3 downto 0),表示Q3,Q2,Q1,Q0四个位型信号。
位向量的信号值放在双引号里面表示,例如Q <= “0000”;(3)标准逻辑位(STD_LOGIC)型:IEEE标准的逻辑类型,它是BIT型数据类型的扩展,可以取值‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’等。
(4)标准逻辑位向量(STD_LOGIC_VECTOR)型:IEEE标准的逻辑向量,表示一组标准逻辑位型信号值。
VHDL是与类型高度相关的语言,不允许将一种数据类型的信号赋予另一种数据类型的信号。
除了上述介绍的数据类型外,还有其他多种数据类型用于定义内部信号和变量,请参见1-2节。
小提示:相同类型(模型相同,数据类型相同)的端口可以写在同一行,如:ENTITY cntm16 ISPORT(EN, Rd,CLK : IN STD_LOGIC;Co : OUT STD_LOGIC;Q : BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));END cntm16;此外要注意,最后一个端口结尾没有分号!1.1.4 VHDL语言的结构体(ARCHITECTURE)结构体是VHDL程序设计中的最主要组成部分,是描述设计单元的具体结构和功能,在程序中,结构体放在实体的后面。
每一个结构体都有名称,结构体的名称是由设计者任取的,结构体是以标识符ARCHITECTURE开头,以END结尾。
结构体可以有三种描述方式,分别是行为(BEA VHER)描述方式、数据流(DATAFLOW)描述方式和结构(STRUCTURE)描述方式,其中数据流(DA TAFLOW)描述方式又称为寄存器(RTL)描述方式。
不同的结构体采用不同的描述语句。
结构体的一般格式为:ARCHITECTURE 结构体名OF 实体名称IS说明语句BEGIN电路描述语句END 结构体名;结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说明。