vhdl - iCE40 Ultra Plus 5k — 如何设置 PLL(无需专有 GUI 工具)(续)
问题描述
在这个问题中,建议我使用现有的库来测试 iCE40 Ultra Plus 5k 的 PLL。
我买了Icebreaker V1.0e板,它看起来像这样:
外部 12 MHz 振荡器连接到Lattice iCE40UP5k (封装 SG48)的引脚 35 (标记为绿色) 。
Pin 35 具有功能:
IOT_46b_G0
,类型:DPIO/GBIN0
并且位于银行:)0
。
当我搜索上面发布的库时,我在第 98 页上发现了一个不错的原语。这个原语的描述与Icebreaker V1.0e原理图SB_PLL40_PAD
上所做的完全匹配。这是描述:
请注意它与上面的引脚描述匹配!现在,我想在我的 VHDL 中使用它,所以一开始我只为这个原语编写了一个 VHDL 包装器:
-- A:
library ieee;
use ieee.std_logic_1164.all;
-- B:
entity pll_icebreaker is port(
C1_1: in std_ulogic;
C1_2: out std_ulogic;
C1_3: out std_ulogic;
C1_4: out std_ulogic;
C1_5: in std_ulogic;
C1_6: in std_ulogic_vector (6 downto 0);
C1_7: in std_ulogic;
C1_8: in std_ulogic;
C1_9: in std_ulogic
);
end pll_icebreaker;
-- C:
architecture logic_001 of pll_icebreaker is
-- D:
component SB_PLL_40_PAD is port (
PACKAGEPIN: in std_ulogic;
PLLOUTGLOBAL: out std_ulogic;
PLLOUTCORE: out std_ulogic;
LOCK: out std_ulogic;
EXTFEEDBACK: in std_ulogic;
DYNAMICDELAY: in std_ulogic_vector (6 downto 0);
RESETB: in std_ulogic;
BYPASS: in std_ulogic;
LATCHINPUTVALUE: in std_ulogic
);
end component;
begin
-- E:
C1: SB_PLL_40_PAD port map(
PACKAGEPIN => C1_1,
PLLOUTGLOBAL => C1_2,
PLLOUTCORE => C1_3,
LOCK => C1_4,
EXTFEEDBACK => C1_5,
DYNAMICDELAY => C1_6,
RESETB => C1_7,
BYPASS => C1_8,
LATCHINPUTVALUE => C1_9
);
end architecture logic_001;
现在我尝试使用此makefile
目标编译此 VHDL 设计all
(仅使用 FOSS 工具):
# A:
file_main = pll_icebreaker
file_pcf = icebreaker
module_top = pll_icebreaker
entity_top = $(module_top)
####################################################################################################
# B:
all:
yosys \
-m ghdl \
-p "ghdl $(file_main).vhdl -e $(entity_top); write_verilog $(file_main).v"
yosys \
-p "synth_ice40 -top $(module_top) -blif $(file_main).blif" \
$(file_main).v
arachne-pnr \
-d 5k \
-P sg48 \
-o $(file_main).asc \
-p $(file_pcf).pcf $(file_main).blif
icepack $(file_main).asc $(file_main).bin
我的工具链抱怨它找不到模块SB_PLL_40_PAD
:
2.2.1. Analyzing design hierarchy..
Top module: \pll_icebreaker
ERROR: Module `\SB_PLL_40_PAD' referenced in module `\pll_icebreaker' in cell `\c1' is not part of the design.
make: *** [makefile:81: all] Error 1
怎么来的?Lattice 技术库不是在 Yosys 工具中实现的吗?我有点困惑......我该如何解决这个问题?
解决方案
推荐阅读
- python - 如何从亚马逊产品页面获取隐藏信息(平均评论)?(网络抓取)
- angularjs - Html2canvas 不适用于 angular.js 中的 Google 折线图
- aspnetboilerplate - 对于 asp.net 样板核心版本,发布需要 robocopy
- python - 加载 Json 文件不区分大小写
- ruby-on-rails - 使用 rabl 渲染哈希数组
- python - 变量在子程序中没有获得价值
- visual-studio - 无法在 VS 2017 15.7.5 中定位 .NET Framework 4.7.2
- c# - 如何将用于审计目的的 Web n 层应用程序中的用户身份从用户界面层传递到数据访问层?
- android - 如何在 android 中为特定应用设置代理设置?
- c# - 忽略空元素的 C# 对象序列化到 XML