不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

SV中的Interface和Program

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完成仿真。

posted on   皮皮祥  阅读(321)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示