版主: 51FPGA |
091217272
最后登陆时间:2015-01-13 22:12:51 |
本质上是要把如下述的一个同步置位/复位FD放入IOB中(即使用OFD)
always @(posedge clk or negedge rst_n)
如果逻辑中仅包含这个简单的逻辑的话,通过UCF约束,放入IOB是没问题的。但是,实际逻辑复杂了,这个FD就放不到IOB去。报的警告是,因为存在反馈... 所以不能放入IOB。 从FPGA Editor 看来,对应的FD没有使用CE,而确实是由反馈实现状态保持,即应该是实现成如下形式: SS <= (set | SS) & ~rst; 输入激励中存在输出的反馈。并且功能与前述等效。
通过RTL看逻辑,形式上是 FD的CE端输入为 (rst || set), D输入为~rst; 相当于 if (rst || set) SS <= ~rst; 这也与前述功能等效。
那么,为了达到把它放到 IOB的目的,我决定设计一个功能相同但输入简单的“副本” DUP_SS,即 SS <= (set | SS) & ~rst; DUP_SS <= (set | SS) & ~rst; 前者有反馈,后者没有。两个时序相同,所以企图把后者放IOB,实现目的。
但不幸的是,编译把它优化掉了----认为两个是一样的,仍然不把余下的那个放入IOB。
最终,我通过将这两个reg(FD)的异步初值设为不同,编译才认为这两个不同。我才达到把这个输出放入IOB的目的。
请教各位,有没有什么更好的方法,避免前面编译认为两个逻辑一样而被“优化”掉一个的情况呢?
谢谢! |
共1条 1/1 1 |