Rob*_*Rob 6 synthesis fpga lattice-diamond
我在使用 Lattice ICE5LP4K 的内部振荡器时遇到问题。根据 iCE40 振荡器使用指南附录,verilog 中的代码应如下所示:
\n\n SB_HFOSC OSCInst0 (\n .CLKHF_EN(ENCLKHF),\n .CLKHF_PU(CLKHF_POWERUP),\n .CLKHF(CLKHF)\n ) /* synthesis ROUTE_THROUGH_FABRIC= [0|1] */;\n Defparam OSCInst0.CLKHF_DIV = 2\xe2\x80\x99b00;\nRun Code Online (Sandbox Code Playgroud)\n\n我正在使用的代码库采用 VHDL 格式,因此我已将该组件添加到我的架构中,如下所示:
\n\n SB_HFOSC : OscInst0\n port map(\n CLKHF_EN => RST_SYS_N;\n CLKHF_PU => RST_SYS_N;\n CLKHF => HFOSC_CLK_48MHZ\n );\nRun Code Online (Sandbox Code Playgroud)\n\n当我尝试此操作时,收到与组件 SB_HFOSC 未定义相关的错误。然后我找到了这篇文章:lattice FPGA内部振荡器模拟问题,其中提到将lattice组件添加到项目文件中。
\n\n我在项目中添加了一个新文件,其中包含 sb_ice_syn_vital.vhd 中的以下代码:
\n\n-----------------------------------------------------\n--- SB_HFOSC -------\n------------------------------------------------\nlibrary IEEE;\nuse ieee.std_logic_1164.all;\nuse ieee.std_logic_arith.all;\nuse ieee.std_logic_unsigned.all;\nuse IEEE.Vital_Primitives.all;\nuse IEEE.VITAL_Timing.all;\nentity SB_HFOSC is \n generic( CLKHF_DIV: string:="0b00";\n Xon : boolean := true;\n MsgOn : boolean := true;\n tipd_CLKHFEN: VitalDelayType01 := (0.000 ns, 0.000 ns);\n tipd_CLKHFPU: VitalDelayType01 := (0.000 ns, 0.000 ns);\n tpd_CLKHFEN_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns);\n tpd_CLKHFPU_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns)\n); \nport(\n CLKHF : out std_logic;\n CLKHFEN :in std_logic;\n CLKHFPU : in std_logic\n );\n attribute VITAL_LEVEL0 of \n SB_HFOSC : entity is true;\nend SB_HFOSC ;\n\narchitecture SB_HFOSC_V of SB_HFOSC is\nattribute VITAL_LEVEL0 of\n SB_HFOSC_V : architecture is true;\n signal CLKHFEN_ipd: std_ulogic := \'X\';\n signal CLKHFPU_ipd: std_ulogic := \'X\';\n signal CLKHF_sig : std_ulogic :=\'X\';\n\ncomponent SB_HFOSC_CORE \ngeneric( CLKHF_DIV: string:="0b00"); \nport ( \n CLKHF_PU : IN std_logic;\n CLKHF_EN : IN std_logic;\n CLKHF : OUT std_logic\n);\n\nend component;\n\nbegin\nWireDelay : block\n begin\n VitalWireDelay (CLKHFEN_ipd, CLKHFEN, tipd_CLKHFEN);\n VitalWireDelay (CLKHFPU_ipd, CLKHFPU, tipd_CLKHFPU);\n end block;\n\nLS: SB_HFOSC_CORE \nGENERIC MAP (CLKHF_DIV => CLKHF_DIV)\nport map(\n CLKHF_PU=> CLKHFPU_ipd,\n CLKHF_EN=> CLKHFEN,\n CLKHF=> CLKHF_sig\n );\nVITALPathDelay :process (CLKHFEN_ipd,CLKHF_sig,CLKHFPU_ipd)\nvariable CLKHF_GlitchData : VitalGlitchDataType; \nvariable CLKHF_zd : std_ulogic :=\'X\';\nbegin \n CLKHF_zd:=CLKHF_sig;\nVitalPathDelay01 (\n OutSignal => CLKHF,\n GlitchData => CLKHF_GlitchData,\n OutSignalName => "CLKHF",\n OutTemp => CLKHF_zd,\n Paths => (--0 =>(CLKHFEN_ipd\'last_event, tpd_CLKHFEN_CLKHF, true),\n 0 =>(CLKHFPU_ipd\'last_event, tpd_CLKHFPU_CLKHF, true)),\n Mode => VitalTransport,\n Xon => Xon,\n MsgOn => MsgOn,\n MsgSeverity => warning);\nend process;\n\nend SB_HFOSC_V; \nRun Code Online (Sandbox Code Playgroud)\n\n我还从 vcomponent_vital.vhd 添加了组件定义(到我的顶层架构):
\n\ncomponent SB_HFOSC is \n generic( \n CLKHF_DIV: string:="0b00";\n Xon : boolean := true;\n MsgOn : boolean := true;\n tipd_CLKHFEN: VitalDelayType01 := (0.000 ns, 0.000 ns);\n tipd_CLKHFPU: VitalDelayType01 := (0.000 ns, 0.000 ns);\n tpd_CLKHFEN_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns);\n tpd_CLKHFPU_CLKHF : VitalDelayType01 := (0.000 ns, 0.000 ns)\n ); \n port(\n CLKHF : out std_logic;\n CLKHFEN :in std_logic;\n CLKHFPU : in std_logic\n );\nend component;\nRun Code Online (Sandbox Code Playgroud)\n\n当我尝试合成代码时,我收到了大量错误,所有这些错误似乎都与未定义“vitaldelaytype01”和“vital_level0”有关。正如您在上面的代码中看到的,我已经包含了 IEEE Vital 库。我尝试使用内置的 ICECube2 编译器以及 Synplify Pro 进行编译,但在每种情况下都会收到类似的错误。
\n\n我是否遵循正确的流程在代码中实施 HFOSC?我是否需要下载 ICECube2 套件中未自动提供的其他库?
\n我能够通过莱迪思的客户支持门户解决这个问题。实例化lattice HFOSC IP块的正确过程如下:
您的图书馆中包括:
library ice;
Run Code Online (Sandbox Code Playgroud)
在您的组件定义中:
component SB_HFOSC
GENERIC( CLKHF_DIV :string :="0b00");
PORT(
CLKHFEN: IN STD_LOGIC ;
CLKHFPU: IN STD_LOGIC;
CLKHF:OUT STD_LOGIC
);
END COMPONENT;
Run Code Online (Sandbox Code Playgroud)
在您的实例实例化中:
u_osc : SB_HFOSC
GENERIC MAP(CLKHF_DIV =>"0b00")
port map(
CLKHFEN => RST_SYS_N,
CLKHFPU => RST_SYS_N,
CLKHF => HFOSC_CLK_48MHZ
);
Run Code Online (Sandbox Code Playgroud)
记下引脚名称 - 它们与莱迪思指南不同,这就是我在实例化组件时遇到问题的原因。
我在此过程中了解到的另一件有趣的事情是,HFOSC 块使用全局缓冲区,但 Lattice 工具无法预先识别这一点,因此它可能会在综合后 P&R 期间遇到问题。要为 HFOSC 组件保留 8 个缓冲区之一,请将全局缓冲区总数限制为 7 个,如下所示(插入顶级架构定义中):
attribute syn_global_buffers : integer;
attribute syn_global_buffers of struct : architecture is 7;
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助!
抢
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |