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