VHDL 编程常用语法及技巧汇总-命名规范及信号变量常量( 二 )


 
Constant

Constant即是“常量”的意思 , 它具有特定的物理意义 , 通常对应数字电路中的电源或者地 。Constant能出现在所有signal和variable出现的场合中 , 它的声明语法如下:
constant : := ;
可以注意到 , 常量是不能单独赋值的 , 仅仅能在声明的同时被初始化赋值 。
总结一下:信号、变量和常量之间差别:
差别一:赋值符号不同
变量声明使用variable , 赋值符号位:=
而信号声明用signal , 赋值符号为<=
差别二:使用位置不同或作用的范围不同
1、变量只能用在进程函数体 , 子程序内部
2、信号不能再进程中声明 , 信号用在结构体、实体、程序包 。
差别三:敏感信号表中只能为信号 , 不能为变量 。在一个进程中 , 变量及时赋值 , 信号在进程结束后赋值 。
(1)loop语句中 , 若在一个循环体内需要多次对某一个数据操作 , 则必须用变量 , 因为对信号赋值进行多次赋值只在最后一次才会有效 。
(2)数组的索引(index)只能用变量 。如果使用信号则编译会报错
编程心得(1)变量赋值无延时是针对进程运行而言的 , 只是一个理想值 , 对于变量的操作往往被综合成为组合逻辑的形式 , 而硬件上的组合逻辑必然存在输入到输出延时 。当进程内关于变量的操作越多 , 其组合逻辑就会变得越大越复杂 。假设在一个进程内 , 有关于变量的3个 级连操作 , 其输出延时 分别为5ns,6ns,7ns,则其最快的时钟只能达到18ns 。相反 , 采用信号编程 , 在时钟控制下 , 往往综合成触发器的形式 , 特别是对于FPGA芯片而言 , 具有丰富的触发器结构 , 易形成流水作业 , 其时钟频率只受控于延时最大的那一级 , 而不会与变量一样层层累积 。假设某个设计为3级流水作业 , 其每一级延时分别为10ns,11ns,12ns,则其最快时钟可达12ns 。因此 , 采用信号反而更能提高设计的速度 。
(2)由于变量不具备信息的相关性 , 只有当前值 , 因此也无法在仿真时观察其波形和状态改变情况 , 无法对设计的运行情况有效验证 , 而测试验证工作量往往会占到整个设计70%~80%的工作量 , 采用信号则不会存在这类问题 。
(3)变量有效范围只能局限在单个进程或子程序中 , 要想将其值带出与其余进程、子模块之间相互作用 , 必须借助信号 , 这在一定程度上会造成代码不够简洁 , 可读性下降等缺点 。

【VHDL 编程常用语法及技巧汇总-命名规范及信号变量常量】


推荐阅读