SystemVerilog文本值和数据类型

SystemVerilog文本值和数据类型

1、增强的文本值赋值

给一个向量赋予文本值
在Veirlog语言中,一个向量可以很容易地赋值为全00、全x(不确定)或全z(高阻态)。

parameter SIZE = 64;
reg [SIZE-1 :0] data;
data = 0;//将数据各位置0
data = 'bz;//将数据各位置z
data = 'bx;//将数据各位置x

上例中每个赋值都是可扩展的。如果SIZE参数被重新定义,如128,赋值会自动扩展到data的新长度。但是Verilog并未提供一种将向量赋为全1的方便途径。为了将一个文本值所有位都置1,必须指定一个固定长度。

data = 64'hFFFFFFFFFFFFFFFFF;

为了使所有全1赋值都是可扩展的,Verilog设计者必须学习编码技巧,例如使用一些操作类型来对向量赋全1,而不是指定文本值。

data = ~0;//0的补码运算
data = -1;//2的补码运算

给一个向量赋予特殊的文本值
SystemVerilog在两个方面增强了文本值的赋值。第一,增加了一个更简单的语法,可以指定要赋的值,而不用指定进制。第二,赋值可以是逻辑1.这个语法指定所有位被赋予什么值,该值前面有个硬撇号(’)。

'0:将左边的所有位赋为0
'1:将左边的所有位赋为1
'z或者'Z:将左边的所有位赋为z
'x或者'X:将左边的所有位赋为0
注意:硬撇号(')不同于重音符号(`)
data = 'b1;  //将data的所有位置为1

文本值随左手边向量宽度扩量

2、`define增强

SystemVerilog扩展了Verilog宏文本替换–`define的功能,是宏文本可以包含特殊字符。

`"允许字符串内的宏变量替换
字符串内的宏变量替换
Verilog允许在`define宏中使用双引号("),但是双引号内文本变成文本串。也就是说,在Verilog中,
不可能采用在字符串中嵌入宏变量的文本替换宏创建字符串。
SystemVerilog可以进行宏文本字符串的变量替换,这是通过在形成字符串的引号前加重音符号(`)
来实现。
//本例文本替换的目的是将所有出现的宏变量v变量替换为实际的变量值data。
`define print(v)\
		$display(`"variable  v = %h`",v);
`print(data);

在Verilog中,为了不影响表示字符串的双引号,字符串内嵌入的引号必须带转义符: \ "

$display("variable \"data\"  =  %h",data);

当字符串是包含变量替换的文本替换宏的一部分时,对嵌入的双引号仅使用转义符是不够的,必须使用
’ \ '"

`define print(v)\
		$display(`"variable  '\'"v'\'" = %h`",v);
`print(data);

通过宏建立标识符名
使用Verilog的’define,不可能通过连接两个或多个文本宏来建立一个新的标识符。原因是创建的标识符名各部分之间总是有一个空格。

在宏文本中,“作为不引入空格的分隔符
SystemVerilog提供了一个不引入空格的方法,使用两个连接的重音符(”),使两个或多个文本宏连接成一个新的名字。
在多次使用一组相似的名字,并且无法使用数组的情况下,应用(")可以简化源代码。

需要定义多个名字相似的两态bit变量和wand线网,并且将变量持续赋值给线网。
这个bit变量可以使用局部过程赋值,而这个wand线网是可以有多个驱动的线逻辑它的一个驱动时两态变量:bit
bit类型类似于Verilog的reg类型,但是bit类型只能储存两态值,而reg类型可储存四态变量。
//在无文本替换的源文件中
bit  d00_bit; wand d00_net = d00_bit;
bit  d01_bit; wand d01_net = d01_bit;
...//每一位都重复60多次
bit  d62_bit; wand d62_net = d62_bit;
bit  d63_bit; wand d00_net = d62_bit;

//使用SystemVerilog对`define增强
`define TWO_STATE_NET(name) bit name"_bit;\
wand name"_net = name"_bit;
`TWO_STATE_NET(d00)
`TWO_STATE_NET(d01)
...
`TWO_STATE_NET(d62)
`TWO_STATE_NET(d63)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傻童:CPU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值