VHDL编程基础知识点总结
VHDL(VHSIC Hardware Description Language)是一种基于事件驱动的硬件描述语言,用于描述数字电路和数字系统的行为。下面是 VHDL 编程的基础知识点:
一、 VHDL 程序的组成部分
-
实体(Entity):描述所设计系统的外部接口特性,即该设计实体对外的输入、输出端口数量和端口特性。
-
结构体(Architecture):描述实体所代表的系统内部的结构和行为;它描述设计实体的结构、行为、元件及内部连接关系。
-
库(Library):存放已经编译的实体、构造体、程序包集合和配置。
-
程序包(Package):存放各设计模块都能共享的数据类型、常数和子程序库。
-
配置(Configuration):实体对应多个结构体时,从与某个实体对应的多个结构体中选定一个作为具体实现。
二、端口模式
-
Out(输出):只能被赋值,用于不能反馈的输出。
-
In(输入):只能读,用于时钟输入、控制输入单向数据输入。
-
Inout(输入输出):既可读又可被赋值,被读的值是端口输入值而不是被赋值,作为双向端口。
-
Buffer(缓冲):类似于输出,但可以读,读的值是被赋值,用做内部反馈用,不能作为双向端口使用。
三、标识符
-
合法的标识符:Led3、coder_1、std_machine、adder、decoder
-
非法的标识符:_decoder_1、and-2、and__2(带有特殊字符或数字开头)
四、实体描述中的语法错误
-
删除括号内的分号。
-
ENTITY 声明中,实体名应与 ARCHITECTURE 声明中的一致。
-
PROCESS 语句缺少结束的分号。
-
ARCHITECTURE 声明中,名称应与 ENTITY 声明中的一致。
五、设计实体的实体声明
ENTITY mux41 IS PORT( A, B, C, D : IN BIT ; SEL : IN BIT_VECTOR(1 DOWNTO 0) ; Q : OUT BIT );
六、表达式中的运算符重载
- VHDL 中,STD_LOGIC_VECTOR 数据类型不能直接进行加法运算,需要调用运算符重载,例如在程序开头添加 IEEE.STD_LOGIC_UNSIGNED.ALL 程序包。
七、整数类型的赋值
- 可以把任意一种进制的值向整数类型的对象赋值,例如,visto 16#0FA# 可以赋值给整数类型的对象。
八、VHDL 的数值表示
-
16#0FA# 合法
-
10#12F# 非法,十进制数值表示不需要 # 号。
-
8#789# 非法,八进制数值表示需要以 8# 开头,但不能超过八进制范围。
-
8#356# 非法,八进制数值表示需要以 8# 开头,但不能超过八进制范围。
-
2#0101010# 合法。
九、数据类型的定义
-
BIT、INTEGER、BOOLEAN 等数据类型分别定义在 IEEE.STD_LOGIC_1164.ALL 库中。
-
IEEE.STD_LOGIC_1164.ALL 库和 IEEE.STD_LOGIC_UNSIGNED.ALL 库总是可见的。