我正在使用Basys2板对一个简单的字符串检测器进行编程,以读取像“0101”这样的模式。我正在使用Xilinix Design Suite 13.2来完成这个项目。 .ucf文件提供以下消息。
ERROR:Place:1018 - A clock IOB / clock component pair have been found that are not
placed at an optimal clock IOB clock site pair.
The clock component <reset_IBUF_BUFG> is placed at site <BUFGMUX_X1Y1>.
The IO component <reset> is placed at site <IPAD73>.
以下是我的用户约束文件的样子:
NET "x" LOC = "P11";# input switch
NET "reset" LOC = "K3"; # reset switch
NET "ck" LOC = "B8"; # clock
NET "b1" LOC = "A7"; # button 1
NET "b2" LOC = "M4"; # button 2
NET "z" LOC = "M5"; # output
我在网上找到的解决方案之一就是在ucf中使用它:
CLOCK_DEDICATED_ROUTE = FALSE;
但不幸的是,这对我不起作用。我对这个问题有任何帮助表示感谢。
答案 0 :(得分:3)
该消息似乎暗示您的重置被检测为时钟信号。这应该令人担忧 - 您是否有对复位信号的边缘敏感的过程?
你应该(直到你真正知道你在做什么)才使用几种形式的过程。
process (clk, reset)
begin
if reset = '1' then
-- async reset stuff
elsif rising_edge(clk) then
-- sync stuff
end if;
end process;
process (clk)
begin
if reset = '1' then
--sync reset stuff
else
-- other sync stuff
end if;
end process;
另外,请注意 - 您仍然需要同步释放重置信号到这些进程。
以下是各种重置策略的好读物:
http://www.xilinx.com/support/documentation/white_papers/wp272.pdf
最后,对于几乎所有情况,使用CLOCK_DEDICATED_ROUTE = FALSE;
是另一个禁忌。
答案 1 :(得分:0)
在我的情况下,我收到了不可思议的错误消息,因为我输入错误:
always @(clk) begin
if (rst) begin
...
而不是
always @(posedge clk) begin
if (rst) begin
...
显然,因为它没有使用clk
的边缘,rst
现在被当作时钟对待并弄乱路由。
我知道这是一个老问题,但我只是使用ISE和Spartan 6来解决这个问题;希望这个答案可以帮助某人(很可能是我从现在开始的6个月)。