0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中的基本数据类型

CHANBAEK 来源:FPGA入门到精通 作者:未可知摩尔 2023-05-12 17:43 次阅读

本文将讨论 verilog 中常用的数据类型,包括对数据表示、线网类型、变量类型和数组,分享一下使用方法和注意事项。

一、Verilog 中的数值表示

编写 verilog代码 时,经常需要在代码中表示数据值,可以将这些数据表示为2进制、8进制、10进制或16进制值。

特别是verilog中需要定义数据的位宽,因为verilog 本质上是在描述硬件电路。

语法:


说明:

  • bits:位宽,可省略,则默认是32bit
  • representation:进制, b或B表示2进制,o或O表示8进制,d或D表示10进制,h或H表示16进制,可省略,则默认是十进制​
  • value :具体数值

示例:

8'b1000_1000;    //2进制表示
4'o10;      //8进制表示
4'd8;       //10进制表示
4'h8;       //十六进制表示

每一个bit位不同值表示:

二、Verilog 中的基本数据类型

verilog 中的基本数据类型可以分为两大类:线网类型(net)和变量类型(variable )

net类型用来对数字电路中的连接关系建模,无法存储数值,表示数据驱动路线。

variable类型用来对寄存器或触发器建模,可以存储数据。

1、Verilog 中的net类型

用来描述设计中不同组件之间的物理连接,net类型本身不能用于存储数据或驱动数据。

通常使用连续赋值(continuous assignment)语句来将数据驱动到线型(wire)上,如assign 语句。

verilog 中最常用的net类型就是wire类型。 使用wire类型来声明设计中基本的点对点连接信号,顾名思义,它们大致相当于传统电路中的电线(wire英文原意)。

wire a;          //声明一个1位宽wire类型信号a
 
assign a = c;    //使用assign关键字来赋值
assign b = d;    //使用assign关键字来赋值

2、Verilog 中的变量类型

verilog 中使用变量类型来存储数据,可以一直保持这个值直到被再次赋值。

verilog中最常用的变量类型是reg类型,用于always语句块内,如下面的代码片段所示,实现了一个D触发器。

reg q;
//D触发器
always @(posedge clock)
  q <= d;
end

虽然reg 类型常被用来建模触发器,但在某些情况下,reg 类型也可用于在 verilog 中对组合逻辑进行建模。

reg q;
always @(*)
  q = d;
end

verilog 中最常用的数值数据类型是integer类型。 但是,integer类型通常用于模块中的内部信号而不是端口

注意:integer默认是32bit的有符号数。

integer a = 255;    //声明一个值为255的integer类型变量a

3、Verilog 中的有符号(Signed)和无符号数据(Unsigned)

Verilog-2001 标准引入了signed 和 unsigned关键字,在Verilog-2001标准发布之前,所有net类型和variable类型都只能用于存储无符号(Unsigned)数据类型。

默认情况下,integer类型是有符号的,而 reg 和 wire 类型都是无符号的。 如果希望修改此默认行为,则需要使用这些关键字(signed 和 unsigned),在 verilog 代码中将变量类型声明为signed时,会是补码。

示例:

//声明无符号reg变量a、有符号reg变量b
reg [31:0] a;
reg signed [31:0] b;
 
//声明无符号wire变量a、有符号wire变量b
wire [31:0] a;
wire signed [31:0] b;
 
//声明无符号integer变量a、有符号integer变量b
integer unsigned a;
integer b;

4、Verilog 中的数组(Arrays )

在 verilog 中可以创建和使用Arrays(数组)类型,在FPGA中实际是使用LUT或BRAM来实现的。

(1)一维数组

语法:


说明:

  • type表示数组元素的类型
  • size表示数据元素的位宽大小
  • variable_name表示数组名称
  • elements是表示数组的大小

示例:

//定义一个共有8个元素的数组example,每个元素的位宽为3位
wire [2:0] example [7:0];

可以使用带有数组下标的方括号来访问数组中的单个元素,如:

//将5赋值给数组example中的最后一个元素
assign example[7] = 3'h5;

(2)多维数组

在Verilog-1995标准中,只能创建一维数组。 verilog 2001 标准则可以创建多于一维的数组。 为此,只需添加另一个字段来定义需要的元素数量。

语法:


说明:

  • type表示数组元素的类型
  • size表示数据元素的位宽大小
  • variable_name表示数组名称
  • elements0是表示数组第一层的大小
  • elements1表示数组第二层的大小

示例:

wire [3:0] example2d [7:0][1:0];
//赋值操作
assign example2d [7][1] = 4'ha;
assign example2d [7][0] = 4'ha;

verilog数组还是挺好用的,可以用于简化写代码的逻辑,适用于循环复制的模块或代码。

genvar i;
wire [1:0] data_in [0:4];
wire [1:0] data_out [0:4];

generate
for(i = 0; i < 5; i = i + 1) begin: module_test
     mod_test u_mod_test(
        .clk(clk),
        .reset(reset),
        .data_in(data_in[i]),
        .data_out(data_out[i])
     );
end
endgenerate

integer j;
reg  [2:0] shift_add_index [0:8];

always@(posedge clk) begin
     shift_add_index[0] <= 'd2;
end

always@(posedge clk) begin
     for(j = 1; j < 9; j = j+1) begin
         shift_add_index[j] <= shift_add_index[j-1] + j;
     end
end
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109302
  • 数值
    +关注

    关注

    0

    文章

    79

    浏览量

    14290
  • 触发器
    +关注

    关注

    14

    文章

    1677

    浏览量

    60404
  • 数据类型
    +关注

    关注

    0

    文章

    227

    浏览量

    13498
收藏 人收藏

    评论

    相关推荐

    C语言中基本数据类型、变量和常量的使用

    C语言中基本数据类型、变量和常量的使用
    发表于 08-18 16:42 591次阅读
    C语言中基<b class='flag-5'>本数据类型</b>、变量和常量的使用

    Java基本数据类型之间的运算规则是什么?

    Java基本数据类型Java变量的使用说明Java基本数据类型之间的运算规则
    发表于 11-04 09:59

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型二上节介绍了wire,reg数据类型及其用法,并对变量定义的向量的定义及使用做了说明。本节主要介绍其它几种类型
    发表于 08-06 09:21

    Verilog 变量声明与数据类型

    Verilog 变量声明与数据类型Verilog语法中最基本的数据类型有 线网(wire),寄存器(reg)和整数(integer)三种类型
    发表于 08-10 14:01

    C语言的基本数据类型包括哪几种

    C语言的基本数据类型包括哪几种?分别是什么?
    发表于 10-14 12:27

    浅析C51的基本数据类型和扩充数据类型

    本数据类型:扩充数据类型
    发表于 11-22 06:05

    C预处理与C语言基本数据类型

    指令表:注意:宏名的书写由标识符与两边各两条下划线构成。C语言基本数据类型不同操作系统数据类型所占字节数图解数据类型的其他分类:变量常量(字面量和const常量)void(特殊
    发表于 12-21 08:29

    Java的基本数据类型与条件结构

    《Java基础入门》第二篇1 基本数据类型,运算符与表达式,条件结构,循环结构...
    发表于 12-23 08:02

    单片机C语言中常用的基本数据类型分为哪几类

    不管在什么语言中,定义一个变量时必然要在内存开辟一个相应大小的空间来存储该变量。不同的数据类型在内存所占的空间大小不同,其所能表示的数据范围也不相同。在单片机C语言中,常用的基本数据类型
    发表于 02-28 06:46

    51单片机学习笔记(9)——C51的基本数据类型和扩充数据类型

    本数据类型:扩充数据类型
    发表于 11-14 13:36 1次下载
    51单片机学习笔记(9)——C51的基<b class='flag-5'>本数据类型</b>和扩充<b class='flag-5'>数据类型</b>

    Struct结构数据类型

    Struct类型是一种由多个不同数据类型元素组成的数据结构,其元素可以是基本数据类型,也可以是Struct、数组等复杂数据类型以及PLC
    的头像 发表于 07-25 17:02 2440次阅读

    C语言-基本数据类型与位运算

    这篇文章作为基础知识点,总结C语言的基本数据类型有哪些,浮点数的精度,整数变量的空间范围,变量定义语法,变量命名规则,浮点数打印格式,基本数据类型printf对应的打印、位运算的知识点。
    的头像 发表于 08-14 09:56 1279次阅读

    Verilog最常用的2种数据类型

    Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg),其余类型可以理解为这两种数据类型的扩展或辅助。
    的头像 发表于 05-29 16:27 1213次阅读
    <b class='flag-5'>Verilog</b>最常用的2种<b class='flag-5'>数据类型</b>

    本数据类型分享

    本数据类型本数据类型:包括位、位序列、整数、浮点数、日期时间。此外字符也属于基本数据类型,请参见文档String与WString。 1.位和位序列 2.整数数据类型 3.浮点型实
    的头像 发表于 06-13 14:14 5902次阅读
    基<b class='flag-5'>本数据类型</b>分享

    javascript的基本数据类型有哪些

    JavaScript 是一种动态的、面向对象的编程语言,广泛应用于 Web 开发中。在 JavaScript 中,有七种基本数据类型(Primitive Types),它们分别是 Undefined
    的头像 发表于 12-03 11:17 361次阅读