您所在的位置:首页 > 嵌入式技术 > 其他 > 世纪娱乐注册注册网站

世纪娱乐注册注册网站

2022-09-30
世纪娱乐登录官方入口

  标识符命名规范

  标识符用于定义实体名、结构体名、信号和变量名等,选择有意义的命名对设计是十分重要的。命名包含信号或变量诸如出处、有效状态等基本含义,有利于提高代码的可读性。

  1.1 标识符习惯命名规则

  1.1.1 标识符定义命名规定

  标识符第一个字符必须是字母,最后一个字符不能是下划线,同时不允许出现连续两个下划线。基本标识符只能由字母、数字和下划线组成,标识符两词之间须用下划线连接,如 Packet_addr, Data_in, Mem_wr, Mem_ce。标识符不得与保留字同名,VHDL规定的保留字见1.3。

  1.1.2 标识符大小写规定

  通常情况下,常量、数据类型、实体名和结构体名采用全部大写,变量采用小写,信号仅第一个词首字符采用大写,保留字一律小写。

  1.2 信号名习惯命名规则

  1.2.1 信号名缩写规定

  信号名常采用缩写形式以便书写和理解,单词缩写中信号名的第一个单词首字符通常大写,例如Addr_in。采用缩写时应保证同一信号在模块中和不同层次内的一致性。

  部分常用的缩写为:

  Addr address; Clk clock; Clr clear;

  Cnt counter; En enable; Inc increase;

  Lch latch; Mem memory; Pntr pointer;

  Pst preset; Rst reset; Reg register;

  Rd reader; Wr write;

  ROM; RAM; CPU; FIFO; ALU; CS; CE

  1.2.2 信号名命名建议

  信号名应当使用有意义而且有效的名字,能简单包含该信号的全部或部分信息,如:Data_in(数据输入)、Din(单根数据线输入)、FIFO_out(FIFO数据总线输出)、Cnt8_q(8位计数器输出信号)。

  信号名采用明确且有意义的后缀 ,常用的后缀如下:

87.JPG

  说明:

  采用金娱乐网址国际网站对信号进行延迟、延迟信号的命名在原信号名之后加后缀_L,若是在流水线设计中有级延迟,再分别加后缀_L1、_L2……(L表示lock);模块内的反馈信号,在原信号名之后加后缀_s(s表示same)。

  1.3 VHDL保留字

  VHDL的保留字汇总如下:

  absaccess after alias all and architecture array assert  attribute begin block buffer bus case component configuraTIon constant disconnect downto else elsif end enTIty exit file for funcTIon generate generic group guarded if impure in inerTIal inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process pure range record register reject rem report return rol ror select severity signal shared sla sll sra srl subtype then to transport type unaffected units until use variablewait when while with xnor xor

  02

  数据对象与类型

  2.1 数据对象与类型概述

  VHDL是很强的类型语言,其数据对象和类型汇总见下表:(其中红色字体为不可综合的数据对象和数据类型)

88.JPG

  不同基本类型的数据不能由另一类型赋值,不同类型间的赋值需使用运算符的重载,例如Cnt8_q为STD_LOGIC_VECTOR类型,若不调用相关库(使用use IEEE.std_logic_arith.all 语句)对 '+' 运算符进行重载,则 Cnt8_q <= Cnt8_q + 1 语句在综合中将报错。

  通常情况常量名和数据类型菜用大写标识符表示。

  2.2 数据类型使用建议与注意内容

  为改善代码的可读性,可把常用的常量和自定义的数据类型在程序包中定义;使用别名来标识一组数据类型有利于使代码更清晰,如

  signal Addr STD_LOGIC_VECTOR(31 downto 0);

  alias Top_addr STD_LOGIC_VECTOR(3 downto 0) is Addr(31 downto 28) ;

  可枚举类型的值为标识符或单个字母的字面量是区分大小写的,如 Z 与z 是两个不同的量。

  03

  信号、变量与常量

  3.1 信号、变量与常量的含义

  VHDL常用的数据类型主要有信号、变量与常量这三类,不同类型的数据有各自不同的含义:

  3.1.1 信号(signal)

  信号是VHDL语法中最重要、最常用的一种可赋值对象,一般对应电路中特定的物理连线或存储单元。除在模块内部声明的signal数据外,VHDL模块的port结构中in、out、buffer或者inout类型的端口也是signal类型的。

  3.1.2 变量(variable)

  变量在VHDL代码中不具有特定的物理意义,对应关系也不太直接。作为一个局部量,变量通常只代表某些值暂存的载体。

  3.1.3 常量(constant)

  常量在VHDL具有特定的物理意义,通常对应数字电路中的电源或者地。常量能出现在所有信号和变量出现的场合,定义常量的主要目的是为了使设计实体中的某些量易于阅读和修改。

  3.2 信号、变量与常量的声明与赋值

  VHDL数据在调用前需要进行声明与赋值操作,不同数据类型的数据声明与赋值的位置和方式有所不同:

  ARCHITECTURE … OF … IS

  SIGNAL 信号1:数据类型;

  --信号声明在这里,在ARCHITECTURE的BEGIN之前

  BEGIN

  PROCESS(…)

  VARIABLE 变量1:数据类型;

  --变量声明在这里,在PROCESS的BEGIN之前。

  BEGIN

  END PROCESS;

  END;

  3.2.1 信号的声明与赋值

  信号通常在结构体内部,进程、子程序及函数外部声明;在进程中,信号赋值仅在进程结束时起作用,即不能够为同一信号多次赋值。

  信号声明:SIGNAL 信号名:数据类型 := 初值;

  信号赋值:信号名 <= 数值;

  3.2.2 变量的声明与赋值

  变量通常只能在进程、子程序和函数内部声明;变量的赋值是立即起作用的,即变量值在赋新值时立刻改变。

  变量声明:VARIABLE 变量名:数据类型 := 初值;

  变量赋值:变量名 := 数值/表达式;

  3.2.3 常量的声明与赋值

  常量可以在信号和变量出现的所有场合进行声明,通常情况下,常量不能单独赋值,仅能在声明的同时被初始化赋值。

  常量声明:CONSTANT 常量名:数据类型 := 表达式;

  3.3 使用建议与注意内容

  1. 信号通常情况下不允许赋初值:

  尽管当前主流FPGA均支持数据赋初值,但是为避免硬件可能出现的问题,通常不在信号声明时赋初值,而是采用复位时赋值的方法来赋初值。

  2. 变量在可综合模块中不建议使用:

  变量主要用在高层次的模拟模型建模及用于运算的用途,由于变量的综合较难定义,对于编写可综合的VHDL模块,在没有把握综合结果情况下不建议使用。

  3. 信号在进程中赋值情况解释:

  signal_assign: process(A,B,C)

  begin

  D <= A;----- ignored!!

  X <= C or D ;

  D <= B ;---- overrids !!

  Y <= C xor D ;

  end;

  上面代码的实际运行结果是:B赋值给D,C or B的结果赋值给X,C xor B的结果赋值给Y。

  4. 变量在进程中赋值情况解释:

  variable_assign:process(A,B,C)

  variable d:STD_LOGIC

  begin

  d := A;

  X <= C or d;

  d := B;

  Y <= C xor d ;

  end process;

  上面代码的实际运行结果是:C or A赋值给X,C xor B赋值给Y。



更多信息可以来这里获取==>>世纪娱乐注册-AET<<

mmexport1621241704608.jpg

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:[email protected]