SV中的Interface和Program

摘要:
使用时,注意定义模块或程序外部的接口和请求;信号都是clk上升沿的有效输出请求//定义每个信号端接口模块测试的方向(arb_if.TESTarbif);优选<

Interface:SV中新定义的接口方式,用来简化接口连接,使用时注意在module或program之外定义interface,然后通过'include来添加进工程。

        interface  arb_if(input bit clk);              //clk信号,一般单独拿出来

                           logic [1:0]grant, request;       //只定义信号类型。类型在不同的modport中分别定义。

                           logic rst;

                           clocking cb @(posedge clk);    //定义时钟块,其中的信号都是clk上升沿有效

                                             output request;

                                             input  grant;

                           enclocking

                           modport TEST (clocking cb, output rst);   //直接引用clocking, 在定义rst的方向

                           modport DUT (input request, rst, output grant);  //定义各个信号的方向

        endinterface

        module  test(arb_if.TEST arbif);

                           initial  begin

                                        arbif.cb.request <= 0;    //直接引用clocking中的信号,而且clock blocking中的信号,最好使用<=非阻塞赋值。

                                        @arbif.cb;         //相当于@posedge clk

                                        $display("");

                                     end

        endmodule

interface可以直接与verilog-2001的端口进行连接:

        module   top;

                bit  clk;

                always #5  clk = ~clk;

                arb_if  arbif(clk);

                arb_port     a1(.grant(arbif,grant),

                                      .request(arbif.request),

                                      .rst(arbif.rst),

                                      .clk(arbif.clk) );

                test   t1(arbif);

         endmodule:top

Program:主要是为了在逻辑和仿真时间上,区分开RTL与验证平台。在SV搭建的验证环境中,testcase一般就定义一个program来开始执行。

               program中不能使用always,因为program相比较来说,与C语言更靠近一些。所以多用initial就可以。program中的仿真时间与RTL中的是有区别的,

               SV将同一仿真时刻分为四个区域,Active(design), Observed(assertion), Reactive(testbench), Postponed(sample)。相当于在原verilog的基础

               上又为program增加了一个执行区间,一个采样区间。所以clk的定义不能放在program中。当program中的initial结束时,SV会调用$finish完成仿真。

免责声明:文章转载自《SV中的Interface和Program》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何让服务端同时支持WebSocket和SSL加密的WebSocket(即同时支持ws和wss)?关于VirtualBox创建新的虚拟机后ip地址自动修改的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql cast函数

CAST函数语法规则是:Cast(字段名 as 转换的类型 ),其中类型可以为: CHAR[(N)] 字符型 DATE 日期型DATETIME 日期和时间型DECIMAL float型SIGNED intTIME 时间型 实例1: 表table1 date:2015-11-03 15:31:26 select cast(date as signed)...

Linux系统下查找最近修改过的文件

Linux的终端上,没有windows的搜索那样好用的图形界面工具,但find命令确是很强大的。 比如按名字查找一个文件,可以用 find / -name targetfilename 。 唉,如果只知道名字,不知道地点,这样也不失为一个野蛮有效的方法。 按时间查找也有参数 -atime 访问时间 -ctime 改变状态的时间 -mtime修改的时间。但...

php发送get、post请求的几种方法

方法1: 用file_get_contents 以get方式获取内容 1 <?php 2 $url='http://www.domain.com/'; 3 $html = file_get_contents($url); 4 echo $html; 5 ?> 方法2: 用fopen打开url, 以get方式获取内容 1 &l...

下载img标签里面的图片 JS代码

在做动态生成二维码的时候用到了需要将动态生成的图片下载到本地,不在服务器上生成任何文件,只将页面中展示的图片下载到本地。 代码如下: 1 //下载二维码 2 function downloadIamge() { 3 var imgs = document.getElementById(img标签父元素的ID).getEleme...

cmd wevtutil 读取远程日志错误,Error:在没有配置的 DNS 服务器响应之后,名称 Server23.localdomain 的名称解析超时。

想要根据xml文件筛选器读取远程主机最新的几条日志,结果老是提示: Error : wevtutil qe SystemQuery.xml /f:text /rd:true /c:3 /sq:true /r:\******* /u:*********administrator /p:************       看我之前的文章:Windows提...

原!struts安全漏洞,由2.3.37版本升级至2.5.22

漏洞描述 Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年8月13日披露 S2-059 Struts 远程代码执行漏洞(CVE-2019-0230),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大。阿里云应急响应中心提醒Apache Stru...