SystemVerilog语言简介(三) 分类: 硬件开发_FPGA 2013-10-09 16:52 540人阅读 评论(0) 收藏
15. 强制类型转换
Verilog不能将一个值强制转换成不同的数据类型。SystemVerilog通过使用'操作符提供了数据类型的强制转换功能。这种强制转换可以转换成任意类型,包括用户定义的类型。例如:
int' (2.0 * 3.0) // 将结果转换为int类型
mytype' (foo) // 将foo转换为mytype类型
一个值还可以通过在强制转换操作符前指定一个10进制数来转换成不同的向量宽度,例如:
17' (x - 2) // 将结果转换为17位宽度
也可以将结果转换成有符号值,例如:
signed' (x) // 将x转换为有符号值
16. 操作符
Verilog没有C语言的递增(++)和递减(--)操作符。而SystemVerilog加入了几个新的操作符:
l ++和--:递增和递减操作符;
l +=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、<<<=和>>>=赋值操作符;
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关键字,它可以用来在任何执行点上退出一个任务或函数。
l break:退出一个循环,与C语言相同;
l continue:跳转到一个循环的尾部,与C语言相同;
l return 表达式:退出一个函数;
l return:退出一个任务或void类型的函数。
SystemVerilog没有包含C语言中的goto语句。
20. 块名字和语句标签
在Verilog中,我们可以通过在begin或fork
版权声明:本文为博主原创文章,未经博主允许不得转载。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥