赛灵思
直播中

贾桂林

7年用户 1529经验值
私信 关注
[问答]

在PlanAhead中的一个Slice中发现了LUT6实例的BEL位置的差异怎么解决?

嗨,
我即将写一个简单的非常小的收缩处理器(2-4 Virtex5-Slices)。
所有LUT,CARRY和FFplacements
手工完成(包括BEL限制),以达到最佳性能和面积效果。
我的问题是,我在PlanAhead中的一个Slice中发现了LUT6实例的BEL位置的差异
FPGA编辑器(由于没有放置FF,因此额外路由的成本会再次进入Slice
适当)

一个简单的例子:我定义
LUT1 BEL = A6LUT FF1 BEL = AFF
LUT2 BEL = B6LUT FF2 BEL = BFF
LUT3 BEL = C6LUT FF3 BEL = CFF
LUT4 BEL = D6LUT FF4 BEL = DFF
当FPGA-Editor以相反的顺序显示LUT时,PlanAhead按预期显示所有内容:
LUT1 BEL = D6LUT FF1 BEL = AFF
LUT2 BEL = C6LUT FF2 BEL = BFF
LUT3 BEL = B6LUT FF3 BEL = CFF
LUT4 BEL = A6LUT FF4 BEL = DFF,
还示出了LUT-o6-信号被路由出并再次进入切片(FF不适合放置)。
我目前的解决方案是逆转以下FlipFlop-BEL-Constraints(AFF..DFF => DFF..AFF)
FF-Stage没有额外的路由成本(静态时序报告具有更好的结果),但这只是一个黑客,
没有真正的解决
任何人都可以帮我解决这个问题吗?
谢谢,
Jotta

回帖(7)

李林

2020-6-11 15:27:29
您是否可以提供测试用例?
干杯,
吉姆
干杯,吉姆
举报

李华

2020-6-11 15:40:35
None
举报

李华

2020-6-11 15:49:02
我忘了提到:
LUT6-INIT设置(在我的代码中:X“0000_0006_0000_0002”)没关系,同样的问题与
很多不同的init值。
jotta
举报

李林

2020-6-11 16:03:33
这看起来与此线程中讨论的LUT6_2的问题相同:http://forums.xilinx.com/xlnx/board/crawl_message?board.id = IMPBD& message.id = 808
其他信息可以在这个博客中找到。
我修改了你的测试用例(参见***体变化),现在一切看起来都很好(参见FED中的附件快照)。
库IEEE;使用IEEE.STD_LOGIC_1164.ALL;使用IEEE.NUMERIC_STD.ALL;库UNISIM;使用UNISIM.vcomponents.all; -----------------------
--------------------------实体root是端口(clock:在std_logic中;输入:在std_logic_vector中(7 downto 0);输出:out std_logic_vector
(7 downto 0)); end root; ----------------------------------------
---------架构根的根是常数宽度:整数:= 8;
- inbut buffer FFs signal ib_ffd_i:std_logic_vector(width-1 downto 0);
signal ib_ffd_o:std_logic_vector(width-1 downto 0);
- LUT测试LUT6s信号lt_lut_i:std_logic_vector(width-1 downto 0);
信号lt_lut_o5:std_logic_vector(width-1 downto 0);
信号lt_lut_o6:std_logic_vector(width-1 downto 0);
- LUT测试FFDs信号lt_ffd_i:std_logic_vector(width-1 downto 0);
信号lt_ffd_o:std_logic_vector(width-1 downto 0);
属性LOCK_PINS:string;
属性S:string;
lt_ffd_o的属性S:signal为“TRUE”;
lt_lut_i的属性S:signal为“TRUE”;
begin - 输入缓冲区FFDs ib_ffd_gen:for i in 0 to width-1生成FDRSE_inst:FDRSE通用映射(INIT =>'0')端口映射(C => clock,CE =>'1',R =>'0
',S =>'0',D => ib_ffd_i(i),Q => ib_ffd_o(i));
结束生成;
- LUTs lt_lut_gen:for i in 0 to width-1生成LUT6_inst的属性LOCK_PINS:label为“ALL”;
开始LUT6_inst:LUT6_2通用映射(INIT => X“0000_0006_0000_0002”)端口映射(I0 => lt_ffd_o(i),I1 => lt_lut_i(i),I2 =>'0',I3 =>'0',I4 =
>'0',I5 =>'1',O5 => lt_lut_o5(i),O6 => lt_lut_o6(i));
结束生成;
- FFDs lt_ffd_gen:for 0 in 0 to width-1生成FDRSE_inst:FDRSE通用映射(INIT =>'0')端口映射(C =>时钟,CE =>'1',R =>'0',S
=>'0',D => lt_ffd_i(i),Q => lt_ffd_o(i));
结束生成;
- 连接ib_ffd_i lt_lut_i lt_ffd_i - 输出结束拱;
干杯,吉姆
举报

更多回帖

发帖
×
20
完善资料,
赚取积分