我在 Vivado 中运行实现时遇到错误。这是我的顶级模块:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
-- Single Cycle ARM Processor
entity Processor is
port (
CLK : in STD_LOGIC;
reset : in STD_LOGIC;
Instr : out STD_LOGIC_VECTOR(31 downto 0);
PC : out STD_LOGIC_VECTOR(31 downto 0);
ALUResult : out STD_LOGIC_VECTOR(31 downto 0);
WriteData : out STD_LOGIC_VECTOR(31 downto 0);
Result : out STD_LOGIC_VECTOR(31 downto 0)
);
end;
architecture Struct of Processor is
component ControlUnit is
port (
Instr : in STD_LOGIC_VECTOR(31 downto 0);
Flags : in STD_LOGIC_VECTOR(3 downto 0);
RegSrc : out STD_LOGIC_VECTOR(2 downto 0);
ALUSrc : out STD_LOGIC;
ImmSrc : out STD_LOGIC_VECTOR(1 downto 0);
ALUCtrl : out STD_LOGIC_VECTOR(2 downto 0);
MemtoReg : out STD_LOGIC;
RegWrite : out STD_LOGIC;
MemWrite : out STD_LOGIC;
FlagsWrite : out STD_LOGIC_VECTOR(1 downto 0);
PCSrc : out STD_LOGIC
);
end component;
component Datapath is
generic (
INSTMEM_SIZE: POSITIVE := 6; -- Instruction memory addressable bytes
DATAMEM_SIZE: POSITIVE := 5 -- Data memory addressable bytes
);
port (
CLK, reset : in STD_LOGIC;
RegSrc : in STD_LOGIC_VECTOR( 2 downto 0);
ALUSrc : in STD_LOGIC;
ImmSrc : in STD_LOGIC_VECTOR( 1 downto 0);
ALUCtrl : in STD_LOGIC_VECTOR( 2 downto 0);
MemtoReg : in STD_LOGIC;
RegWrite : in STD_LOGIC;
MemWrite : in STD_LOGIC;
FlagsWrite : in STD_LOGIC_VECTOR( 1 downto 0);
PCSrc : in STD_LOGIC;
Instr : out STD_LOGIC_VECTOR(31 downto 0);
Flags : out STD_LOGIC_VECTOR( 3 downto 0);
PC : out STD_LOGIC_VECTOR(31 downto 0);
ALUResult : out STD_LOGIC_VECTOR(31 downto 0);
WriteData : out STD_LOGIC_VECTOR(31 downto 0);
Result : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
signal Instr_in: STD_LOGIC_VECTOR(31 downto 0);
signal Flags: STD_LOGIC_VECTOR(3 downto 0);
signal RegSrc: STD_LOGIC_VECTOR(2 downto 0);
signal ALUSrc: STD_LOGIC;
signal ImmSrc: STD_LOGIC_VECTOR(1 downto 0);
signal ALUCtrl: STD_LOGIC_VECTOR(2 downto 0);
signal MemtoReg: STD_LOGIC;
signal RegWrite: STD_LOGIC;
signal MemWrite: STD_LOGIC;
signal FlagsWrite: STD_LOGIC_VECTOR(1 downto 0);
signal PCSrc: STD_LOGIC;
constant INSTMEM_SIZE: POSITIVE := 6; -- Instruction memory addressable bytes
constant DATAMEM_SIZE: POSITIVE := 5; -- Data memory addressable bytes
begin
ctrl_unit: ControlUnit port map (
Instr_in, Flags,
RegSrc, ALUSrc, ImmSrc, ALUCtrl, MemtoReg,
RegWrite, MemWrite, FlagsWrite,
PCSrc
);
data_path: Datapath generic map (INSTMEM_SIZE, DATAMEM_SIZE)
port map (
CLK, reset,
RegSrc, ALUSrc, ImmSrc, ALUCtrl, MemtoReg,
RegWrite, MemWrite, FlagsWrite, PCSrc,
Instr_in, Flags, PC, ALUResult, WriteData, Result
);
Instr <= Instr_in;
end;
这是我遇到的错误:
ERROR: [Place 30-58] IO placement is infeasible. Number of unplaced IO Ports (161) is greater than number of available sites (150).
The following are banks with available pins:
IO Group: 0 with : SioStd: LVCMOS18 VCCO = 1.8 Termination: 0 TermDir: Out RangeId: 1 Drv: 12 has only 150 sites available on device, but needs 160 sites.
Term: ALUResult[0]
Term: ALUResult[1]
Term: ALUResult[2]
Term: ALUResult[3]
Term: ALUResult[4]
Term: ALUResult[5]
Term: ALUResult[6]
Term: ALUResult[7]
Term: ALUResult[8]
Term: ALUResult[9]
Term: ALUResult[10]
Term: ALUResult[11]
Term: ALUResult[12]
Term: ALUResult[13]
Term: ALUResult[14]
Term: ALUResult[15]
Term: ALUResult[16]
Term: ALUResult[17]
Term: ALUResult[18]
Term: ALUResult[19]
Term: ALUResult[20]
Term: ALUResult[21]
Term: ALUResult[22]
Term: ALUResult[23]
Term: ALUResult[24]
Term: ALUResult[25]
Term: ALUResult[26]
Term: ALUResult[27]
Term: ALUResult[28]
Term: ALUResult[29]
Term: ALUResult[30]
Term: ALUResult[31]
Term: Instr[0]
Term: Instr[1]
Term: Instr[2]
Term: Instr[3]
Term: Instr[4]
Term: Instr[5]
Term: Instr[6]
Term: Instr[7]
Term: Instr[8]
Term: Instr[9]
Term: Instr[10]
Term: Instr[11]
Term: Instr[12]
Term: Instr[13]
Term: Instr[14]
Term: Instr[15]
Term: Instr[16]
Term: Instr[17]
Term: Instr[18]
Term: Instr[19]
Term: Instr[20]
Term: Instr[21]
Term: Instr[22]
Term: Instr[23]
Term: Instr[24]
Term: Instr[25]
Term: Instr[26]
Term: Instr[27]
Term: Instr[28]
Term: Instr[29]
Term: Instr[30]
Term: Instr[31]
Term: PC[0]
Term: PC[1]
Term: PC[2]
Term: PC[3]
Term: PC[4]
Term: PC[5]
Term: PC[6]
Term: PC[7]
Term: PC[8]
Term: PC[9]
Term: PC[10]
Term: PC[11]
Term: PC[12]
Term: PC[13]
Term: PC[14]
Term: PC[15]
Term: PC[16]
Term: PC[17]
Term: PC[18]
Term: PC[19]
Term: PC[20]
Term: PC[21]
Term: PC[22]
Term: PC[23]
Term: PC[24]
Term: PC[25]
Term: PC[26]
Term: PC[27]
Term: PC[28]
Term: PC[29]
Term: PC[30]
Term: PC[31]
Term: Result[0]
Term: Result[1]
Term: Result[2]
Term: Result[3]
Term: Result[4]
Term: Result[5]
Term: Result[6]
Term: Result[7]
Term: Result[8]
Term: Result[9]
Term: Result[10]
Term: Result[11]
Term: Result[12]
Term: Result[13]
Term: Result[14]
Term: Result[15]
Term: Result[16]
Term: Result[17]
Term: Result[18]
Term: Result[19]
Term: Result[20]
Term: Result[21]
Term: Result[22]
Term: Result[23]
Term: Result[24]
Term: Result[25]
Term: Result[26]
Term: Result[27]
Term: Result[28]
Term: Result[29]
Term: Result[30]
Term: Result[31]
Term: WriteData[0]
Term: WriteData[1]
Term: WriteData[2]
Term: WriteData[3]
Term: WriteData[4]
Term: WriteData[5]
Term: WriteData[6]
Term: WriteData[7]
Term: WriteData[8]
Term: WriteData[9]
Term: WriteData[10]
Term: WriteData[11]
Term: WriteData[12]
Term: WriteData[13]
Term: WriteData[14]
Term: WriteData[15]
Term: WriteData[16]
Term: WriteData[17]
Term: WriteData[18]
Term: WriteData[19]
Term: WriteData[20]
Term: WriteData[21]
Term: WriteData[22]
Term: WriteData[23]
Term: WriteData[24]
Term: WriteData[25]
Term: WriteData[26]
Term: WriteData[27]
Term: WriteData[28]
Term: WriteData[29]
Term: WriteData[30]
Term: WriteData[31]
Resolution: Consider using Xilinx part with greater number of IO pins
ERROR: [Place 30-374] IO placer failed to find a solution
Below is the partial placement that can be analyzed to see if any constraint modifications will make the IO placement problem easier to solve.
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| IO Placement : Bank Stats |
+----+-------+-------+------------------------------------------------------------------------+------------------------------------------+--------+--------+--------+-----+
| Id | Pins | Terms | Standards | IDelayCtrls | VREF | VCCO | VR | DCI |
+----+-------+-------+------------------------------------------------------------------------+------------------------------------------+--------+--------+--------+-----+
| 0 | 0 | 0 | | | | | | |
| 13 | 50 | 1 | LVCMOS33(1) | | | +3.30 | YES | |
| 33 | 50 | 0 | | | | | | |
| 34 | 50 | 0 | | | | | | |
| 35 | 50 | 0 | | | | | | |
+----+-------+-------+------------------------------------------------------------------------+------------------------------------------+--------+--------+--------+-----+
| | 200 | 1 | | | | | | |
+----+-------+-------+------------------------------------------------------------------------+------------------------------------------+--------+--------+--------+-----+
IO Placement:
+--------+----------------------+-----------------+----------------------+----------------------+----------------------+
| BankId | Terminal | Standard | Site | Pin | Attributes |
+--------+----------------------+-----------------+----------------------+----------------------+----------------------+
| 13 | CLK | LVCMOS33 | IOB_X0Y26 | Y9 | |
+--------+----------------------+-----------------+----------------------+----------------------+----------------------+
Phase 1.2 IO Placement/ Clock Placement/ Build Placer Device | Checksum: 1349a576a
Time (s): cpu = 00:00:00.57 ; elapsed = 00:00:00.47 . Memory (MB): peak = 2665.531 ; gain = 0.000 ; free physical = 138 ; free virtual = 2287
Phase 1 Placer Initialization | Checksum: 1349a576a
Time (s): cpu = 00:00:00.57 ; elapsed = 00:00:00.48 . Memory (MB): peak = 2665.531 ; gain = 0.000 ; free physical = 138 ; free virtual = 2287
ERROR: [Place 30-99] Placer failed with error: 'IO Clock Placer failed'
Please review all ERROR, CRITICAL WARNING, and WARNING messages during placement to understand the cause for failure.
Ending Placer Task | Checksum: 1349a576a
Time (s): cpu = 00:00:00.57 ; elapsed = 00:00:00.48 . Memory (MB): peak = 2665.531 ; gain = 0.000 ; free physical = 138 ; free virtual = 2287
INFO: [Common 17-83] Releasing license: Implementation
44 Infos, 0 Warnings, 100 Critical Warnings and 5 Errors encountered.
place_design failed
ERROR: [Common 17-69] Command failed: Placer could not place all instances
INFO: [Common 17-206] Exiting Vivado at Wed Mar 27 17:52:20 2024...
这是我的约束文件:
# CLK - Zedboard 100MHz oscillator
set_property -dict { PACKAGE_PIN Y9 IOSTANDARD LVCMOS33 } [get_ports {CLK}]
# define clock and period
create_clock -period 10 -name CLK -waveform {0.000 5.000} [get_ports {CLK}]
set_property IOB TRUE [all_outputs]
我使用的卡是 Zynq 7000 ZC702 评估板 (xc7z020clg484-1),它应该有 200 个可用 IOB。我想这与时钟的放置有关。我不太了解约束文件的格式。如有任何帮助,我们将不胜感激。
每个 io pin 至少需要一个 io_standard 和 package_pin 约束。
您需要一个示例约束文件。
搜索“zynq zc702 评估板约束”。
看起来有多种方法可以获取示例约束文件,包括 github、AMD 站点以及工具 GUI 中。
还要注意顶级模块中的名称与约束文件中使用的名称相匹配。