没有合适的资源?快使用搜索试试~ 我知道了~
一个牛人的Systemverilog总结.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 4 下载量 65 浏览量
2022-06-20
13:29:42
上传
评论
收藏 508KB PDF 举报
温馨提示
试读
12页
一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf一个牛人的Systemverilog总结.pdf
资源推荐
资源详情
资源评论
S
数
y s t e
据
m v e r
类
i l o g
型
l 合并数组和非合并数组
1)合并数组:
存储方式是连续的,中间没有闲置空间。
例如,32bit 的寄存器,可以看成是 4 个 8bit 的数据,或者也可以看成是 1 个 32bit 的
数据。
表示方法:
数组大小和位,必须在变量名前指定,数组大小必须是【msb:lsb】
Bit[3:0] [7:0] bytes;
2)二维数组和合并数组识别:
合并数组:bit [3:0] [7:0] arrys;大小在变量名前面放得,且降序
二维数组:int arrays[0:7] [0:3] ;大小在变量名后面放得,可降序可升序
位宽在变量名前面,用于识别合并和非合并数组,位宽在后面,用于识别数组中元素
个数。
3)非合并数组
一般仿真器存放数组元素时使用 32bit 的字边界,byte、shortint、int 都放在一个字中。
非合并数组:字的地位存放变量,高位不用。
表示方法:
Bit[7:0] bytes;
4)合并数组和非合并数组的选择
(1)当需要以字节或字为单位对存储单元操作。
(2)当需要等待数组中变化的,则必须使用合并数组。例如测试平台需要通过存储器
数据的变化来唤醒,需要用到@,@只能用于标量或者合并数组。
Bit[3:0] [7:0] barray[3]; 表示合并数组,合并数组中有 3 个元素,每个元素时 8bit,4
个元素可以组成合并数组
可以使用 barry[0]作敏感信号。
l 动态数组
随机事物不确定大小。
使用方法:数组在开始是空的,同时使用 new[]来分配空间,在 new[n]指定元素的个数。
Int dyn[];
Dyn = new[5];Ref int array[ ]);
If(len<0)begin
$display(“Bad len”);
Returun;
rant,
.request,
.rst,
.clk
);
Test t1(arbif);
Endmodule
lModport
背景:
端口的连接方式包含了方向信息,编译器依次来检查连续错误;接口使用无信号的连
接方式。Modport 将接口中信号分组并指定方向。
例子:
l 在总线设计中使用 modport
并非接口中每个信号都必须连接。Data 总线接口中就解决不了,个人觉得
因为 data 是一个双驱动
l 时钟块
作用:
一旦定义了时钟块,,而不需要描述确切的时钟信号和边沿,即使改变了时钟块中的
时钟或边沿,也不需要修改测试代码
应用:
将测试平台中的信号,都放在 clocking 中,并指定方向(以测试平台为参考的方向)。
并且在 modprot test(clocking cb,
最完整的接口:
Interface arb_if(input bit clk);
Logic[1:0] grant,request;
Logic rst;
Clocking cb @(posedge clk);
Output request;
Input grant;
Endclocking
Modport test (clocking cb,
Output rst);
Modport dut (input clk, request,rst,
Output grant);
endinterface
变化:将 request 和 grant 移动到时钟块中去了,test 中没有使用了。
l 接口中的双向信号
Interface master_if(input bit clk); = ();
Id =count++;
约束
l 约束块中,只能包含表达式,不能赋值。
1)dist 权重分布
dist 带有一个值的列表及相应的权重,中间用:= 或 :/分开。值或权重可以是常量或变
量。权重的和不必是 100.
:= 表示范围内,每一个值的权重是相同的;
:/ 表示范围内,权重要均匀分布
2)Inside
产生一个值的集合,在值的集合中取随机值时,机会相等。
3)在集合中使用数组
l 条件约束
Systemverilog 支持两种关系操作 –>和 if—else
—>可产生和 case 效果类似的语句块,可以用于枚举类型的表达式。
l 双向约束
l 控制多个约束块
作用:可以打开或关闭某个约束
可以使用内建的打开或关闭。
l 内嵌约束
背景:很多测试只会在代码的一个地方随机化对象,但是约束越来越复杂时,
Systemverilog 可以使用 randomized with 来增加额外的约束,这和在类里增加的约束是
等效的。
lPre_randomize 和 post_randomize 函数
有时候需要再调用 randomize()之前或之后立即执行一些操作。
随机化前:设置类里的一些非随机变量(如上下限、权重),
随机化后:计算数据的误差矫正值。
l 约束的技巧
1)约束中使用变量
2)使用非随机值
如果一套约束在已产生了几乎所有想要的激励向量,但还缺少几种。
可以使用 rand_mode 把这些变量设置为非随机变量。
l 数组约束
Systemverilog 可以用 foreach 对数组中的每一个元素进行约束。
剩余11页未读,继续阅读
资源评论
- yiyezhiqiu11112024-02-08感谢资源主的分享,很值得参考学习,资源价值较高,支持!
- 南山海棠2022-09-24资源内容总结地很全面,值得借鉴,对我来说很有用,解决了我的燃眉之急。
- 老八秘制小汉堡儿2024-01-18资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
- qq_277326192024-01-09资源和描述一致,质量不错,解决了我的问题,感谢资源主。
G11176593
- 粉丝: 6660
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功