ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Verilog 和 SystemVerilog 中的基本数据类型深入探讨

2022-01-22 17:58:59  阅读:203  来源: 互联网

标签:数据类型 Verilog 类型 net type reg SystemVerilog


文章目录

1、Verilog的数据类型

Verilog语言提供两组基本的数据类型:变量数据类型(variable)和线网数据类型(net),这两种类型都是四值逻辑。具体请参考《IEEE Standard for Verilog》Chapter 4 Data types。

  • 线网(net)的声明进行简化,即:net_type + 声明列表,其中net_type包含我们常用的如wire | tri | wand | wor等;
  • 变量(variable)的声明进行简化,即:variable_type + 声明列表,其中variable_type包含我们常用的如reg | integer | time | real | realtime等;

可以看到,在Verilog中,线网及变量的声明都很简单,都只有两部分类型 + 声明列表即可。

另外,再来看Verilog中的赋值,Verilog中将连续赋值(Continuous assignment)及过程赋值(Procedural assignment)中的左值(LHS)分别限制为了线网(net)和变量(variable)类型。换言之,如我们常用的wire类型(net)只可以被连续赋值,以及我们常用的reg类型(variable)只可以被过程赋值

在Verilog中,reg经常用来表示存储组合逻辑或时序逻辑的变量,不过很多初学者会混淆其综合后的硬件单元。实际上,reg变量并不一定会被综合为寄存器(register),之所以定义成reg类型,是表示从仿真的语义上来讲需要一个存储单元,而与综合后的硬件电路没有直接的关联,所以对初学者而言有时会具有误导性。

而在SystemVerilog中,引入了更具有描述性logic数据类型,下面来介绍SystemVerilog中的数据类型。

2、SystemVerilog的数据类型

SystemVerilog添加了很多新的数据类型,但依然可以分为两组类型:变量类型(variable)和线网类型(net)。

  • 线网类型的声明进行简化,即:net_type + data_type + 声明列表,其中net_type包含我们常用的如wire | tri | wand | wor等,与Verilog相同。
  • 变量类型的声明进行简化,即:variable_type + data_type + 声明列表,而变量类型(variable_type)只需要关键字var即可,并且var可以省略,这一点与Verilog不同!且Verilog中的reg | integer | time | real | realtimeSystemVerilog中则都是指数据类型(data_type

对比上述简化版之后,就可以发现:SystemVerilog区分为类型数据类型,且两种类型(net_typevariable_type)的变量声明方式相同,都是:类型 + 数据类型 + 声明列表

SystemVerilog添加了很多新的数据类型:

  • (1)双状态数据类型(2-state);
  • (2)队列(queue)、动态数组(dynamic)和关联数组(associate);
  • (3)类(class)和结构体(struct);
  • (4)联合(union)和填充结构(packed);
  • (5)字符串(string);
  • (6)枚举类型(enum);

当仅有数据类型时(如reg r;、byte b;、logic c;),其默认表示的是变量variable类型,因为关键字var可以省略。另外,数据类型也可以省略,仅有类型声明时(如wire w;、var v;),此时数据类型被隐式声明为logic

reg          r  ; // equivalent to "var reg r;"
logic [15:0] l  ; // equivalent to "var logic [15:0] l;"
var byte my_byte; // equivalent to "byte my_byte;"
wire         w  ; // equivalent to "wire logic w;"
wire  [15:0] ww ; // equivalent to "wire logic [15:0] ww;"
var          v  ; // equivalent to "var logic v;"
var   [15:0] vw ; // equivalent to "var logic [15:0] vw;"

再来看到,像reg、bit、byte、int等,在SystemVerilog中,都属于数据类型(data_type),那么既然线网类型的声明也是net_type + data_type,则有如tri reg t;、inout wire reg p;、wire int i;等,又是否合法呢?显然是不合法的

在《IEEE Standard for SystemVerilog》Chapter 6.7.1 Net declarations with built-in net types 中对线网类型(net_type)的数据类型(data_type)做了限制:线网类型(net_type)的数据类型(data_type)只能为四值数据类型(4-state data type),并且net_type + reg + 声明列表是非法的

最后再来看赋值,主要注意其连续赋值(Continuous assignment)中的左值(LHS)与Verilog的区别:在SystemVerilog中,连续赋值的左值支持变量类型,而Verilog仅仅支持线网类型

所以,如logic [15:0] data;虽然默认表示的是变量类型(等价于var logic [15:0] data;),但是也支持连续赋值。由于其既支持连续赋值,又支持过程赋值,同时又是四值逻辑,所以logic数据类型可以代替Verilog设计代码中的大多数wire类型和reg类型,至于被综合成什么硬件,依然要由综合器根据上下文来进行推断

标签:数据类型,Verilog,类型,net,type,reg,SystemVerilog
来源: https://blog.csdn.net/ReCclay/article/details/122640044

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有