接口SystemVerilog与verilog模块

时间:2014-02-19 07:56:25

标签: verilog system-verilog

我相信SystemVerilog在编码方面具有更高的抽象层次。是否可以将SystemVerilog模块与verilog模块连接?在尝试整合它们时,是否应该记住这些方面?

3 个答案:

答案 0 :(得分:4)

Verilog和SystemVerilog是相同的语言 - 也就是说,您在SystemVerilog中存在任何关于Verilog的知识。从综合的角度来看,您将基本上将信号位与其他信号位连接起来。只需使用SystemVerilog,您就可以使用更先进的方法来声明这些信号,还有更多操作员可以操作这些信号。

在不知道任何SystemVerilog的情况下,我建议您在尝试将较旧的Verilog模块与SystemVerilog模块集成之前自行学习。很难解释要注意的事项。

从Verilog延伸到SystemVerilog的一件事是网(线)和变量(regs)的概念。确保您已清楚地了解它,以及SystemVerilog添加的新语义。我有一个small article。 Verilog只允许电线通过端口,并且没有强制执行指示。 SV允许变量通过端口(意味着端口连接两侧的变量),但强烈强制执行方向性。

答案 1 :(得分:2)

是的,可以将系统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信号。

答案 2 :(得分:0)

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