【发布时间】:2017-11-13 15:49:13
【问题描述】:
我已经声明了以下接口:
interface data_x #(parameter g_DataWidth = 8)
(input ckrs_t ClkRs_ix);
logic [g_DataWidth-1:0] data;
bit enable;
ckrs_t ClkRs;
always_comb begin
ClkRs = ClkRs_ix;
end
endinterface
接口有数据总线和数据使能,同时还与时钟和复位信号相关联,即typedef ckrs_t。
我有一个模块,它接受这些接口的参数数组:
module fourmclinks
(...
data_x packet_ox[NUMBER_OF_GBT_LINKS-1:0],
data_x packet_ix[NUMBER_OF_GBT_LINKS-1:0],
...
);
我遇到的问题是,我需要在顶级实体中声明这些 data_x 接口的数组,但每次使用不同的 ClkRs_ix 输入时钟。 (它用于 gbts,每个接收器都有自己的时钟和复位信号)。
我尝试了很多东西,包括这个:
ckrs_t txclock_x;
assign txclock_x.clk = GbtTxFrameClk40MHz_k;
assign txclock_x.reset = GbtReset_r;
data_x #(.g_DataWidth(g_FrameSize)) packet_ox[NUMBER_OF_GBT_LINKS-1:0](.ClkRs_ix(txclock_x));
data_x #(.g_DataWidth(g_FrameSize)) packet_ix[NUMBER_OF_GBT_LINKS-1:0]();
genvar linkiface;
generate
for(linkiface=1; linkiface < NUMBER_OF_GBT_LINKS+1; linkiface++) begin : linkgenerator
assign packet_ix[linkiface-1].ClkRs_ix.clk =
GbtRxFrameClk40Mhz_kb4[linkiface];
assign packet_ix[linkiface-1].ClkRs_ix.reset = GbtReset_r;
assign packet_ix[linkiface-1].enable = 0;
assign packet_ix[linkiface-1].data = RxDataAppSfpGbtUserData_4b80[linkiface];
end
endgenerate
因此制作空/虚拟/未分配/...接口数组声明,然后在生成循环中为其分配正确的信号。这模拟,但 quartus 不编译它声称
值不能分配给输入“ClkRs_ix”。
如何正确生成接口数组,每个接口都有不同的输入连接?请帮忙
【问题讨论】:
-
我希望您的代码能够正常工作,但没有进一步调查。由于它不起作用,我建议将您的接口实例移动到生成“for”循环中并忘记实例数组。无论如何它都会变得更干净。
标签: system-verilog