第10章 VHDL基本语句

合集下载

8.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语句

VHDL语句

VHDL的顺序语句和并行语句一、顺序语句顺序语句只能出现在进程(PROCESS)、子程序(过程(PROCEDURE)和函数(FUNCTION))中,其特点与传统的计算机编程语句类似,是按程序书写的顺序自上而下、一条一条地执行。

利用顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。

VHDL的顺序语句有赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句等六类。

<1>赋值语句赋值语句的功能是将一个值或一个表达式的运算结果传递给某一个数据对象。

(1)变量赋值语句格式:目标变量名:=赋值源(表达式);例如:x:=5.0;(2)信号赋值语句格式:目标信号名<=赋值源;例如:y<=…1‟;说明:该语句若出现在进程或子程序中则是顺序语句,若出现在结构体中则是并行语句。

( 3 )数组元素赋值例如:SIGNAL a,b:STD LOGIC VECTOR(1 TO 4);a<=“1101”;a(1 TO 2)<=“10”;a(1 TO 2)<=b(2 TO 3);<2>流程控制语句通过条件控制开关决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。

流程控制语句共有5种:IF语句CASE语句LOOP语句NEXT语句EXIT语句(1)IF语句1、IF 条件句Then 顺序语句END IF ;2、IF 条件句Then 顺序语句ELSE 顺序语句END IF ;3、IF 条件句Then 顺序语句ELSIF 条件句Then 顺序语句...ELSE 顺序语句END IF4、IF 条件句ThenIF 条件句Then...END IFEND IF例子:8线-3线优先编码器的设计LIBRARY IEEE;USE IEEE.STD LOGIC 1164.ALLENTITY coder ISPORT(a:IN STD LOGIC VECTOR(0 TO 7);y:OUT STD LOGIC VECTOR(0 TO 2));END coder;ARCHITECTURE example2 OF coder ISBEGINPROCESS(a)BEGINIF (a(7)=…0‟)THEN y<=”111”;ELSIF (a(6)=‟0‟) THEN y<=”011”;ELSIF (a(5)=‟0‟) THEN y<=”101”;ELSIF (a(4)=‟0‟) THEN y<=”001”;ELSIF (a(3)=‟0‟) THEN y<=”110”;ELSIF (a(2)=‟0‟) THEN y<=”010”;ELSIF (a(1)=‟0‟) THEN y<=”100”;ELSE y<=”000”;END IF;END PROCESS;END example2;(2)CASE语句格式:CASE 表达式ISWhen 选择值=>顺序语句;When 选择值=>顺序语句;…When OTHERS =>顺序语句;END CASE;说明:“=>”不是运算符,相当“THEN”。

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设计实体内的数据传递以及对端口界面外部数据的读写 都必须通过赋值语句的运行来实现。 功能是将一个值或表达式的运算结果传递给某一数据对象。 赋值语句有两种: 信号赋值语句和变量赋值语句 区别

第10章 VHDL基本语句-ST

第10章 VHDL基本语句-ST
1. 过程调用
15
10.1 顺 序 语 句
10.1.9 RETURN语句
过程 函数
返回语句仅用于子程序
16
10.1 顺 序 语 句
10.1.10 NULL语句 空操作语句不完成任何操作,常用于CASE语句。
17
10.2 VHDL并行语句
结构体中可综合并行语句:
18
10.2 VHDL并行语句
10.2.1 并行信号赋值语句 赋值目标必须都是信号
28
10.2 VHDL并行语句
10.2.6 REPORT语句 REPORT语句用来报告计算的有关信息,本身不可综合,仅用于仿真。
29
10.2 VHDL并行语句
10.2.7 断言语句 断言语句也不可综合,仅用于仿真
30
10.3 属性描述与定义语句
1. 信号类属性
2. 数据区间类属性
'RANGE [(n)]
EDA技术实用教程
第10章 VHDL基本语句
1
10.1 顺 序 语 句
顺序语句的特点:(仿真)执行顺序与其书写顺序是一致的 进程与子程序(函数、过程) 10.1.1 赋值语句
信号赋值 赋值目标 <= 赋值源 变量赋值 赋值目标 := 赋值源 注意赋值符号左右两端数据类型一致,以及与=>的区别 10.1.2 IF语句
32
10.1.3 CASE语句 单个普通数值数、数值选择范围、并列数值、混合方式
IF语句中条件句逐项顺序执行,具有向上相与的逻辑功能 CASE语句中条件句的次序不重要,其执行过程接近于并行方式
2
10.1 顺 序 语 句
10.1.3 CASE语句
3
10.1 顺 序 语 句

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) 若将变量用于进程之外,必须将该值赋给一个相同的 若将变量用于进程之外, 类型的信号,即进程之间传递数据靠的是信号。 类型的信号,即进程之间传递数据靠的是信号。

第10章VHDL基本语句

第10章VHDL基本语句
a := a+1; EXIT L2 WHEN a >10 ; -- 当a不小于10时跳出循环
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)。

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 if语句

vhdl if语句

vhdl if语句
嘿,你知道 VHDL 里的 if 语句吗?这玩意儿可太有意思啦!就好比你在走一条路,遇到不同的岔口,if 语句就像是那个帮你决定走哪条路的指示牌。

比如说,你正在设计一个数字电路,if 语句就能根据不同的条件来控制信号的走向。

咱就拿一个简单的例子来说吧,想象一下有个信号灯系统,红灯、黄灯、绿灯。

如果现在是红灯,那其他灯就得熄灭,这时候 if 语句就发挥作用啦!它就像个聪明的小指挥家,说:“嘿,如果是红灯,那就让红灯亮,其他灯都别亮。


在 VHDL 编程里,if 语句可灵活了呢!它能让你的设计变得超级智能。

你可以设置各种复杂的条件,就像给它穿上了不同的魔法外衣。

哎呀呀,它简直就是编程世界里的小精灵呀!
再比如,你设计一个温度控制系统,if 温度过高,那就启动风扇降温;if 温度过低,那就开启加热装置。

你看,这多神奇呀!它能根据实际情况做出最恰当的反应,是不是很厉害?
而且哦,if 语句还能嵌套使用呢,就像俄罗斯套娃一样,一层套一层。

这能让你的逻辑变得更加复杂和精细。

比如说,先判断一个大条件,然后在满足这个大条件的基础上,再判断小条件,这就像走迷宫一样,一层一层地深入。

你说,VHDL 的 if 语句是不是超级有趣,超级实用?它真的是让我
们的编程变得丰富多彩呀!我的观点就是,VHDL 的 if 语句是非常强
大且不可或缺的,它为我们的数字电路设计带来了无限的可能和便利!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【例10-8】 】 SIGNAL a, b : STD_LOGIC_VECTOR (1 DOWNTO 0); SIGNAL a_less_then_b : Boolean; ... a_less_then_b <= FALSE ; -- 设初始值 FOR i IN 1 DOWNTO 0 LOOP IF (a(i)='1' AND b(i)='0') THEN a_less_then_b <= FALSE ; -- a > b EXIT ; ELSIF (a(i)='0' AND b(i)='1') THEN a_less_then_b <= TRUE ; -- a < b EXIT; ELSE NULL; END IF; END LOOP; -- 当 i=1时返回 时返回LOOP语句继续比较 时返回 语句继续比较
康芯科技
KX
10.1 顺序语句
10.1.5
NEXT; ; NEXT LOOP标号; 标号; 标号
NEXT语句 NEXT语句
-- 第一种语句格式 -- 第二种语句格式
NEXT LOOP标号 WHEN 条件表达式; -- 第三种语句格式 条件表达式; 标号
【例10-6】 】 ... L1 : FOR cnt_value IN 1 TO 8 LOOP s1 : a(cnt_value) := '0'; NEXT WHEN (b=c); s2 : a(cnt_value + 8 ):= '0'; END LOOP L1;
KX
康芯科技
10.1 顺序语句
【例10-4】 】 LIBRARY IEEE; ; USE IEEE.STD_LOGIC_1164.ALL; ; ENTITY p_check IS PORT ( a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); y : OUT STD_LOGIC ); END p_check; ; ARCHITECTURE opt OF p_check IS SIGNAL tmp :STD_LOGIC ; BEGIN PROCESS(a) BEGIN tmp <='0'; FOR n IN 0 TO 7 LOOP tmp <= tmp XOR a(n); END LOOP ; y <= tmp; END PROCESS; END opt;
KX
康芯科技
10.1 顺序语句
10.1.6
EXIT; ; EXIT LOOP标号; 标号; 标号 EXIT LOOP标号 WHEN 条件表达式; 标号 条件表达式;
EXIT语句 EXIT语句
-- 第一种语句格式 -- 第二种语句格式 -- 第三种语句格式
KX
康芯科技
10.1 顺序语句
10.1.6 EXIT语句 EXIT语句
EDA 技术实用教程
第 10 章 VHDL基本语句 基本语句
10.1 顺序语句
10.1.1 赋值语句
信号赋值语句 变量赋值语句
10.1.2 IF语句 语句
单个普通数值, 单个普通数值,如6。 。
10.1.3 CASE语句 语句
数值选择范围, 4)。 数值选择范围,如(2 TO 4)。 并列数值, 并列数值,如35。 混合方式,以上三种方式的混合。 混合方式,以上三种方式的混合。
KX
康芯科技
【例10-1】 】 LIBRARY IEEE; ; USE IEEE.STD_LOGIC_1164.ALL; ; ENTITY mux41 IS PORT (s4,s3, s2,s1 : IN STD_LOGIC; , , z4,z3, z2,z1 : OUT STD_LOGIC); , , END mux41; ; ARCHITECTURE activ OF mux41 IS SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN PROCESS (sel ,s4,s3,s2,s1 ) , , , BEGIN sel<= 0 ; -- 输入初始值 IF (s1 ='1') THEN sel <= sel+1 ; ELSIF (s2 ='1') THEN sel <= sel+2 ; ELSIF (s3 ='1') THEN sel <= sel+4 ; ELSIF (s4 ='1') THEN sel <= sel+8 ; ELSE NULL; -- 注意,这里使用了空操作语句 注意, END IF ; z1<='0' ; z2<='0'; z3<='0'; z4<='0'; --输入初始值 输入初始值 CASE sel IS WHEN 0 => z1<='1' ; -- 当sel=0时选中 时选中 WHEN 13 => z2<='1' ; -- 当sel为1或3时选中 为 或 时选中 WHEN 4 To 72 => z3<='1'; -- 当sel为2、4、5、6或7时选中 为 、 、 、 或 时选中 WHEN OTHERS => z4<='1' ; -- 当sel为8~15中任一值时选中 为 ~ 中任一值时选中 END CASE ; 康芯科技 END PROCESS ; X END activ ;
KX
康芯科技
10.1 顺序语句
10.1.7
WAIT; ; WAIT ON 信号表; 信号表; WAIT UNTIL 条件表达式; 条件表达式; WAIT FOR 时间表达式; 时间表达式;
WAIT语句 WAIT语句
-- 第一种语句格式 -- 第二种语句格式 -- 第三种语句格式
-- 第四种语句格式,超时等待语句 第四种语句格式,
-- 缺少以WHEN引导的条件句 引导的条件句 缺少以
-- value2~15的值未包括进去 ~ 的值未包括进去
-- 选择值中 ~10的值有重叠 选择值中5~ 的值有重叠
KX
康芯科技
【例10-3】 】
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY alu IS PORT( a, b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); opcode: IN STD_LOGIC_VECTOR (1 DOWNTO 0); result: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END alu; ARCHITECTURE behave OF alu IS CONSTANT plus : STD_LOGIC_VECTOR (1 DOWNTO 0) := CONSTANT minus : STD_LOGIC_VECTOR (1 DOWNTO 0) := CONSTANT equal : STD_LOGIC_VECTOR (1 DOWNTO 0) := CONSTANT not_equal: STD_LOGIC_VECTOR (1 DOWNTO 0) := BEGIN PROCESS (opcode,a,b) BEGIN CASE opcode IS WHEN plus => result <= a + b; -- a、b相加 、 相加 WHEN minus => result <= a - b; -- a、b相减 、 相减 WHEN equal => -- a、b相等 、 相等 IF (a = b) THEN result <= x"01"; ELSE result <= x"00"; END IF; WHEN not_equal => -- a、b不相等 、 不相等 IF (a /= b) THEN result <= x"01"; ELSE result <= x"00"; END IF; END CASE; END PROCESS; END behave;
WAIT UNTIL WAIT UNTIL WAIT UNTIL
WAIT WAIT WAIT WAIT
UNTIL UNTIL UNTIL UNTIL
clock ='1'; rising_edge(clock) ; NOT clock’STABLE AND clock ='1'; clock ='1' AND clock’EVENT;

KX
康芯科技
10.1 顺序语句
10.1.4 LOOP语句 LOOP语句
【例10-5】 】 SIGNAL a, b, c : STD_LOGIC_VECTOR (1 TO 3); ... FOR n IN 1 To 3 LOOP a(n) <= b(n) AND c(n); END LOOP; 此段程序等效于顺序执行以下三个信号赋值操作: 此段程序等效于顺序执行以下三个信号赋值操作: a(1)<=b(1) AND c(1); a(2)<=b(2) AND c(2); a(3)<=b(3) AND c(3);
... L2 : LOOP a := a+1; EXIT L2 WHEN a >10 ; END LOOP L2; ... -- 当a大于 时跳出循环 大于10时跳出循环 大于
KX
康芯科技
10.1 顺序语句
10.1.4 LOOP语句 LOOP语句
(2) FOR_LOOP语句,语法格式如下: 语句, 语句 语法格式如下: [LOOP标号:] FOR 循环变量,IN 标号: 循环变量, 标号 顺序语句 END LOOP [LOOP标号 ; 标号]; 标号 循环次数范围 LOOP
相关文档
最新文档