1

我必须在Active HDL 12中进行Verilog编码,但我不知道为什么三个模块在顶部模块中没有相互连接。

顶部模块`timescale 1 ns / 1 ps

module Main (Mx1,Mx2,Mx3,Mx4,My);
input Mx1;
input Mx2;   
input Mx3;
input Mx4;
output My;

wire  interface1;
wire interface2;

And a1(.X (MX1),.Y (MX2),.O1 (interface1));
Or o1(.X1 (MX3),.Y1 (MX4),.O2 (interface2));
Xor x1(.X2 (interface1),.Y2 (interface2),.O3 (My));
   
endmodule

And模块

`timescale 1 ns / 1 ps

module And ( X ,Y ,O1 );

input X ;
input Y ;
output wire O1 ;

    assign O1 = X & Y;

endmodule

Or模块

`timescale 1 ns / 1 ps

module Or ( X1 ,Y1 ,O2 );

input X1 ;
input Y1 ;
output wire O2 ;

    assign O2 = X1 & Y1;

endmodule

Xor模块

`timescale 1 ns / 1 ps

module Xor (X2,Y2,O3);

input X2;
input Y2;
output O3;

    assign O3 = X2 ^ Y2;

endmodule

在输出中,我根本看不到答案。

4

1 回答 1

2

Verilog 区分大小写。这意味着MxMX是两个不同的信号。例如,Mx输入未连接到And模块。解决它的一种方法是更改​​:

And a1(.X (MX1),.Y (MX2),.O1 (interface1));
Or o1(.X1 (MX3),.Y1 (MX4),.O2 (interface2));

至:

And a1(.X (Mx1),.Y (Mx2),.O1 (interface1));
Or o1(.X1 (Mx3),.Y1 (Mx4),.O2 (interface2));

一些模拟器会生成警告消息。例如,Cadence 模拟器(可在 edaplayground 上获得)显示警告,例如:

And a1(.X (MX1),.Y (MX2),.O1 (interface1));
                      |
xmelab: *W,CSINFI : implicit wire has no fanin (Main.MX2).

另一种帮助识别此类常见错误的方法是在代码中使用此编译器指令:

`default_nettype none

在这种情况下,您的模拟器应该会产生编译错误。

于 2021-11-22T17:06:27.937 回答