【问题标题】:place_design Error for clock constraint VHDL Vivado FPGA时钟约束 VHDL Vivado FPGA 的 place_design 错误
【发布时间】:2015-08-24 22:47:53
【问题描述】:

所以我试图在 Vivado 中为 ZYBO FPGA 板设计一个“自动售货机”时序电路。但是,每次我尝试通过实施阶段时都会遇到一堆错误,主要是

[Place 30-58] IO placement is infeasible. Number of unplaced terminals (1) is greater than
number of available sites (0).
The following Groups of I/O terminals have not sufficient capacity: 
 IO Group: 0 with : SioStd: LVCMOS18   VCCO = 1.8 Termination: 0  TermDir:  In   RangeId: 1  
has only 0 sites available on device, but needs 1 sites.
Term: clk

我确实尝试了 Auto I/O 规划,但最终所做的只是移除了引脚约束。那时它通过了实现,但当然无法生成比特流,因为没有一个端口被映射到引脚。

这是我的 VHDL 设计

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY des_src IS
    PORT (
        reset       : IN    std_logic;
        clk         : IN    std_logic;
        QDN         : IN    std_logic_vector(2 DOWNTO 0);
        PC          : OUT   std_logic_vector(1 DOWNTO 0)
    );
END des_src;

ARCHITECTURE behavioral OF des_src IS
    TYPE        statetype IS (Start, Five, Ten, Fifteen, Twenty, Twentyfive, Thirty, Thirtyfive, Fourty, Fourtyfive);
    SIGNAL      currentstate, nextstate     : statetype;
BEGIN
    fsm1:   PROCESS (QDN, currentstate)
    BEGIN
        CASE currentstate IS
                WHEN Start =>
                        PC <= "00";
                        CASE QDN IS
                                WHEN "000" =>
                                        nextstate <= Start;
                                WHEN "001" =>
                                        nextstate <= Five;
                                WHEN "010" =>
                                        nextstate <= Ten;
                                WHEN "100" =>
                                        nextstate <= Twentyfive;
                                WHEN OTHERS =>
                                        nextstate <= Start;
                         END CASE;
                WHEN Five =>
                         PC <= "00";
                         CASE QDN IS
                                 WHEN "000" =>
                                         nextstate <= Five;
                                 WHEN "001" =>
                                         nextstate <= Ten;
                                 WHEN "010" =>
                                         nextstate <= Fifteen;
                                 WHEN "100" =>
                                         nextstate <= Thirty;
                                 WHEN OTHERS =>
                                         nextstate <= Start;
                        END CASE;
                WHEN Ten =>
                        PC <= "00";
                        CASE QDN IS
                                WHEN "000" =>
                                        nextstate <= Ten;
                                WHEN "001" =>
                                        nextstate <= Fifteen;
                                WHEN "010" =>
                                        nextstate <= Twenty;
                                WHEN "100" =>
                                        nextstate <= Thirtyfive;
                                WHEN OTHERS =>
                                        nextstate <= Start;
                        END CASE;
                WHEN Fifteen =>
                        PC <= "00";
                        CASE QDN IS
                                WHEN "000" =>
                                        nextstate <=Fifteen;
                                WHEN "001" =>
                                        nextstate <= Twenty;
                                WHEN "010" =>
                                        nextstate <= Twentyfive;
                                WHEN "100" =>
                                        nextstate <= Fourty;
                                WHEN OTHERS =>
                                        nextstate <= Start;
                        END CASE;
                WHEN Twenty =>
                        PC <= "00";
                        CASE QDN IS
                                WHEN "000" =>
                                        nextstate <= Twenty;
                                WHEN "001" =>
                                        nextstate <= Twentyfive;
                                WHEN "010" =>
                                        nextstate <= Thirty;
                                WHEN "100" =>
                                        nextstate <= Fourtyfive;
                                WHEN OTHERS =>
                                        nextstate <= Start;
                        END CASE;
                WHEN Twentyfive =>
                        PC <= "10";
                        nextstate <= Start;
                WHEN Thirty =>
                        PC <= "01";
                        nextstate <= Twentyfive;
                WHEN Thirtyfive =>
                        PC <= "01";
                        nextstate <= Thirty;
                WHEN Fourty =>
                        PC <= "01";
                        nextstate <= Thirtyfive;
                WHEN Fourtyfive =>
                        PC <= "01";
                        nextstate <= Fourty;
        END CASE;
    END PROCESS;

    fsm2:   PROCESS (reset, clk)
    BEGIN
        IF (reset = '0') THEN
                currentstate <= Start;
        ELSIF (clk'EVENT) AND (clk = '1') THEN
                currentstate <= nextstate;
        END IF;
    END PROCESS;
END behavioral;

这是我的限制

##Buttons
##IO_L20N_T3_34
set_property IOSTANDARD LVCMOS33 [get_ports {QDN[0]}]
set_property PACKAGE_PIN R18 [get_ports {QDN[0]}]

##IO_L24N_T3_34
set_property IOSTANDARD LVCMOS33 [get_ports {QDN[1]}]
set_property PACKAGE_PIN P16 [get_ports {QDN[1]}]

##IO_L18P_T2_34
set_property IOSTANDARD LVCMOS33 [get_ports {QDN[2]}]
set_property PACKAGE_PIN V16 [get_ports {QDN[2]}]

##IO_L7P_T1_34
set_property IOSTANDARD LVCMOS33 [get_ports reset]
set_property PACKAGE_PIN Y16 [get_ports reset]

##LEDs
##IO_L23P_T3_35
set_property IOSTANDARD LVCMOS33 [get_ports {PC[0]}]
set_property PACKAGE_PIN M14 [get_ports {PC[0]}]

##IO_L23N_T3_35
set_property IOSTANDARD LVCMOS33 [get_ports {PC[1]}]
set_property PACKAGE_PIN M15 [get_ports {PC[1]}]

create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]
set_input_delay -clock [get_clocks clk] -min -add_delay 0.000 [get_ports {QDN[*]}]
set_input_delay -clock [get_clocks clk] -max -add_delay 0.000 [get_ports {QDN[*]}]
set_input_delay -clock [get_clocks clk] -min -add_delay 0.000 [get_ports reset]
set_input_delay -clock [get_clocks clk] -max -add_delay 0.000 [get_ports reset]
set_output_delay -clock [get_clocks clk] -min -add_delay 0.000 [get_ports {PC[*]}]
set_output_delay -clock [get_clocks clk] -max -add_delay 0.000 [get_ports {PC[*]}]

我正在使用 Vivado 2015.2 并为 ZYBO 开发板进行设计。

感谢任何和所有的帮助。

编辑 8/26/15

好的,我的代码大部分都在工作。我能够使用

set_property PACKAGE_PIN L16 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
create_clock -period 10.000 -name clk -waveform {0.000 5.000} [get_ports clk]

为我的时钟。但是,这个时钟比我想要的(125MHz)快得多,所以我知道我必须使用时钟分频并在约束文件中生成一个时钟,但是我需要将生成的时钟分配给一个引脚吗?是否有人对如何在我当前的 vhdl 代码中包含时钟分频器有任何提示?我只是让它成为另一个进程,并添加另一个端口,还是比这更复杂?

【问题讨论】:

    标签: syntax-error vhdl vivado


    【解决方案1】:

    您没有为 clk 主节点分配引脚。我猜 Vivado 决定它需要一个 1.8V LVCMOS 输入(可能是默认值),但 Zybo 上没有可用的 LVCMOS 1V8 用户引脚:唯一的 1V8 组是 501,它已经被以太网、USB OTG、 SD 卡、UART 和按钮。正如您可能告诉 Vivado 您正在使用 Zybo,它无法单独解决这个问题。

    因此,如果您有外部时钟源,请将其连接到 pmod 连接器之一,将相应的引脚声明为 LVCMOS3V3 并将其分配给clk。否则,如果您希望您的时钟由处理系统驱动,您必须明确地将 4 个 FCLK PS-to-PL 时钟之一连接到您设计的 clk 输入。

    在我看来,最简单的方法是将您的设计转换为 IP(请参阅 Vivado 文档),在块设计中对其进行实例化,添加一个处理系统和您需要的主要 I/O,然后执行接线。

    【讨论】:

    • 好答案。我会避免制作设计的 IP,而是制作一个以 PL 时钟作为输出的框图。然后在顶层 VHDL 文件中实例化框图。这样 VHDL 是顶层而不是框图。这是一个偏好问题,但我发现这种方法在添加更多 PS-PL 接口时更具可扩展性,因为无需重新定义自定义 IP。
    • 我会试试这个并更新它是否解决了这个问题。哦,如果我使用外部时钟解决方案,arduino 可以解决这个问题吗?
    • 其实,在我去挂外接时钟之前,有没有什么原因这不起作用?参考手册说引脚 L16 是 125 MHz 时钟。 set_property PACKAGE_PIN L16 [get_ports clk] set_property IOSTANDARD LVCMOS33 [get_ports clk]
    • 哦,如果我使用外部时钟解决方案,那么 arduino 可以解决这个问题吗?:是的,我想是的。只要您的输入时钟在实际用作时钟之前通过 Zynq 内核的时钟缓冲硬件,一切都应该没问题。如果您正确地将其声明为时钟,Vivado 应该会自动处理此问题。
    • 是的,您可以使用这个 125MHz 外部时钟...只要您的设计至少在这个频率下运行。试一试:针对 125MHz 时钟频率进行综合、布局和布线,并查看布线后时序报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多