最近正在学习使用K7的IODELAY模块,想利用IODELAY模块实现小于一个系统时钟的延时,代码如下:
端口声明和一些信号声明;
assign delay[0] = 要延迟的信号;
//***********IDELAYCTRL模块只例化了一次***********//
IDELAYCTRL IDELAYCTRL_inst (
.RDY (RDY ),
.REFCLK (CLK_200M ), //参考时钟为200MHz
.RST (RST )
);
//***********IDELAYE2例化了4次,前一个模块的输出为后一个模块的输入,想利用IDELAYE2做4次延时,总时间小于一个系统时钟周期***********//
genvar k;
generate
for (k=0;k<=3;k=k+1)
IDELAYE2 #(
.CINVCTRL_SEL("FALSE"),
.DELAY_SRC("DATAIN"), // 内部资源的数据输入
.HIGH_PERFORMANCE_MODE("FALSE"),
.IDELAY_TYPE("FIXED"),
.IDELAY_VALUE(3),
.PIPE_SEL("FALSE"),
.REFCLK_FREQUENCY(200.0),
.SIGNAL_PATTERN("DATA")
)
IDELAYE2_inst (
.CNTVALUEOUT ( ),
.DATAOUT ( delay[k+1] ),
.C (1'b0 ),
.CE (1'b0 ),
.CINVCTRL ( ),
.CNTVALUEIN ( ),
.DATAIN ( delay[k] ),
.IDATAIN (1'b0 ),
.INC (1'b0 ),
.LD ( ),
.LDPIPEEN ( ),
.REGRST (1'b0 )
);
endgenerate
always @( * )
case ( sel )
3'b0 : delay_out = delay[0];
3'b1 : delay_out = delay[1];
3'b2 : delay_out = delay[2];
3'b3 : delay_out = delay[3];
3'b4 : delay_out = delay[4];
default : delay_out = delay[0];
endcase
endmodule
在map时,出现错误ERROR:Pack:1107 - Pack was unable to combine the symbols listed below into a single IOB component because the site type selected is not compatible.
不知道问题出在什么地方,请各位大侠指点。
还有一个问题:为什么K7的tap数是32(一般的都是64啊),按照 5ns*3/32 计算出来的延时值和综合之后仿真的延时值不一样,why?
|