当前位置:首页 > 新闻资讯 > FPGA之家动态 >

【从0开始学FPGA-05】Verilog数据类型:常量及其变量

时间:2024-08-02      来源:网络搜集 关于我们 0

 一个多年老硬件攻城狮,开始从0学FPGA......

小编通过Vivado学习了几个例程,基本把软件环境搞通了,最大的体会是回到Verlilo的学习,只有把Verilog这门语言学会了,才能在实际的开发中得心应手。需求是输入,算法是核心、语言和开发环境是工具,真所谓“巧妇难为无米之炊”。

数据类型是用来表示电路硬件中的数据储存和传送元素的。数据类型的参数就像其他语言一样,作为特定的关键词,在程序中取变量名的时候,应该避免使用这些关键词。Verilog HDL中总共有 19 种数据类型。

其中最基本是以下四种基本类型:reg 型、wire 型integer 型和 parameter 型。

其他数据类型是:large 型、medium 型、scalared 型,time 型、small 型、tri 型、trio 型、tril 型、triand 型、trior型、trireg 型、vectored 型、wand 型和 wor 型。这14 种数据类型除 time 型外都与基本逻辑单元建库有关,与系统设计没有很大的关系。后续接触到再逐步补充吧。

01

常量

在程序运行过程中,其值不能被改变的量称为常量。Verilog中的常量主要几种。整数

在 Verilog HDL 中,整型常量即整常数有以下 4 种进表示形式:

1)二进制整数(b或B);

2)十进制整数(d或D);

3)十六进制整数(h或H);

4)八进制整数(o或O)。

数字表达方式有以下3种:

   1)<位宽><进制><数字>;

    2)在<进制><数字>;

    3)在<数字>

第一种表达方式是最全面的表达方式,建议使用该表达方式。第二种表达方式省略了位宽,则默认是系统的位宽。第三种方式省略了位宽和进制标识,默认是十进制。

例如十进制数255用不同的进制表示:

   8b11111111   //位宽为8位的二进制,b为二进制标识

   8D255            //位宽为8位的十进制数255,D为二进制标识

   8HFF            //位宽为8位的十六进制数255,H为二进制标识

   8O377            //位宽为8位的八进制数255,O为二进制标识

x和z值

在数字电路中,x代表不定值,z代表高阻值。一个x可以用来定义十六进制数的 4 位二进制数的状态,八进制数的 3 位,二进制数的 1位。z 的表示方式同x类似。z还有一种表达方式是可以写作“?”。在使用 case 表达式时建议使用这种写法,以提高程序的可读性。

例:

    4b11x0    //位宽为4的二进制数从低位数起第 2位为不定值

    4’b101z    //位宽为4的二进制数从低位数起第1位为高阻值

    12dz      //位宽为 12的十进制数,其值为高阻值

    12d?      //位宽为12 的十进制数,其值为高阻值

    8h4x     //位宽为8的十六进制数,其低4 位值为不定值

负数

一个数字可以被定义为负数,只须在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。

例:

    -8d5  //这个表达式代表5的补数(用八位二进制数表示)

下画线(underscore_)

下画线可以用来分隔开数的表达以提高程序可读性。它不可用在位宽和进制处,只能用在具体的数字之间。

例:

    16b1010_1011_1111_1010   //合法格式

    8b_0011_1010                    //非法格式

参数(parameter)型

在 Verilog HDL中用 的关键词parameter 定义常量,即用 parameter 来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用标识符代表一个常量可提高程序的可读性和可维护性。parameter型数据是一种常数型的数据,其说明格式如下:

parameter参数名1=表达式,参数名 2=表达式,···,参数名 n=表达式;

parameter 是参数型数据的确认符。确认符后跟着一个用逗号分隔开的赋值语句表。在每一个赋值语句的右边必须是一个常数表达式。也就是说,该表达式只能包含数字或先前已定义过的参数。

例:

   parameter msb=7;   //定义参数msb为常量 7

   parameter e=25,f=29;   //定义两个常数参数

parameterr=5.7;   //声明r为一个实型参数

parameter  byte_size=8,byte_msb=byte_size-l;   //用常数表达式赋值

02

变量

变量是一种在程序运行过程中其值可以改变的量,在 Verilog HDL 中变量的数据类型有很多种。这里只对上述提到的其中3种基本变量类型介绍。

wire 型

wire 型数据常用来表示用以assign 关键字指定的组合逻辑信号。Verilog 程序模块中输入、输出信号类型默认自动定义为 wire 型。wire 型信号可以用任何方程式的输入,也可以用assign”语句或实例元件的输出。

wire 型信号的格式如下:

wire[n-1:0]数据名1,数据名2,···数据名i ; //共i条总线,每条总线有n条线路

或   wire[n:1]数据名1,数据名 2,···数据名 i;

wire 是 wire 型数据的确认符;[n-l:0]和[n:]]代表该数据的位宽,即该数据有几位;最后跟着的是数据的名字。如果一次定义多个数据,数据名之间用逗号隔开。声明语句的最后要用分号表示语句结束。

例:

   wire a:             //定义了一个1位的 wire 型数据

wire[7:0] b;     //定义了一个8位的 wire 型数据

    wire[4:1]c,d;    //定义了二个4位的 wire型数据

reg 型

寄存器是数据储存单元的抽象,寄存器数据类型的关键字是 reg。通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。Verilog HDL 语言提供了功能强大的结构语句,使设计者能有效地控制是否执行这些赋值语句。这些控制结构用来描述硬件触条件,例如时钟的上升沿和多路器的选通信号。在reg 类型数据的默认初始值为不定值 x。

reg 型数据常用来表示“always”模块内的指定信号,常代表触发器。通常,在设计中要由“always”模块通过使用行为描述语句来表达逻辑关系。“always”模块内被赋值的每一个信都必须定义成 reg型。

reg 型数据的格式如下:

reg[n-l:0] 数据名 1,数据名 2,···,数据名 i;

或   reg[n;l]  数据名 1,数据名 2,···,数据名 i;

reg 是 reg 型数据的确认标识符,[n-1:0]和[n:1]代表该数据的位宽,即该数据有几位(bit),最后跟着的是数据的名字。如果一次定义多个数据,数据名之间用逗号隔开。声明语句的最后要用分号表示语句结束。

例:

reg rega;                 //定义了一个1位的名为 rega 的 reg 型数据

reg[3:0] regb;          //定义了一个4位的名为 regb的 reg 型数据

reg[4:1] regc,regd; //定义了二个4位的名为 rege和 regd 的 reg 型数据

memory 型

Verilog HDL通过对 reg 型变量建立数组来对存储器建模,可以描述 RAM 型存储器ROM 存储器和 reg 文件。数组中的每一个单元通过一个数组索引进行寻址。在 Verilog 语中没有多维数组存在。memory 型数据是通过扩展 reg 型数据的地址范围来生成的。其格式如下:

reg[n-1:0] 存储器名[m-1:0]:

   reg [n-1:0] 存储器名[m:1];

在这里,reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个 n位的寄存器:存储器名后的[m-1:0]或[m:1] 则定义了该存储器中有多少个这样的寄存器:最后用分号结束定义语句。

例:

reg[7:0] mema[255:0];

这个例子定义了一个名为 mema 的存储器,该存储器有 256个8位的存储器。该存储器的地址范围是 0到 255。

----------------------------------------------------------

参考书籍:【《Verilog数字系统设计教程》夏宇闻 】

----------------------------------------------------------高清HDMI 2.0线】推荐淘宝店铺“电子eStore

"所卖的这款,多种线材规格可供选择。

     【淘宝】https://m.tb.cn/h.gZ7bXRf?tk=rDGhWr2rQ96 MF1643 「绿联hdmi线2.0清线4k视频传输线黄黑头黑色工程HDMI线」点击链接直接打开 或者 淘宝搜索直接打开

----------------------------------------------------------------

----------------------------------------------------------------

关注小编一起学FPGA......


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言