EDN China > 技术文章 > EDA工具与服务 > 正文
?

SystemVerilog语言简介(下)

2009年04月09日 ?? 收藏0

  15. 强制类型转换

  Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用<type>’操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:

  int’ (2.0 * 3.0) // 将结果转换为int类型
mytype’ (foo) // 将foo转换为mytype类型

  一个值还可以通过在强制转换操作符前指定一个10进制数来转换成不同的向量宽度,例如:

  17’ (x - 2) // 将结果转换为17位宽度

  也可以将结果转换成有符号值,例如:

  signed’ (x) // 将x转换为有符号值

  16. 操作符

  Verilog没有C语言的递增(++)和递减(--)操作符。而SystemVerilog加入了几个新的操作符:

  ? ++和--:递增和递减操作符;
? +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=赋值操作符;

  17. 唯一性和优先级决定语句

  在Verilog中,如果没有遵循严格的编码风格,它的if-else和case语句会在RTL仿真和RTL综合间具有不一致的结果。如果没有正确使用full_case和parallel_case综合指令还会引起一些其它的错误。

  SystemVerilog能够显式地指明什么时候一条决定语句的分支是唯一的,或者什么时候需要计算优先级。我们可以在if或case关键字之前使用 unique或requires关键字。这些关键字可以向仿真器、综合编译器、以及其它工具指示我们期望的硬件类型。工具使用这些信息来检查if或 case语句是否正确建模了期望的逻辑。例如,如果使用unique限定了一个决定语句,那么在不希望的case值出现的时候仿真器就能够发布一个警告信息。

bit [2:0] a;
unique if ((a==0) || (a==1)) y = in1;
else if (a==2) y = in2;
else if (a==4) y = in3; // 值3、5、6、7会引起一个警告

priority if (a[2:1]==0) y = in1; // a是0或1
else if (a[2]==0) y = in2; // a是2或3
else y = in3; // 如果a为其他的值

unique case (a)
0, 1: y = in1;
2: y = in2;
4: y = in3;
endcase // 值3、5、6、7会引起一个警告

priority casez (a)
2’b00? : y = in1; // a是0或1
2’b0?? : y = in2; // a是2或3
default : y = in3; //如果a为其他的值
endcase

  18. 底部检测的循环

  Verilog包含for、while和repeat循环,这几个循环都是在循环的起始处检测循环条件。SystemVerilog加入了一个do-while循环,这种循环在执行语句的结尾处检测循环条件。

  19. 跳转语句

  在语句的执行过程中,C语言提供了几种方式来跳转到新的语句,包括:return、break、continue和goto。在Verilog中除了通过使用disable语句跳转到语句组的尾部外,没有提供任何其它跳转语句。使用disable语句执行中止和继续功能要求加入块的名字,并且会产生不直观的代码。SystemVerilog加入了C语言的break和continue关键字,这两个关键字不要求使用块名字。另外,SystemVerilog还加入了一个return关键字,它可以用来在任何执行点上退出一个任务或函数。

  break:退出一个循环,与C语言相同;
? continue:跳转到一个循环的尾部,与C语言相同;
? return 表达式:退出一个函数;
? return:退出一个任务或void类型的函数。

  SystemVerilog没有包含C语言中的goto语句。

  20. 块名字和语句标签

  在Verilog中,我们可以通过在begin或fork关键字之后指定名字来为begin-end或fork-jion语句指定名字。这个指定的名字代表整个语句块。SystemVerilog还允许在end或jion关键字之后指定一个匹配的块名字。这种机制很容易将end或jion与对应的 begin或fork联系起来,尤其是在一个长的块或嵌套的块中。块结尾处的名字是可选的,但如果使用的话,它必须与块起始处的名字相同。例如:


上一页123下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

SystemVerilog? 硬件描述? HDVL?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈