Предположим, у нас есть такой интерфейс:
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
Есть ли существенная разница между Clock
(интерфейсный порт) и, скажем, InData
(интерфейсный сигнал)?Я знаю, что эти объекты связаны по-разному, когда создается интерфейс.Но есть ли что-то еще?Я также заметил, что интерфейсные порты часто используются для тактового сигнала.Есть ли причина для этого?
ОБНОВЛЕНИЕ
Я упростил свой интерфейс и сделал два примера, в которых я пытаюсь использовать часы двумя различными способами.У меня есть две слегка отличающиеся схемы RTL, но я не вижу никакой принципиальной разницы между ними.
Часы как порт:
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
Часы в качестве сигнала:
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