[英]What is the difference between interface signals and interface ports?
Suppose we have an interface like this: 假设我们有这样的界面:
interface Memory_i(input Clock);
Data_t InData;
Data_t OutData;
Address_t Address;
// To memory controller
modport Master
(
input Clock,
output InData,
input OutData,
output Address
);
// To memory
modport Slave
(
input Clock,
input InData,
output OutData,
input Address,
);
endinterface
Is there any significant difference between Clock
(interface port) and, let us say, InData
(interface signal)? Clock
(接口端口)和InData
(接口信号)之间是否有任何显着差异? I know that these entities are connected differently when an interface is instantiated. 我知道在实例化接口时这些实体的连接方式不同。 But is there something else?
但还有别的吗? I also noticed that interface ports are frequently used for the clock signal.
我还注意到接口端口经常用于时钟信号。 Is there a reason for that?
这有什么理由吗?
UPDATE UPDATE
I simplified my interface and made two examples where I am trying to use clock in two different ways. 我简化了我的界面并做了两个例子,我试图以两种不同的方式使用时钟。 I got two slightly different RTL circuits, but I cannot not see any fundamental difference between them.
我有两个稍微不同的RTL电路,但我不能看出它们之间有任何根本的区别。
Clock as a port: 时钟作为端口:
interface CdcSignal_i(input clock);
logic data;
// To memory controller
modport Master
(
input clock,
output data
);
// To memory
modport Slave
(
input clock,
input data
);
endinterface
module Cdc(
CdcSignal_i.Slave slave,
CdcSignal_i.Master master
);
logic registerS;
logic registerM;
always_ff @(posedge slave.clock) begin
registerS <= slave.data;
end
always_ff @(posedge master.clock) begin
registerM <= registerS;
master.data <= registerM;
end
endmodule
module InterfaceTest(
input logic clock0,
input logic clock1,
input logic data0,
output data1);
CdcSignal_i signal0(clock0);
assign signal0.data = data0;
CdcSignal_i signal1(clock1);
assign data1 = signal1.data;
Cdc cdc(signal0, signal1);
endmodule
Clock as a signal: 时钟作为信号:
interface CdcSignal_i();
logic data;
logic clock;
// To memory controller
modport Master
(
input clock,
output data
);
// To memory
modport Slave
(
input clock,
input data
);
endinterface
module Cdc(
CdcSignal_i.Slave slave,
CdcSignal_i.Master master
);
logic registerS;
logic registerM;
always_ff @(posedge slave.clock) begin
registerS <= slave.data;
end
always_ff @(posedge master.clock) begin
registerM <= registerS;
master.data <= registerM;
end
endmodule
module InterfaceTest(
input logic clock0,
input logic clock1,
input logic data0,
output data1);
CdcSignal_i signal0();
assign signal0.clock = clock0;
assign signal0.data = data0;
CdcSignal_i signal1();
assign signal1.clock = clock1;
assign data1 = signal1.data;
Cdc cdc(signal0, signal1);
endmodule
You typically see a Clock
as input port to an interface because that signal is shared among many other interface and module instances. 您通常
Clock
视为接口的输入端口,因为该信号在许多其他接口和模块实例之间共享。 On the other hand, each instance of your interface creates another instance of the signal InData
. 另一方面,接口的每个实例都会创建信号
InData
另一个实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.