1

我正在使用 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;

但不幸的是,这对我不起作用。我将不胜感激有关此问题的任何帮助。

4

2 回答 2

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;几乎在所有情况下,使用都是另一个禁忌。

于 2011-09-29T08:34:04.227 回答
0

就我而言,我收到了那个难以理解的错误消息,因为我输入错误:

always @(clk) begin
  if (rst) begin
    ...

代替

always @(posedge clk) begin
  if (rst) begin
    ...

显然,由于它没有使用 的边缘clkrst因此现在被视为时钟并弄乱了路由。

我知道这是一个老问题,但我只是使用 ISE 和 Spartan 6 解决了这个问题;希望这个答案会对某人有所帮助(很可能是6个月后的我)。

于 2018-03-30T18:10:17.613 回答