|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
原工程文件是这样的:
`timescale 1ns/100ps
module dqs_delay (
clk_in,
sel_in,
clk_out
);
input clk_in;
input [4:0] sel_in;
output clk_out;
wire delay1;
wire delay2;
wire delay3;
wire delay4;
wire delay5;
wire high;
assign high = 1'b1;
LUT4 one( .I0(high), .I1(sel_in[4]), .I2(delay5), .I3(clk_in), .O(clk_out));
defparam one.INIT = 16'hf3c0;
LUT4 two( .I0(clk_in), .I1(sel_in[2]), .I2(high), .I3(delay3), .O(delay4));
defparam two.INIT = 16'hee22;
LUT4 three( .I0(clk_in), .I1(sel_in[0]), .I2(delay1), .I3(high), .O(delay2) );
defparam three.INIT = 16'he2e2;
LUT4 four( .I0(high), .I1(high), .I2(high), .I3(clk_in), .O(delay1) );
defparam four.INIT = 16'hff00;
LUT4 five( .I0(high), .I1(sel_in[3]), .I2(delay4), .I3(clk_in), .O(delay5) );
defparam five.INIT = 16'hf3c0;
LUT4 six( .I0(clk_in), .I1(sel_in[1]), .I2(delay2), .I3(high), .O(delay3) );
defparam six.INIT = 16'he2e2;
endmodule
通过分析每个LUT的接口及真值表情况,可得:
(1)对于第一个LUT(就是verilog文件中的LUT4 four),其O端(接delay1)为I3(接clk_in)输入经过一个LUT的延时。
(2)对于第二个LUT(就是verilog文件中的LUT4 three),其O端(接delay2)的延时与I1(这里接了sel_in[0])的情况有关,当sel_in[0] = 0, 其O端为I0(这里接了clk_in)经过一个LUT的延时,而sel_in[0] = 1, 其O端为I2(这里接了delay1)经过一个LUT的延时
(3) 对于第三个LUT(就是verilog文件中的LUT4 six),其LUT属性和端口连线情况前一个LUT一致,故结果一致。
(4) 对于第四个LUT(就是verilog文件中的LUT4 two),尽管其LUT属性和端口连线情况与前两者不一致,但结果一致,也是当sel_in[2]为0时,其O端为I0(这里接了clk_in)经过一个LUT的延时,而sel_in[2] = 1, 其O端为I3(这里接了delay3)经过一个LUT的延时
(5)对于后两个LUT,尽管其LUT属性和端口连线情况与前两者不一致,但结果一致。
综述,当sel_in=5’00000时,clk_out为clk_in经过一个lut的延时。
当sel_in=5’10000时,clk_out为clk_in经过2个lut的延时。
当sel_in=5’11000时,clk_out为clk_in经过3个lut的延时。
…
当sel_in=5’11111时,clk_out为clk_in经过6个lut的延时。
不知道我的分析对吗,但我有一个疑问,为什么后面5个LUT有三种属性配置和接口的方法,为什么不可以一种配置和接口呢,如都把属性配置成ee22,而且接口方法一致?为什么现在要分别配置为f3c0,ee22,e2e2? |
|