gpt4 book ai didi

fpga - 莱迪思 ICE5LP4K FPGA : How to add HFOSC to user vhdl

转载 作者:行者123 更新时间:2023-12-04 12:45:17 28 4
gpt4 key购买 nike

我在使用 Lattice ICE5LP4K 的内部振荡器时遇到问题。根据 iCE40 振荡器使用指南附录,verilog 中的代码应如下所示:

    SB_HFOSC OSCInst0 (
.CLKHF_EN(ENCLKHF),
.CLKHF_PU(CLKHF_POWERUP),
.CLKHF(CLKHF)
) /* synthesis ROUTE_THROUGH_FABRIC= [0|1] */;
Defparam OSCInst0.CLKHF_DIV = 2’b00;

我正在使用的代码库是 VHDL,因此我已将组件添加到我的架构中,如下所示:
  SB_HFOSC : OscInst0
port map(
CLKHF_EN => RST_SYS_N;
CLKHF_PU => RST_SYS_N;
CLKHF => HFOSC_CLK_48MHZ
);

当我尝试这样做时,我收到了与未定义组件 SB_HFOSC 相关的错误。然后我找到了这篇文章: lattice FPGA internal oscillator simulation issues其中提到将晶格组件添加到您的项目文件中。

我在我的项目中添加了一个新文件,其中包含来自 sb_ice_syn_vital.vhd 的以下代码:
-----------------------------------------------------
--- SB_HFOSC -------
------------------------------------------------
library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use IEEE.Vital_Primitives.all;
use IEEE.VITAL_Timing.all;
entity SB_HFOSC is
generic( CLKHF_DIV: string:="0b00";
Xon : boolean := true;
MsgOn : boolean := true;
tipd_CLKHFEN: VitalDelayType01 := (0.000 ns, 0.000 ns);
tipd_CLKHFPU: VitalDelayType01 := (0.000 ns, 0.000 ns);
tpd_CLKHFEN_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns);
tpd_CLKHFPU_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns)
);
port(
CLKHF : out std_logic;
CLKHFEN :in std_logic;
CLKHFPU : in std_logic
);
attribute VITAL_LEVEL0 of
SB_HFOSC : entity is true;
end SB_HFOSC ;

architecture SB_HFOSC_V of SB_HFOSC is
attribute VITAL_LEVEL0 of
SB_HFOSC_V : architecture is true;
signal CLKHFEN_ipd: std_ulogic := 'X';
signal CLKHFPU_ipd: std_ulogic := 'X';
signal CLKHF_sig : std_ulogic :='X';

component SB_HFOSC_CORE
generic( CLKHF_DIV: string:="0b00");
port (
CLKHF_PU : IN std_logic;
CLKHF_EN : IN std_logic;
CLKHF : OUT std_logic
);

end component;

begin
WireDelay : block
begin
VitalWireDelay (CLKHFEN_ipd, CLKHFEN, tipd_CLKHFEN);
VitalWireDelay (CLKHFPU_ipd, CLKHFPU, tipd_CLKHFPU);
end block;

LS: SB_HFOSC_CORE
GENERIC MAP (CLKHF_DIV => CLKHF_DIV)
port map(
CLKHF_PU=> CLKHFPU_ipd,
CLKHF_EN=> CLKHFEN,
CLKHF=> CLKHF_sig
);
VITALPathDelay :process (CLKHFEN_ipd,CLKHF_sig,CLKHFPU_ipd)
variable CLKHF_GlitchData : VitalGlitchDataType;
variable CLKHF_zd : std_ulogic :='X';
begin
CLKHF_zd:=CLKHF_sig;
VitalPathDelay01 (
OutSignal => CLKHF,
GlitchData => CLKHF_GlitchData,
OutSignalName => "CLKHF",
OutTemp => CLKHF_zd,
Paths => (--0 =>(CLKHFEN_ipd'last_event, tpd_CLKHFEN_CLKHF, true),
0 =>(CLKHFPU_ipd'last_event, tpd_CLKHFPU_CLKHF, true)),
Mode => VitalTransport,
Xon => Xon,
MsgOn => MsgOn,
MsgSeverity => warning);
end process;

end SB_HFOSC_V;

我还从 vcomponent_vital.vhd 添加了组件定义(到我的顶级架构):
component SB_HFOSC  is 
generic(
CLKHF_DIV: string:="0b00";
Xon : boolean := true;
MsgOn : boolean := true;
tipd_CLKHFEN: VitalDelayType01 := (0.000 ns, 0.000 ns);
tipd_CLKHFPU: VitalDelayType01 := (0.000 ns, 0.000 ns);
tpd_CLKHFEN_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns);
tpd_CLKHFPU_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns)
);
port(
CLKHF : out std_logic;
CLKHFEN :in std_logic;
CLKHFPU : in std_logic
);
end component;

当我尝试合成代码时,我收到了大量错误,所有这些似乎都与未定义“vitaldelaytype01”和“vital_level0”有关。正如您在上面的代码中看到的,我已经包含了 IEEE Vital 库。我尝试使用内置的 ICECube2 编译器以及 Synplify Pro 进行编译,但在每种情况下都收到类似的错误。

我是否按照正确的流程在我的代码中实现 HFOSC?我是否需要下载 ICECube2 套件中未自动提供的其他库?

最佳答案

我能够通过莱迪思的客户支持门户解决这个问题。实例化格 HFOSC IP 块的正确过程如下:

在您的库中包括:

library ice;

在您的组件定义中:
component SB_HFOSC  
GENERIC( CLKHF_DIV :string :="0b00");
PORT(
CLKHFEN: IN STD_LOGIC ;
CLKHFPU: IN STD_LOGIC;
CLKHF:OUT STD_LOGIC
);
END COMPONENT;

在您的实例实例中:
   u_osc : SB_HFOSC
GENERIC MAP(CLKHF_DIV =>"0b00")
port map(
CLKHFEN => RST_SYS_N,
CLKHFPU => RST_SYS_N,
CLKHF => HFOSC_CLK_48MHZ
);

请注意引脚名称 - 它们与 Lattice 指南不同,这就是我在实例化组件时遇到问题的原因。

我在此过程中学到的另一件有趣的事情是 HFOSC 块使用全局缓冲区,但 Lattice 工具无法预先识别这一点,因此它可能会在综合后 P&R 期间遇到问题。要为 HFOSC 组件保留 8 个缓冲区之一,请将全局缓冲区总数限制为 7 个,如下所示(插入您的顶级架构定义):
attribute syn_global_buffers : integer;
attribute syn_global_buffers of struct : architecture is 7;

希望这对其他人有帮助!

关于fpga - 莱迪思 ICE5LP4K FPGA : How to add HFOSC to user vhdl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740258/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com