VHDL语言要素

[复制链接]

150

主题

445

帖子

1912

积分

审核员

Rank: 9Rank: 9Rank: 9

积分
1912
楼主
查看: 3733回复: 2 发表于 2019-9-9 09:52:34   只看该作者
1. VHDL文字规则
  1)数字型文字
     数字型文字的值有多种表达方式,现列举如下:
(1)整数文字:整数文字都是十进制的数。
如:4、578,0,156E2(=15600),45_234_287(=45234287)。数字间的下划线仅仅是为了提高文字的可读性,相当于一个空的间隔符。

(2)实数文字:实数文字也都是一种十进制的数,但必须带有小数点。
如:18.993,1.0,0.0,88_670_551_909(=88670551.453909)。

(3)以数制基数表示的文字:用这种方法表示的数由五个部分组成。
            第一部分,用十进制数标明数制进位的基数;
            第二部分,数制隔离符号“#”;
            第三部分,表达的文字;
            第四部分,指数隔离符号“#”;
            第五部分,用十进制表示的指数部分,这一部分的数如果是0可以省去不写。
        如:10#170#  - -(十进制数表示,等于170);
                  2#1111 _ 1110# - -(二进制数表示,十进制数等于是254);
                  16#F.01#E+2  - -(十六进制数表示,二进制数等于2#1111 _ 0000 _ 0001#,十进制数等于3841.00)。

(4)物理量文字(VHDL综合器不接受此类文字)
                  如:50s(50秒),200m(200米),177A(177安培)。

2)字符及字符串型文字
      字符:是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母。
               如:‘R’,‘A’,‘*’,‘Z’。
      字符串:是一维的字符数组,须放在双引号中。
(1)文字字符串:它是用双引号引起来的一串文字。
                      如:“BB$CC” ,“ERROR”,“BOTH S AND Q EQUAL TO L”,“X”。

(2)数位字符串:数位字符串也称位矢量,是预定义的数据类型BIT的一位数组,它们所代表的是2进制、8进制、16进制的数组,其位矢量的长度即为等值的二进制数的位数。数位字符串的表示首先要有计算基数, 然后将该基数表示的值得放在双引号中,基数符分别以“B”、“O”、和 “X”表示2进制、8进制、16进制,并放在字符串的前面。例如:B“1_1101_1110”- - 二进制数数组,位矢数组长度是9;X“AD0”- - 十六进制数数组,位矢数组长度是12。

标识符用来定义常数、变量、信号、端口、子程序或参数的名字。VHDL的基本标识符是以英文字母开头,不连续使用下划线“_”,不以下划线“_”结尾的,由26个大小写英文字母、数字0~9以及下划线“_”组成的字符串。VHDL’93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。标识符中的英语字母不分大小写。VHDL的保留字不能用于作为标识符使用。如:DECODER_1,FFT,Sig_N,NOT_ACK,State0,Idle是合法的标识符。而_DECOER_1,2FFT,SIG_#N,NOT—ACK,RYY_RST_ ,data_ _ BUS,RETURN则是非法的标识符。

4)下标名及下标段名
下标段名:用于指示数组型变量或信号的某一段元素;
下标名:用于指示数组型变量或信号的某一元素。
语句格式如下:数组类型符号名或变量名(表达式1  [TO/DOWNTO  表达式2]);
注:表达式的数值必须在数组元素下标号范围以内,并且是可计算的。
       TO表示是数组下标序列由低到高,如“3 TO 8”;
       DOWNTO表示数组下标序列由高到低,如“9 DOWNTO 2”。
       如果表达式是一个可计算的值,则此操作可很容易地进行综合。
       如果是不可计算的,则只能在特定情况下综合,且耗费资源较大。
       示例:
               SIGNAL   A,B,C:  BIT_VECTOR(0 TO 5);
               SIGNAL   M:INTEGER  RANGE 0 TO 5;
               SIGNAL   Y,Z:BIT;
              Y〈=A(M):                  --M是不可计算型下标表示
              Z〈=B(3):                    --3是可计算型下标表示
              C(0 TO 3)〈=A(4 TO 7):     --以段的方式进行赋值
              C(4 TO 7)〈=A(0 TO 3):     --以段的方式进行赋值

2. VHDL数据对象
    1)常量(CONSTANT):(全局量,恒定不变的值)
             定义语法格式:            
                     CONSTANT    常量名:数据类型:=表达式;
              如:CONSTANT  DELY:=25ns;

     2)变量(VARIABLE):(局部量,只能在进程和子程序中使用,不可列入敏感量)
              定义语法格式:
                     VARIABLE    常量名:数据类型:=初始值;
               赋值语法格式:              
                      目标变量名:=表达式;
              如:VARABLE   A: INTEGER;    A:=3;

       3)信号(SIGNAL) :(全局量,类似连接线,可列入敏感量)
              定义语法格式:
                      SIGNAL  常量名:数据类型<=初始值;
               赋值语法格式:              
                       目标变量名<=表达式;
               如: SIGNAL  S1:STD_LOGIG; S1 <= ‘1’;

4)三者的使用比较
(1)从硬件电路系统来看,常量相当于电路中的恒定电平,如GND或VCC接口,而变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。

(2)从行为仿真和VHDL语句功能上看,变量和信号的区别主要表现在接受和保持信号的方式、信息保持与传递的区域大小上。例如信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。

(3)从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。例如在满足一定条件的进程中,综合后它们都能引入寄存器。这时它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性。

(4)虽然VHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去。这是因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。




43

主题

241

帖子

509

积分

单晶硅锭

Rank: 3Rank: 3

积分
509
沙发
发表于 2019-9-9 10:18:40   只看该作者
谢谢楼主分享

31

主题

98

帖子

349

积分

二氧化硅

Rank: 2

积分
349
板凳
发表于 2019-9-16 16:07:21   只看该作者
谢谢分享
快速回复 返回顶部 返回列表