简体   繁体   English

接口信号和接口端口有什么区别?

[英]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

RTL作为端口设计的时钟

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

RTL用于设计为信号的时钟

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM