第 5章 VHDL基本语句(一)
<EDA技术 与应用 > 课程讲义
合肥工业大学 彭良清
下一章上一章
本章内容
1,先看一个 VHDL代码的例子
2,简单代码结构:端口定义和电路逻辑表达
3,代码文件命名
4,进程 (PROCESS)
5,VHDL代码中的,Port,Siganl,Variable
6,学会简单 VHDL设计的三板斧
7,VHDL与 C 代码中的函数 的区别?
8,操作符 & 数据类型 & 赋值语句
9,逻辑分支语句,IF; CASE,
10,循环语句 (LOOP)
下一章内容
7,VHDL代码中的时序逻辑和组合逻辑表达
8,语句的执行时间问题
(顺序语句 & 并行语句)
9,基本单元电路的 VHDL代码
(三态门,双向缓冲器,计数器,D触发器,译码器)
11,复杂代码结构
(子程序 ; 元件 ; 块 ; 包 )
12,属性定义语句
13,库的使用
先看一个 VHDL代码的例子
1,VHDL code position,p77_ex4_7_DFF1
2,-------------------------------------------------------------------------------
3,LIBARY IEEE;
4,USE IEEE.STD_LOGIC_1164.ALL;
5,ENTITY DFF1 IS
6,PORT ( CLK, IN STD_LOGIC;
7,D, IN STD_LOGIC;
8,Q, OUT STD_LOGIC
9,);
10,END ENTITY DFF1;
11,ARCHITECTURE bhv OF DFF1 IS
12,SIGNAL Q1, STD_LOGIC;
13,BEGIN
14,PROCESS ( CLK )
15,BEGIN
16,IF CLK'EVENT AND CLK = '1' THEN
17,Q1 <= D; -- why don't use "Q <=D"
18,END IF;
19,Q<=Q1;
20,END PROCESS;
21,END ARCHITECTURE bhv;
Page:77
Example,4-7
D触发器
简单代码结构:
端口定义 & 电路逻辑表达
INPUT
PORT OUTPUTPORT
HOW TO WORK?
ENTITY 和 ARCHITECTURE
ENTITY 名称 IS
接口信号说明
END 名称 ;
ARCHITECTURE 构造名
OF 实体名 IS
功能描述
END 构造名 ;
d0
d1
d2
q
& ≥
&
d0
q
d2
d1
简单代码结构:
PORT 与 ENTITY
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,ENTITY DFF1 IS
4,PORT ( CLK, IN STD_LOGIC;
5,D, IN STD_LOGIC;
6,Q, OUT STD_LOGIC
7,);
8,END entity DFF1;
大 小 写
有区别吗?
ENTITY的定义语法
ENTITY Identifier IS
<Entity Header>
<Entity Declarative Part>
[ BEGIN
<Entity Statement Part> ]
END [ ENTITY ] [ <Entity Simple Name> ] ;
VHDL语法的 BNF定义
简单代码结构:
LOGIC 与 ARCHITECTURE
11,ARCHITECTURE bhv OF DFF1 IS
12,SIGNAL Q1, STD_LOGIC;
13,BEGIN
14,PROCESS ( CLK )
15,BEGIN
16,IF CLK'EVENT AND CLK = '1' THEN
17,Q1 <= D; -- why don't use "Q <=D"
18,END IF;
19,Q<=Q1;
20,END PROCESS;
21,END ARCHITECTURE bhv;
ARCHITECTURE的语法
ARCHITECTURE Identifier OF <Entity Name> IS
<Architecture Declarative Part>
BEGIN
<Architecture Statement Part>
END [ ARCHITECTURE ] [ <Architecture Simple Name> ] ;
代码文件 的 名称?
1,VHDL code position,p77_ex4_7_DFF1
2,-------------------------------------------------------------------------------
3,LIBARY IEEE;
4,USE IEEE.STD_LOGIC_1164.ALL;
5,ENTITY DFF1 IS
6,PORT ( CLK, IN STD_LOGIC;
7,D, IN STD_LOGIC;
8,Q, OUT STD_LOGIC
9,);
10,END ENTITY DFF1;
11,ARCHITECTURE bhv OF DFF1 IS
12,SIGNAL Q1, STD_LOGIC;
13,BEGIN
14,PROCESS ( CLK )
15,BEGIN
16,IF CLK'EVENT AND CLK = '1' THEN
17,Q1 <= D; -- why don't use "Q <=D"
18,END IF;
19,Q<=Q1;
20,END PROCESS;
21,END ARCHITECTURE bhv;

文件名称,DFF1.VHD
标识符 命名要点
1,大小写无区别
? VHDL语言认为是相同的,Verilog HDL认为是不同的。
2,同类标识符的书写格式应一致
? 从代码的可读性考虑
3,标识符的分类
? VHDL关键字 & 自定义标识符
4,标识符的长度
? 32
5,标识符的字母集合
? 英文字母 (A~Z);数字 (0~9);下划线 (_);反斜线 (/);
6,标识符的首个符号
? 英文字母
不 能 使用
关键词 来
定义
自己的 标识符号
这段 DFF代码中的 关键词
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,ENTITY DFF1 IS
4,PORT ( CLK, IN STD_LOGIC;
5,D, IN STD_LOGIC;
6,Q, OUT STD_LOGIC
7,);
8,END ENTITY DFF1;
9,ARCHITECTURE bhv OF DFF1 IS
10,SIGNAL Q1, STD_LOGIC;
11,BEGIN
12,PROCESS ( CLK )
13,BEGIN
14,IF CLK'EVENT AND CLK = '1' THEN
15,Q1 <= D; -- why don't use "Q <=D"
16,END IF;
17,Q<=Q1;
18,END PROCESS;
19,END ARCHITECTURE bhv;
红色的是?
更多关键字?
进程 ( PROCESS )
1,PROCESS ( CLK )
2,BEGIN
3,IF CLK'EVENT AND CLK = '1' THEN
4,Q1 <= D;
5,END IF;
6,Q<=Q1;
7,END PROCESS;
[ <Process Label>, ]
[ POSTPONED ] PROCESS [ ( <Sensitivity List> ) ] [ IS ]
<Process Declarative Part>
BEGIN
<Process Statement Part>
END PROCESS [ POSTPONED ] [ <Process Label> ] ;
语法格式
关于 进程 ( PROCESS )的疑问?
1,何时 PROCESS 被执行?
2,何时 PROCESS 执行结束?
3,可以有多个进程出现吗?
4,多个进程之间如何通信?
5,与 C 代码中的函数 的区别?
何时 PROCESS 被执行?
进程敏感量
1,PROCESS ( CLK )
2,BEGIN
3,IF CLK'EVENT AND CLK = '1' THEN
4,Q1 <= D;
5,END IF;
6,Q<=Q1;
7,END PROCESS;
CLK 信号 发生变化时
PROCESS 被执行
看看此 PROCESS的电路?
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,ENTITY and2 IS
4,PORT ( a, IN STD_LOGIC;
5,b, IN STD_LOGIC;
6,q, OUT STD_LOGIC
7,);
8,END ENTITY and2;
9,ARCHITECTURE bhv OF and2 IS
10,SIGNAL Q1, STD_LOGIC;
11,BEGIN
12,P0,
13,process(a)
14,begin
15,q <= a and b;
16,end process p0;
17,END ARCHITECTURE bhv;
可以有多个进程出现吗?
1,……
2,ARCHITECTURE BEHAV OF mul IS
3,SIGNAL temp, BIT
4,BEGIN
5,p_a:
6,PROCESS ( a,b,selx )
7,BEGIN
8,IF ( selx ='0' ) THEN
9,temp <= a;
10,ELSE
11,temp <= b;
12,END IF;
13,END PROCESS p_a;
14,p_b:
15,PROCESS ( temp,c,sely )
16,BEGIN
17,IF ( sely ='0' ) THEN
18,data_out<= temp;
19,ELSE
20,data_out<= c;
21,END IF;
22,END PROCESS p_b;
23,END ARCHITECTURE BEHAV;
参见:
p138_ex5_20_mul
多个进程之间如何通信?
端口, Port
PORT
在电路上的含义?
ENTITY DFF1 IS
PORT ( CLK, IN STD_LOGIC;
D, IN STD_LOGIC;
Q, OUT STD_LOGIC
);
END entity DFF1;
ENTITY DFF1 IS
PORT ( CLK, IN STD_LOGIC;
D, IN STD_LOGIC;
Q, OUT STD_LOGIC
);
END entity DFF1;
Port:语法
IN 输入
OUT 输出
INOUT 双向(输入 /输出)
BUFFER 双向
LINKAGE
VHDL代码中的变量:
Port,Siganl,Variable
Signal
在电路上的含义?
Signal 的一个例子
1,ARCHITECTURE bhv OF p119 IS
2,SIGNAL a,b,c,y,z, INTEGER;
3,BEGIN
4,PROCESS ( a,b,c )
5,BEGIN
6,y <= a + b;
7,z <= c - a;
8,y <= b;
9,END PROCESS;
10,END ARCHITECTURE bhv;
如果 a,b,c
分别为 1,2,3
Y的值
等于多少

PROCESS 外,
Signal的多重赋值?
1,ARCHITECTURE bhv OF p119 IS
2,SIGNAL a,b,c,y,z, INTEGER;
3,BEGIN
4,z <= c - a;
5,y <= a + b;
6,y <= b;
7,END ARCHITECTURE bhv;
非 法?
合 法?
信号( SIGNAL), 总结
1,定义格式:
SIGNAL 信号名,数据类型,= 初始值 ;
2,定义位置?
在一个 ARCHITECTURE 中
3,谁可以使用?
ARCHITECTURE 所有 PROCESS
Signal,定义错误吗?
1,ARCHITECTURE bhv OF p119 IS
2,SIGNAL a,b,c, IN INTEGER;
3,SIGNAL y,z, OUT INTEGER;
4,BEGIN
5,PROCESS ( a,b,c )
6,BEGIN
7,y <= a + b;
8,z <= c - a;
9,y <= b;
10,END PROCESS;
11,END ARCHITECTURE bhv;
变量,Variable
1,ARCHITECTURE behav OF DFF3 IS
2,BEGIN
3,PROCESS ( CLK )
4.
5,VARIABLE QQ,STD_LOGIC;
6,BEGIN
7,IF CLK'EVENT AMD CLK = '1' THEN
8,QQ,= D1;
9,END IF;
10.
11,Q1 <= QQ;
12,END PROCESS ;
13,END ARCHITECTURE behav;
详细参见:
p120_ex5_5_DFF3
:=
<=
的区别?
变量( VARIABLE ):总结
1,定义格式:
VARIABLE 变量名, 数据类型,= 初始值 ;
2,在何处定义(位置)
进程内部
3,谁使用(作用范围)
本进程使用
Signal & Variable 比较
SIGNAL VARIABLE
基本用法 用于作为电路中
的信号连线
用于作为进程中
局部数据存储单元
适用范围 在整个结构体内的
任何地方都能适用
只能在所定义的
进程中使用
行为特性 在进程的最后
才对信号赋值
立即
赋值
学会简单 VHDL设计的三板斧
1,了解 SIGANL,VARIABLE,PORT的使用
2,了解 ENTITY,ARCHITECTUR,
PROCESS的用法和关系
3,简单代码由 1个文件组成,其中 ENTITY定
义一个,ARCHITECTUR定义一个,
PROCESS定义一个或者多个
与 C 代码中的函数 的区别?
? 相同点:
1,何时调用?
2,参数和敏感量
3,变量(局部)的定义
? 差异点:
1,VHDL 本质上的并行执行? 硬件设计
2,软件总是顺序执行。任意 2句代码不可能同时执

VHDL & C
调试过程 的区别?
?C语言,任何软件语言
? 可以单步,断点对代码进行跟踪调试
?VHDL
? 不能跟踪调试,只能全速运行或者全速仿真。
操作符:分类
1,算术,Arithmetic
2,比较,Comparison
3,逻辑,logical
? 疑问:
1,操作符号的优先级别?
2,使用那种操作数?
操作符(一),Arithmetic
Operator Examples Description
+ a + b,+a addition
- a - b,-a subtraction
* a * b multiplication
Arithmetic operator,举例
1,PACKAGE example_arithmetic IS
2,TYPE small_INT IS RANGE 0 TO 7;
3,END example_arithmetic;
4,USE WORK.exmple_arithmetic.ALL;
5,ENTITY arithmetic IS
6,PORT ( a,b, IN SMALL_INT ;
7,m, OUT SMALL_INT
8,);
9,END ENTITY arithmetic;
10,ARCHITECTURE bhv OF arithmetic IS
11,BEGIN
12,c <= a + b ;
13,END ARCHITECTURE bhv;
加减法 代码
所消耗的 资源
很 大!!
操作符(二),Comparison
Operator Examples Description
< a < b less than
<= a <= b less than or equal to
> a > b greater than
>= a >= b greater than or equal to
= a = b equal to
/= a /= b not equal to
Comparison operator,举例
1,ENTITY relational_ops_1 IS
2,PORT (a,b,IN
BIT_VECTOR ( 0 TO 3 );
3,m,OUT
BOOLEAN
4,);
5,END ENTITY relational_ops_1;
6,ARCHITECTURE bhv OF
relational_ops_1 IS
7,BEGIN
8,output <= ( a=b );
9,END ARCHITECTURE bhv;
1,ENTITY relational_ops_2 IS
2,PORT ( a,b, IN
INTEGER RANGE 0 TO 3 ;
3,m
,OUT BOOLEAN
4,);
5,END ENTITY relational_ops_2;
6,ARCHITECTURE bhv OF
relational_ops_2 IS
7,BEGIN
8,output <= ( a >= b );
9,END ARCHITECTURE bhv;











操作符(三),logical
,Operator Examples Description
AND a AND b 与
NAND a NAND b 与非
OR a OR b 或
NOR a NOR b 或非
XOR a XOR b 异或
NOT NOT a 非
logical operator,举例
1,SIGNAL a,b,c, STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
2,SIGNAL d,f,f,g, STD_LOGIC_VECTOR ( 1 DOWNTO 0 );
3,SIGNAL h,i,j,k, STD_LOGIC;
4,SIGNAL l,m,n,o,p, BOOLEAN;
5.,.....
6,a <= b AND c;
7,d <= e OR f OR g;
8,h <= ( i NAND j ) NAND k;
9,I <= (m XOR n ) AND k;
10,h <= i AND j AND k;
11,h <= i AND j OR k;
12,a <= b AND e;
13,h <= i OR l;
?,.....
详细参见:
p239_ex8_16
那些语句

错误的?
数据类型
1,一个数据对象可以表达为不同的类型:
Port; Siganl; Variable; CONSTANT;
2,数据类型:
BIT; BIT_VECTOR; BOOLEAN; INTEGER;
(STD_LOGIC; STD_LOGIC_VECTOR)
CHARACTER;REAL;STRING; TIME;
3,数据对象的使用时应描述的特性
? 方向
? 数据类型
? 数组类型的位数
? 取值范围(可选)
一位信号的类型表达
类型 在那个库中 取 值 用法举例
BIT STANDARD包 ?0?,?1?
STD_LOGIC IEEE库的
TD_LOGIC_1164包
'U','X','0','1',
'Z','W','L','H',
'-'
BOOLEAN STANDARD包 FALSE,TRUE
N位信号的类型:数组
类 型 在那个库中 取值 用法举例
BIT_VECTOR STANDARD包 由
位数
决定STD_LOGIC_VECTOR IEEE库的
TD_LOGIC_116
4包
INTEGER STANDARD包
数据类型用法 举例
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,USE IEEE.STD_LOGIC_UNSIGNED.ALL;
4,ENTITY amp IS
5,PORT ( a1,a2, IN BIT_VECTOR ( 3 DOWNTO 0 );
6,c1,c2,c3, IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 );
7,b1,b2,b3, INTEGER RANGE 0 TO 15;
8,d1,d2,d3,d4, OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
9,);
10,END ENTITY amp ;
11,ARCHITECTURE behav OF amp IS
12,BEGIN
13,d1 <= TO_STDLOGICVECTOR ( a1 AND a2 );
14,d2 <= CONV_STD_LOGIC_VECTOR ( b3,4 );
15,d3 <= c1 WHEN conv_integer ( C2 ) = 8 else c3;
16,d4 <= c1 WHEN c2 = 8 else c3;
17,END ARCHITECTURE behav;
18,---------------------------------------------------------
19,-- fellow ing function is defined in IEEE.STD_LOGIC_UNSIGNED
20,--
21,-- FUNCTION TO_SDLOGICVECTOR ( arg,BIT_VECTOR )
22,-- RETURN STD_LOGIC_VECTOR;
23,--
24,-- FUNCTION CONV_INTEGER ( arg,STD_LOGIC_VECTOR )
25,-- RETURN INTEGER;
26,--
27,-- FUNCTION CONV_STD_LOGIC_V ECTOR ( arg,INTEGER ; size INTEGER )
28,-- RETURN STD_LOGIC_VECTOR;
29,--
? --
详细参见:
p235_ex8_13
p236_ex8_14
p237_ex8_15
赋值语句:描述
1,赋值语句的作用
? 将一个值或者一个表达式的运算结果传递给某
个数据对象
2,语法,有 2种赋值算符:
? Signal.Port 对象 使用, <=”
? Variable 对象 使用,,=”
3,应用举例
赋值语句:举例
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,-- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
4,ENTITY DFF3 IS
5,PORT ( CLK,D1, IN STD_LOGIC;
6,QQ, OUT STD_LOGIC
7,);
8,END ENTITY DFF3;
9,ARCHITECTURE behav OF DFF3 IS
10,BEGIN
11,PROCESS ( CLK )
12.
13,VARIABLE QQ,STD_LOGIC;
14,BEGIN
15,IF CLK'EVENT AMD CLK = '1' THEN
16,QQ,= D1;
17,END IF;
18.
19,Q1 <= QQ;
20,END PROCESS ;
21,END ARCHITECTURE behav;
详细参见:
p120_ex5_5
不同宽度信号之间的
赋值 和 转换
? 信号抽取
1,Signal a, STD_LOGIC_VECTOR(3 DOWNTO 0);
2,Signal b, STD_LOGIC_VECTOR(7 DOWNTO 0);
3,Signal c, STD_LOGIC_VECTOR(15 DOWNTO 0);
4,a(3 DOWNTO 0) <= b(7 DOWNTO 4)
? 信号合并
1,Signal a, STD_LOGIC_VECTOR(7 DOWNTO 0);
2,Signal b, STD_LOGIC_VECTOR(7 DOWNTO 0);
3,Signal c, STD_LOGIC_VECTOR(15 DOWNTO 0);
4,c <= b & b;
相同数值 赋给
多位数据的 的方法
请看
SIGNAL d1, STD_LOGIC_VECTOR ( 4 DWONTO 0 ) ;
VARIABLE a1, STD_LOGIC_VECTOR( 15 DWONTO 0 ) ;
SIGNAL e, STD_LOGIC_VECTOR ( 4 DWONTO 0 ) ;
············
d1<= ( OTHERS => ?0? );
a1:= ( OTHERS => ?0? );
···········
d1 <= ( 1 => ?1?,4 => ?1?,OTHERS => ?0? );
a1 <= ( 1 => e(1),4 => e(2),OTHERS => e(3) );
注意
=> 和 OTHERS
的使用
逻辑分支语句,IF
1,最重要的 VHDL语句
2,不同表达
导致 生成
时序 或者 组合电路,请看,代码
3,不完整 IF语句与时序电路, 代码
4,IF语句,总结
看 2段代码 中 IF的用法
1,ENTITY mux21a IS
2,PORT ( a,b, IN
BIT;
3,S, IN BIT;
4,y, OUT BIT
5,);
6,END ENTITY mux21a;
7,ARCHITECTURE one OF mux21a IS
8,BEGIN
9,PROCESS(a,b,s)
10,BEGIN
11,IF s='0' THEN
12,y<=a;
13,ELSE;
14,y<=b;
15,END IF;
16,END PROCESS;
17,END ARCHITECTURE one;
1,LIBARY IEEE;
2,USE IEEE.STD_LOGIC_1164.ALL;
3,ENTITY DFF1 IS
4,PORT ( CLK, IN STD_LOGIC;
5,D, IN STD_LOGIC;
6,Q, OUT STD_LOGIC
7,);
8,END ENTITY DFF1;
9,ARCHITECTURE bhv OF DFF1 IS
10,SIGNAL Q1, STD_LOGIC;
11,BEGIN
12,PROCESS ( CLK )
13,BEGIN
14,IF CLK'EVENT AND CLK = '1'
THEN
15,Q1 <= D;
-- why don't use "Q <=D"
16,END IF;
17,Q<=Q1;
18,END PROCESS;
19,END ARCHITECTURE bhv;
详细参见:
p71_ex4_4
详细参见:
p77_ex4_7
不完整 IF语句与时序电路
1,ENTITY COMP_BAD IS
2,PORT ( a1, IN BIT;
3,b1, IN BIT;
4,q1, OUT BIT
5,);
6,END ENTITY COMP_BAD;
7,ARCHITECTURE one OF COMP_BAD IS
8,BEGIN
9,PROCESS(a1,b1)
10,BEGIN
11,IF a1 > b1 THEN
12,q1 <= '1';
13,ELSIF a1 < b1 THEN
14,q1 <= '0';
15,END IF;
16,END PROCESS;
17,END ARCHITECTURE one;
1,ENTITY COMP_GOOD IS
2,PORT ( a1, IN BIT;
3,b1, IN BIT;
4,q1, OUT BIT
5,);
6,END ENTITY COMP_GOOD;
7,ARCHITECTURE one OF COMP_GOOD IS
8,BEGIN
9,PROCESS(a1,b1)
10,BEGIN
11,IF a1 > b1 THEN
-- comparing it with example 4_9,p82
12,q1 <= '1';
13,ELSE
14,q1 <= '0';
15,END IF;
16,END PROCESS;
17,END ARCHITECTURE one;
详细参见:
p71_ex4_4
详细参见:
p82_ex4_10
IF a1=b1:
q1=?
IF语句:总结
1,完整的
IF语句( IF-ELSE)
生成
组合 逻辑电路 (举例)
2,不完整的
IF语句( IF-ELSE)
生成
时序 逻辑电路 (举例)
3,4种 IF 语句
4,语法表达?
4种 IF 语句
1,第 1种
IF 条件句 THEN
顺序语句
END IF;
2,第 2种
IF 条件句 THEN
顺序语句
ELSE
顺序语句
END IF;
3,第 3种
IF 条件句 THEN
IF 条件句 THEN
……
END IF;
END IF;
4,第 4种
IF 条件句 THEN
顺序语句
ELSIF 条件句 THEN
顺序语句
………
ELSE
顺序语句
END IF;
IF语句, 语法( BNF表达)
[ <If Label> ]
IF <Condition> THEN
<Sequence of Statements>
{ ELSIF <Condition> THEN
<Sequence of Statements> }
[ ELSE
<Sequence of Statements> ]
END IF [ <If Label> ] ;
IF语句,用途
1,简单组合逻辑实现
(选择器,比较器,总线缓冲器)
1,时序逻辑实现
D触发器,寄存器,
2,只能在 PROCESS 中出现
是顺序语句
CASE:例子 (逻辑分支语句)
1~ 47 ···················
48,CASE sel IS
49,WHEN 0 => z1 <= '1';
50,WHEN 1|3 => z2 <= '1';
51,WHEN 4 to 7|2 => z3 <= '1';
52,WHEN OTHERS => z4 <= '1';
53,END CASE;
54,END PROCESS;
55,end architecture activ ;
详细参见:
p263_ex9_1
比较:
C代码, switch-case
CASE:语法
[ <Case Label>, ]
CASE <Expression> IS
WHEN <Choices> =>
<Sequence of Statements>
{ WHEN <Choices> =>
<Sequence of Statements> }
END CASE ;
CASE语句,用途
1,复杂组合逻辑实现(译码器),替代 IF语句
2,用于 FSM( 有限状态机 )编程
3,不能 产生时序逻辑
4,是顺序语句,只能在 PROCESS中出现
CASE语句,一些错误表达
1.,.....
2,SIGNAL valus, INTEGER RANGE 0 TO 15;
3,SIGNAL out, STD_LOGIC;
4.,.....
5,-- error case code 1
6,CASE value IS
7,END CASE;
8.,.....
9,-- error case code 2
10,CASE value IS
11,WHEN 0 => out1 <= '1';
12,WHEN 1 => out2 <= '0';
13,END CASE;
14.,.....
15,-- error case code 3
16,CASE value IS
17,WHEN 0 to 10 => out1 <= '1';
18,WHEN 5 to 15 => out2 <= '0';
19,END CASE;
20.,.....
详细参见:
p264_ex9_2
Why?
IF语句 和 CASE语句
混合使用的问题
32,·············
33,CASE opcode IS
34,WHEN plus => result <= a + b;
35,WHEN minus => result <= a - b;
36,WHEN equal =>
37,IF ( a = b ) THEN
38,result <= x"01";
39,ELSE
40,result <= x"00";
41,END IF;
42,WHEN not_equal =>
43,IF ( a /= b ) THEN
44,result <= x"01";
45,ELSE
46,result <= x"00";
47,END IF;
48,END CASE;
49,·············
详细参见:
p265_ex9_3
循环语句,LOOP/FOR
1,LOOP 与
FOR,NEXT,EXIT,构成
各种 循环语句
FOR 与 GENERATE 也可构成 循环语句
2,3 种类型 的循环语句
3,LOOP语句的 例子,1 2 3 4
4,LOOP语句,不常用的语句,
5,LOOP语句:可以 构成那种电路?
3种类型 的循环 语句
1,第 1种 例子 1
【 LOOP标号 】,
LOOP
顺序语句
END LOOP 【 LOOP标号 】 ;
2,第 2种 例子 2
【 LOOP标号 】,
FOR 循环变量, IN 循环次数范围 LOOP
顺序语句
END LOOP 【 LOOP标号 】 ;
3,第 3种 例子 3
标号,
FOR 参数名 IN 参数重复范围 GENERATE
元件描述语句
元件名 ( PORT MAP( 含参数配置表 ))
END GENERATE
LOOP语句的 例子(一)
1,…..
2,L2:
3,LOOP
4,a,= a + 1;
5,EXIT L2 WHEN a > 10;
LOOP语句的 例子(二)
1,SIGNAL a,b,c, STD_LOGIC_VECTOR ( 1 TO 3 );
2.,.....
3,FOR n IN 1 TO 3 LOOP
4,a <= b(n) AND c(n);
5,END LOOP;
6.,...
7,-- above loop statement can be replaced fellowing
8,a( 1 ) <= b( 1 ) AND c( 1 );
9,a( 2 ) <= b( 2 ) AND c( 2 );
10,a( 3 ) <= b( 3 ) AND c( 3 );
“n” 是
Signal 吗?
LOOP语句的 例子(三)
1,ENTITY add is
2,PORT ( a,b, IN BIT_VECTOR ( 1 TO 4 ) ;
3,s, OUT BIT_VECTOR ( 1 TO 4 );
4,carry, OUT BIT
5,)
6,END add ;
7,ARCHITECTURE add_struc OF add IS
8,COMPONENT fa ---- -全加器元件声明
9,PORT ( ai,bi,ci, IN BIT ;
10,so,co, OUT BIT );
11,END COMPONENT ;
12,SIGNAL cc, BIT_VECTOR (1 TO 4 ); cin,BIT; ----- 信号说明
13,BEGIN
14,cc0<=‘0’ ;
15,u, FOR n IN 1 TO 4 GENERATE ----- 相同元件重复例化
16,fn,fa PORT MAP (cc (n-1)=>ci,a (n)=> ai,b (n)=> bi,s(n)=> so,cc(n)=>co) ;
17,END GENERATE ;
18,carry<= cc4; ---- 位信号赋值
19,END add_struc ;
LOOP语句的 例子(四)
1,entity p_check is
2,port ( a, in std_logic_vector( 7 downto 0 );
3,y, out std_logic
4,);
5,end p_check ;
6,architecture behav of p_check is
7,SIGNAL tmp,STD_LOGIC;
8,BEGIN
9,PROCESS ( a )
10,BEGIN
11.
12,tmp <= '0';
13,FOR n IN 0 TO 7 LOOP
14,tmp <= tmp XOR a (n)
15,END LOOP;
16,y <= tmp;
17,END PROCESS;
18,end architecture behav ;
8位奇偶校验代码
详细参见:
p266_ex9_4
The end.
以下内容

正文的引用,
可不阅读。
硬件描述语言:起源
? 是电子电路的文本描述。
? 最早的发明者,美国国防部,VHDL,1983
? 大浪淘沙,为大者二:
VHDL 和 Verilog HDL
? 其他的小兄弟:
ABEL,AHDL,System Verilog,System C。
如何使用 VHDL来设计电路?
? VHDL设计电路的的 5步曲
1,语言编码
2,逻辑综合
3,功能和时序仿真
4,器件适配
5.
返回
MAX+PLUS II BNF
? MAX+PLUS II Help uses the Backus-Naur Form (BNF) to define the
syntax of the text file formats and message variables,BNF uses the
following notation,
? Characters,Meaning:
1.,:=,Is defined as” 定义为
2,<...> Identifiers (i.e.,variables) 标识符(如变量标识符)
3,[...] Optional items 可选项
4,{,.,} Repeated items (zero or more times) 重复条目
5.,..|..,Indicates a choice between items 在 2个条目间选择一个 (或 )
6.,n:n Suffix indicates a range (e.g.,<name char>:1:8 means "from 1 to 8
name characters")
7,italics Variables in syntax descriptions 可变量
8,Courier font Literal text in syntax descriptions,Bold Courier
font is also sometimes used to help distinguish literal text from italic
variables in syntax descriptions,
返回
STD_LOGIC的取值
1,TYPE std_ulogic IS ( 'U',-- Uninitialized
2,'X',-- Forcing Unknown
3,'0',-- Forcing 0
4,'1',-- Forcing 1
5,'Z',-- High Impedance
6,'W',-- Weak Unknown
7,'L',-- Weak 0
8,'H',-- Weak 1
9,'-' -- Don't care
10,);
返回
详细参见
STD1164.VHD