![](/img/trans.png)
[英]TAP (Test Anything Protocol) module for Verilog or 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.