FPGA与VHDL 小结 | 您所在的位置:网站首页 › 电气识图应该注意哪些问题 › FPGA与VHDL 小结 |
参考:http://blog.sina.com.cn/s/blog_72cd3a5c01014wl1.html 参考:http://blog.csdn.net/shanekong/article/details/42686135
一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。 一、数据类型 1.用户自定义数据类型 使用关键字TYPE,例如: TYPEmy_integer IS RANGE -32 TO 32; –用户自定义的整数类型的子集 TYPEstudent_grade IS RANGE 0 TO 100; –用户自定义的自然数类型的子集 TYPEstate IS (idle, forward, backward, stop); –枚举数据类型,常用于有限状态机的状态定义 一般来说,枚举类型的数据自动按顺序依次编码。 2.子类型 在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。 子类型定义使用SUBTYPE关键字。 3.数组(ARRAY) ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。 TYPEtype_name IS ARRAY (specification) OF data_type; –定义新的数组类型语法结构 SIGNALsignal_name: type_name [:= initial_value]; –使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明 例如: TYPEdelay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0); –滤波器输入延迟链类型定义 TYPEcoeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0); –滤波器系数类型定义 SIGNALdelay_regs: delay_lines; – 信号延迟寄存器声明 CONSTANTcoef: coeffs := ( ); –常量系数声明并赋初值 4.端口数组 在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。 —————————————PACKAGE———————————- libraryieee; useieee.std_logic_1164.all; —————————————— PACKAGEmy_data_types IS TYPE vector_array IS ARRAY (natural range) OF STD_LOGIC_VECTOR(7 DOWNTO 0); –声明8位的数组 ENDmy_data_types; ———————————–MainCode————————————— libraryieee; useieee.std_logic_1164.all; usework.my_data_types.all; –用户自定义包集 —————————————————————— ENTITYmux IS PORT(inp: IN vector_array(0 to 3); ENDmux; ——————————————————————————- 5.有符号数和无符号数 要使用SIGNED和UNSIGNED类型数据,必须在代码开始部分声明ieee库中的包集std_logic_arith。它们支持算术运算但不支持逻辑运算。 libraryieee; useieee.std_logic_1164.all; useieee.std_logic_arith.all; …… SIGNALa: IN SIGNED (7 DOWNTO 0); SIGNALb: IN SIGNED (7 DOWNTO 0); SIGNALx: IN SIGNED (7 DOWNTO 0); …… v |
CopyRight 2018-2019 实验室设备网 版权所有 |