vhdl基本语法 ifdef
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基本语句
例
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语言的基本语法
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语言的基本语法解析
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四、顺序代码在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 if else语句
vhdl if else语句
VHDL
(VeryHigh-SpeedIntegratedCircuitHardwareDescriptionLanguag e)是一种硬件描述语言,它可以用来描述数字电路的行为。
if-else 语句是VHDL中常用的条件语句。
它用于根据一个条件是否成立来执
行不同的操作,语法如下:
if condition_1 then
--执行操作1
elsif condition_2 then
--执行操作2
else
--执行操作3
end if;
其中,condition_1是一个布尔表达式,如果它的值为TRUE,就执行第一个操作;如果值为FALSE,则继续判断condition_2,如果
它的值为TRUE,则执行第二个操作;如果condition_2的值也为FALSE,则执行第三个操作。
在VHDL中,if-else语句也可以嵌套使用,以实现更复杂的条
件判断。
在使用if-else语句时,需要注意以下几点:
1. 条件表达式必须是布尔型的,即只能取TRUE或FALSE两个值。
2. 在每个条件分支中,必须有且仅有一个操作被执行。
3. else语句是可选的,如果没有else语句,则当所有条件都
不成立时,不会执行任何操作。
4. 在VHDL中,if-else语句可以与选择语句(case语句)结合使用,以实现更灵活的条件判断。
总之,if-else语句是VHDL中常用的条件语句,用于根据一个条件是否成立来执行不同的操作。
要使用if-else语句,需要熟悉它的语法和注意事项。
第10章VHDL基本语句
END LOOP L2; ...
11
11
10.1.4 LOOP语句
(2) FOR_LOOP语句,语法格式如下: [LOOP标号:] FOR 循环变量 IN 循环次数范围 顺序语句
LOOP
END LOOP [LOOP标号];
SIGNAL tmp :STD_LOGIC ;
BEGIN
奇校验就是看2进制数旳1旳个数为奇数
PROCESS(a)
就在校验位填0 偶数就填1 使1旳个数
BEGIN
变成奇数个. 偶校验相反 把1旳个数变
tmp <='0';
成偶数.
FOR n IN 0 TO 7 LOOP 然后传送数据,接受后在做相应旳奇偶
FOR后旳”循环变量”是一种临时变量,属LOOP语句旳局 部变量,不必事先定义. 这个变量只能作为赋值源,不能被赋值,它 由LOOP语句自动定义. 使用时应该注意,在LOOP语句范围内不 要再使用其他与此循环变量同名旳标识符.
“循环次数范围”要求LOOP语句中旳顺序语句被执行次数. 循环变量从范围初值开始,每执行完一次顺序增1,直至最大值.
第 10 章 VHDL基本语句
1
1
10.1 顺序语句
VHDL有6种基本顺序语句:赋值语句、流程控制语句、等待 语句、子程序调用语句、返回语句、空操作语句.
10.1.1 赋值语句
信号赋值语句
10.1.2 IF语句
10.1.3 CASE语句
变量赋值语句
多条件选择
值体现式旳 4种形式
单个一般数值,如6。
数值选择范围,如(2 TO 4)。
第03章 VHDL语法基础
VARIABLE tmp:STD_LOGIC
16
第3章 VHDL语法基础
BEGIN
tmp:=„0‟;
FOR i IN 0 TO 7 LOOP tmp:= tmp XOR a(i);
END LOOP;
y <= tmp; END PROCESS;
END rtl;
17
第3章 VHDL语法基础
3、WHILE-LOOP语句
13
第3章 VHDL语法基础
三、LOOP语句
LOOP语句就是循环语句,它可以使包含的一组顺序语句 被循环执行,其执行的次数受迭代算法控制。在VHDL中常用 来描述迭代电路的行为。 1、单个LOOP语句 单个LOOP语句的书写格式如下: [标号:] LOOP 顺序语句
END LOOP[标号];
14
第3章 VHDL语法基础
这种循环语句需引入其他控制语句(如EXIT)后才能确定, 否则为无限循环。其中的标号是可选的。 例如:
loop1:LOOP
WAIT UNTIL clk=„1‟; q <= d AFTER 2 ns;
END LOOP loop1;
2、FOR-LOOP语句 [标号:] FOR 循环变量 IN 离散范围 LOOP 顺序处理语句
LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; ENTITY dff IS PORT(clk,d:IN STD_LOGIC;
q:OUT STD_LOGIC);
END dff;
ARCHITECTURE rtl OF dff IS BEGIN PROCESS (clk) BEGIN IF (clk‟EVENT AND clk=‟1‟) THEN q <= d; END IF; END PROCESS; END rtl; 3
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在内的整个设计使用。
vhdl if语句
vhdl if语句
嘿,你知道 VHDL 里的 if 语句吗?这玩意儿可太有意思啦!就好比你在走一条路,遇到不同的岔口,if 语句就像是那个帮你决定走哪条路的指示牌。
比如说,你正在设计一个数字电路,if 语句就能根据不同的条件来控制信号的走向。
咱就拿一个简单的例子来说吧,想象一下有个信号灯系统,红灯、黄灯、绿灯。
如果现在是红灯,那其他灯就得熄灭,这时候 if 语句就发挥作用啦!它就像个聪明的小指挥家,说:“嘿,如果是红灯,那就让红灯亮,其他灯都别亮。
”
在 VHDL 编程里,if 语句可灵活了呢!它能让你的设计变得超级智能。
你可以设置各种复杂的条件,就像给它穿上了不同的魔法外衣。
哎呀呀,它简直就是编程世界里的小精灵呀!
再比如,你设计一个温度控制系统,if 温度过高,那就启动风扇降温;if 温度过低,那就开启加热装置。
你看,这多神奇呀!它能根据实际情况做出最恰当的反应,是不是很厉害?
而且哦,if 语句还能嵌套使用呢,就像俄罗斯套娃一样,一层套一层。
这能让你的逻辑变得更加复杂和精细。
比如说,先判断一个大条件,然后在满足这个大条件的基础上,再判断小条件,这就像走迷宫一样,一层一层地深入。
你说,VHDL 的 if 语句是不是超级有趣,超级实用?它真的是让我
们的编程变得丰富多彩呀!我的观点就是,VHDL 的 if 语句是非常强
大且不可或缺的,它为我们的数字电路设计带来了无限的可能和便利!。
第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;
(完整word版)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 基础语法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基本语句用法
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的基本描述语句有并行语句(Concurrent Statements)和顺序语句(Sequential Statements)两大类(如表8-3所示)。
在系统设计中,这些基本描述语句从不同侧面完整地描述了数字系统的硬件结构和基本逻辑功能。
表8-3VHDL的并行语句和顺序语句并行语句用于表示算法模块间的连接关系,相互之间无次序关系,它们是并行执行的,与书写顺序无关。
VHDL的结构体由若干相互联系的并行描述语句组成,如图8-3所示。
并行描述语句在结构体中的语法格式如下:ARCHITECTURE 结构体名OF 实体名IS{说明语句}BEGIN{并行语句}END ARCHITECTURE 结构体名;并行描述语句主要有:并行信号赋值语句(Concurrent Signal Assignments)、进程语句(Process Statements)、块语句(Block Statements) 、元件例化语句(Component Instantiations)、生成语句(Generate Statements) 及并行过程调用语句(Concurrent Procedure Calls)等六种。
其中,进程语句和块语句是两种最主要、最常用的并行描述语句。
本节介绍这六种并行描述语句及其功能。
一、进程语句(TOP)进程PROCESS语句本身是并行描述语句,但却包含一系列顺序描述语句。
所以,设计中各个进程是并行执行,而各进程内的顺序描述语句却是按顺序执行。
进程与其他部分的通信,是通过从进程外的信号或端口中读取或者写入值来完成。
进程语句的语法格式如下:[进程名称:]PROCESS [(敏感表)]{进程声明}BEGIN{顺序语句}END PROCESS [进程名称];其中,进程声明是对子程序、类型、常量和变量等的说明;敏感表(Sensitivity_list)是所有敏感信号(包括端口)的列表;敏感表的语法格式为:信号名称{,信号名称}所谓进程对信号敏感,是指当信号发生变化时,能够触发进程中语句的执行。
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中IF语句的嵌套使用
VHDL中 IF语句的嵌套使用
看下面一段VHDL代码 其中Q定义为Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); IF CLK'EVENT AND CLK='1' THEN Q1<=Q1+1; IF Q1="1111" THEN A<='1';
ELSE A<='0'; END IF; END IF; 做的是一个四进制计数器,用A记录进位,但是上面的代码是如何执行的呢? 当来了一个上升沿脉冲的时候,下面怎么执行的?比如:当Q1=‘1111’时候,来了一个上升沿脉冲;然后Q1=0000了;下面IF 里的Q1是1111还是0000呢?
首先应该指出的是,这个设计不能称为“四进制计数器”,从二进制的角度说,它是一个4位(能从“0000”计到“1111”)的带进位的计 数器。
if语句属于顺序语句,设="1111"时如果来了时钟的上升沿,首先会执行Q1 <= Q1 +1,但由于Q1为信号(signal),信号的赋值是有延时的,所以下面的if语句里的Q1仍等于"1111",程序执行的结果是 A='1'。
如果你在进程的末尾把信号Q1赋给了输出端口Q的话,那时候Q的值为"0000",因为那时Q1<=Q1+1已经完成了。
如果你把Q1定义为变量(variable),变量的赋值是立即发生的,在接下来的if语句中Q1将等于"0000",程序执行结果是A=‘0’。 ——Medied.Lee
总结:信号赋值有延迟,变量赋值立即执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 DEBUG
report "Debug mode is enabled";
`else
report "Debug mode is disabled";
`endif
```
在上面的代码中,如果DEBUG宏被定义了,那么report语句"Debug mode is enabled"将被编译进去;否则将编译进去"Debug mode is disabled"。
除了`ifdef语句外,VHDL还提供了一些其他的条件编译指令,如
`ifndef(如果给定条件为假则编译)、`elsif(如果前面的条件为假则
继续判断下一个条件)、`elsif和`endif。
VHDL中的`ifdef语句能够帮助我们根据条件来控制代码的包含和编译,从而使代码更具有灵活性和可维护性。
当我们需要根据不同的条件来
进行调试、测试或者生产部署时,ifdef可以提供一种简洁而有效的方式来处理这些情况。
在VHDL中合理地使用ifdef语句可以提高代码
的可读性和可维护性,是VHDL程序设计中的一个重要技巧。