sv初探

版权声明:本文为博主原创文章,未经博主允许不得转载。更多文章请关注xy_ee微信公众号哦! https://blog.csdn.net/weixin_41241296/article/details/79347794

verilog 想必做数字的工程师听起来不陌生吧。

用verilog设计电路,效率相对较高,但是verilog 语言入门比较难。verilog语言仍有很多弊端。

小编带领大家看一看verilog的变性人systemverilog。

简单的说一个应用背景吧:对于一个8位sram来说,测试要覆盖所有可能性,这个数据量是很大的,而且对于verilog来说并不容易实现。简而言之,验证需要大量的随机数据,systemverilog产生随机数据就比较容易。

那么怎么实现呢?

1:    使用rand关键字给信号添加随机属性。

rand reg [7:0] words;

rand reg[2:0] op; 

2:    但是对于8位的sram来说,words只能在0 到 2的8次方减去一之间波动,这个不用考虑,如果做测试约束一下会方便很多。例如预设op = 2‘b01时做加法运算,我用以下方法约束op会使得测试更加方便。

op inside {1:1}; 

本文只是引子,op我还可以加入判断,进行多条件的测试,不过难度就大了些,感兴趣自行能够查阅资料。

-----------------------------------------------------------------------------------------------------------------------------------

要学习新语言,对于硬件设计来说,重要的是数据类型。

先初步回顾一下verilog 数据类型:

两种基本类型:    reg和wire   四种状态: 0,1,z,x

基本变量有:

reg    1位或多位

integer    32-signed

time        64-unsinged

real        浮点

所有的变量都是静态存储的,也就是说在整个仿真过程中是alive的。因此不能用stack来hold arguments and local values。

这样占有太多的存储空间,对大型设计是不利的。

sv 的数据类型logic做到了很好的改善,可以连续赋值,值得注意的是logic不能多路驱动

sv的两态数据类型可以大幅度提高仿真性能和内存的使用量。

bit b; // 2-state, single-bit
bit [31:0] b32; // 2-state, 32-bit unsigned integer
int i; // 2-state, 32-bit signed integer
byte b8; // 2-state, 8-bit signed integer
shortint s; // 2-state, 16-bit signed integer

longint l; // 2-state, 64-bit signed integer

说个细节:bit[7:0](0 -- 255) 不等于byte(-128 -- 127)

有人可能会提出如果驱动的X或者Z状态,当定义为bit时会转化为0或1,仿真或许看不到Z或Z。这个可以用内封装的$isunkown来进行判断。

数组区别不再赘述。最大优点sv可以支持动态宽度的存储。

接下来说个verilog根本没有的东西,队列操作。

例如:int a[$] ={1,2};

可以轻松的进行类似OOP语言java,python等的插入,删除等操作,非常方便。

结构体,枚举类型,String类型等,优点太多了。感兴趣自行查找相关资料。


若文章有技术问题,请留言纠正,谢谢







猜你喜欢

转载自blog.csdn.net/weixin_41241296/article/details/79347794