繁体   English   中英

与Verilog模块接口SystemVerilog

[英]Interface SystemVerilog with a verilog module

我相信SystemVerilog是编码中更高层次的抽象。 是否可以将SystemVerilog模块与verilog模块接口? 在尝试将它们集成时是否应牢记任何方面?

Verilog和SystemVerilog是同一语言-也就是说,您对Verilog的任何了解都存在于SystemVerilog中。 从综合的角度来看,您将需要将信号的某些位与信号的其他位相连接。 只需使用SystemVerilog,您将拥有更高级的声明那些信号的方法,以及更多的操作员来操纵这些信号。

在不了解任何SystemVerilog的情况下,我建议您在尝试将较旧的Verilog模块与SystemVerilog模块集成之前先自己学习它。 很难解释要寻找什么。

从Verilog延续到SystemVerilog的一件事是网络(电线)和变量(规则)的概念。 确保您对此有清楚的了解,以及SystemVerilog添加的新语义。 我有一篇小文章 Verilog仅允许电线通过端口,并且不强制执行指示。 SV允许变量通过端口(意味着端口连接两侧的变量),但是强烈地增强了方向性。

是的,可以将系统Verilog模块连接到Verilog模块。 在此之前,您必须了解Verilog模块中使用的信号(变量)。

您必须创建接口,您的Verilog信号从该接口连接到系统Verilog模块。 因此,可以在Verilog和系统Verilog模块之间进行数据传输。

在这里,我提供了verilog模块和系统verilog模块。 代码的主要部分是用于连接Verilog和系统Verilog模块的接口。

verilog模块代码:

module dff(qn,d,clk,reset);

output qn;
input d,clk,reset;
reg qn;

always@(posedge clk,negedge reset)

begin

if (!reset)

begin
qn=1'bx;
end

else if (d==0)
begin
qn=0;
end
else if (d==1)
begin 
qn=1;
end

end

endmodule

系统Verilog模块代码:

interface melay_intf(input bit clk);

  logic o,clk,rst,i;

  clocking c1@(posedge clk);
    input o;
    output i,rst;
  endclocking

endinterface

module top;
  bit clk;

  always
    #1 clk = ~clk;

  melay_intf i1(clk);

  dff d1(.o(i1.o),.clk(i1.clk),.rst(i1.rst),.i(i1.i));

  melay_tes(i1.tes);

endmodule

program melay_tes(melay_intf i1);

  initial
    #100 $finish;

  initial
    begin
      i1.rst <= 0;
      #4 i1.rst <= 1;
      #4 i1.rst <= 0;

      i1.i = 1;
          #2 i1.i = 0;
          #2 i1.i = 1;
          #2 i1.i = 0;
          #2 i1.i = 1;
          #2 i1.i = 0;


      repeat(10)
        begin
          i1.i = 1;
          #2 i1.i = $urandom_range(0,1); 
        end
    end

  initial
    $monitor("output = %d   clk = %d    rst = %d    i = %d",i1.o,i1.clk,i1.rst,i1.i);
  initial
    begin
      $dumpfile("mem.vcd");
      $dumpvars();

    end
endprogram

这里重要的部分是接口,在其中我使用了时钟块进行同步。 在这里计时c1 @(posedge clk); 因此,在时钟模块中提到的所有信号均为i,o,rst。所有此信号在clk信号的每个摆幅处都会改变其值。

这里dff d1(.o(i1.o),. clk(i1.clk),. rst(i1.rst),. i(i1.i)); 您在顶部模块中发现的重要信息是我在Verilog信号和系统Verilog信号之间建立了连接。

您可以找到verilog模块名称为“ dff”。 我以dff verilog模块为例,进行了连接。 这里的i1.o,i1.clk,i1.rst,i1.i是系统Verilog信号,它们连接到点约定的Verilog模块的o,clk,rst,i信号。

系统Verilog(SV)主要用于设计验证,因此之所以要用Verilog编写DUT(被测设备),主要是因为Verilog可以被大多数合成。 SV然后用于为该DUT编写验证环境。 在两者之间需要接口以将SV与verilog的DUT连接。 SV写入一个单独的文件,以指定两个文件之间的不同连接。 该文件说INTERFACE文件包含在所有需要这些连接的单独模块中。 您可以参考IEEE标准https://standards.ieee.org/getieee/1800/download/1800-2012.pdf,以获取有关SV的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM