我是靠谱客的博主 无心镜子,这篇文章主要介绍第一篇 Verilog入门—语言要素 数据类型一、Verilog HDLy语言要素二、数据类型,现在分享给大家,希望可以做个参考。

一、Verilog HDLy语言要素

1、空白符:空白符包括空格符(b)、制表符(t)、换行符与换页符。在编译和综合时,空白 符被忽略。(提高程序易读性,层次性)

例如:initial begin a=3'b100; b=3'b010; end

相当于:inital

begin

a=3'b100;

b=3'010;

end

2、注释符

(1)单行注释:以"//"开始,Verilog HDL忽略从此处到行尾的内容。

例: assign a=b & c; // 单行注释

(2)多行注释:以"/*"开始,到"*/"结束,Verilog HDL忽略其中的注释内容

例: assign a[3:0] = b[3:0] & c[3:0]; /*注释行1

注释行2*/

非法多行注释:/*注释内容/*多行注释嵌套多行注释*/注释内容*/

合法多行注释:/*注释内容//多行注释嵌套单行注释*/

3、标识符

在Verilog中标识符(Identifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。应该注意的是标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。

例:合法标识符:                         非法标识符:

count                                             30count               //标识符不允许以数字开头

COUNT // 与count不同                  out*                     //标识符中不允许包含字符*

_CC_G5                                        a+b-c                   //标识符中不允许包含字符+和-

B25_78                                          n@238                //标识符中不允许包含字符@

SIX

4、关键字

Verilog HDL语言内部已经使用的词称为关键字或保留字,它是Verilog HDL语言内部的专用词,是事先定义好的确认符,用来组织语言结构,这些关键字用户不能随意使用,需注意的是,所有的关键字都是小写的。

例:ALAWAYS不是关键字,它只是标识符,与alwaays(关键字)是不同的。

5、数值

Verilog HDL有四种基本的逻辑数值状态

                          状态                       含义
                             0                                      低电平、逻辑“0”或“假”
                             1                       高电平、逻辑“1”或“真”
                          x或X         不确定或未知的逻辑状态    
                          z或Z                       高阻态

 *  整数及其表示            表示方式: +/-<size>'<base_format> <number>

                 数制             基数符号        合法标识符
               二进制                b或B0、1、x、X、z····   
               八进制                o或O

0~7、x、X、z、Z····

               十进制                d或D             0~9,···
              十六进制                h或H0~9、a~f、A~F、x···

 例:正确的表示:                                            错误的表示:

8'b10001101 //位宽为8位的二进制数                4'd-4         //数值不能为负,有负号应放最左边

8'ha6             //位宽为8位的十六进制数a6        3' b001     // ' 和基数b之间不允许存在空格

5'o35             //5位八进制数35                          (4+4)'b11  //位宽不能是表达式形式

4'd6               //4位十进制数6

4'b1x_01       //4位二进制数1x01(加“_”使得程序易读)      

*  实数及其表示:

(1)、十进制数表示法,采用十进制格式,小数点两边都有数字,否则为非法的表示形式。例如:3.0,4.56,2.1等都是正确的,而5.就是错误的。

(2)、科学计数法,例如:564.2e2的值为56420.0,8.7E2的值为870.0(e不分大小写),3E-3的值为0.003。

二、数据类型

* 物理数据类型:连线型、寄存器型和存储器型数据类型

     信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度存在下的赋值冲突:

       标记符           名称           类型       强弱程度
       supply      电源级驱动           驱动

    从上到下

    依次减弱

       strong          强驱动           驱动
        pull      上拉级驱动           驱动
       large         大容性           存储
       weak         若驱动           驱动
      medium       中性驱动           存储
        small         小容性           存储
        highz         高容性           高阻

1、连线型       (带有逻辑功能)

        连线型数据类型                              功能说明
              wire、tri                  标准连线(缺省为该类型)
              wor、trior           多重驱动时,具有线或特性的连线型
             wand、trand           多重驱动时,具有线与特性的连线型
                tring             具有电荷保持特性的连线型数据(特例)
                 tri1                            上拉电阻
                 tri0                            下拉电阻
              supply1  电源线,用于对电源建模,为高电平1  
              supply0  电源线,用于对“地”建模,为高电平1  

(1)wire 和 tri

     wire/tri          0         1          x         z
          0          0         x          x         0
          1          x         1          x          1
          x          x         x          x         x
          z          0         1          x         z

(2)wor 和 trior

     wor/trior          0         1          x         z
          0          0         1          x         0
          1          1         1          1         1
          x          x         1          x         x
          z          0         1          x         z

* 寄存器类型

       reg型是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。

       reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。

reg型变量简单例子:

reg a;                              //定义一个一位的名为a的reg变量

reg [3:0] b;                      //定义一个4位的名为b的reg变量

reg [8:1] c,d,e;                //定义了三个名称分别为c,d,e的8位的reg型变量

reg型变量一般为无符号数,若将一个负数赋值给reg变量,则自动转换成其二进制补码形式,

例如: 

reg signed [3:0] rega;

rega = -2;           //rega的值为1110(14),是2的补码

*  连线型数据类型的声明

<net_declaration><drive_strength><range><delay>[list_of_variables];

—— net_declaration包括  wire、tri、tri0、tri1、wand、triand、trior、wor中的任意一种。

—— range:用来指定数据为标量或者矢量。若该项默认,表示数据类型为1位的标量,超过1位则为矢量形式

—— delay:指定仿真延迟时间

—— list_of_variables:变量名称,一次可定义多个名称,之间用逗号分开。

—— drive_strength:表示连线变量的驱动强度。

* 寄存器型数据类型的声明

 reg<range><list_of_register_variables>;

—— range为可选项,它指定了reg型变量的位宽,缺省时为1位。

—— <list_of_register_variables>为变量名称列表,一次可以定义多个名称,之间用逗号隔开。

物理类型数据声明的例子:

—— reg rega;                              //定义了一个1位的寄存器型变量

—— reg [7:0] regb;                      //定义了一个8位的寄存器型变量

—— tri [7:0] tribus;                      //定义了一个8位的三态总线

—— tri0 [15:0] busa;                   //定义了一个16位的连线型,处于三态时为上拉电阻

—— tri1 [31:0] busa;                   //定义了一个32位的连线型,处于三态时为下拉电阻

—— reg scalared[1:4]b;              //定义了一个4位的标量型寄存器矢量

—— wire(pull1,strong0)c=a+b;   //定义一个1和0的驱动强度不同的1位连线型变量c

——trireg(large) storeline;          //定义了一个具有大强度的电荷存储功能的存储线

* 存储器类型

 存储器型变量可以描述RAM型、ROM型存储器以及reg文件。

存储器变量的一般声明格式为:

reg<range1><name_of_register><range2>

—— range1和range2都是可选项,缺省都为1。

—— <range1>:表示存储器中寄存器的位宽,格式为[msb:lsb]

—— <range2>:表示寄存器的个数,格式为[msb:lsb],即有msb-lsb+1个。

—— <name_of_register>为变量名称列表,一次可以定义定义多个名称,之间用逗号隔开

例如:

— reg [7:0]  mem1[255:0];     //定义了一个具有256个8位寄存器的存储器mem1 地址范围0到255

— reg [15:0] mem2[127:0],reg1,reg2; ///定义了一个具有128个16位寄存器的存储器mem2和两个16位的寄存器reg1和reg2。

— reg [n-1:0] a;          //表示一个n位寄存器a

* 抽象数据类型

抽象数据类型主要包括整型(integer)、时间型(time)、实型(real)及参数型(parameter)

整型:  integer<list_of_register_variables>;

例:— integer index;      //简单的32位有符号整数

       — integer i[31:0];     //定义了32位整型数组i

最后

以上就是无心镜子最近收集整理的关于第一篇 Verilog入门—语言要素 数据类型一、Verilog HDLy语言要素二、数据类型的全部内容,更多相关第一篇内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部