iceFUN板ICE40HX8K的PLL配置、VHDL实例化及综合流程咨询
解答:ICE40HX8K PLL在VHDL设计中的实例化与综合流程整合
一、VHDL设计中正确实例化ICE40HX8K PLL
你生成的Verilog PLL模块端口为clock_in(输入时钟)、clock_out(输出50MHz时钟)、locked(锁定信号),需修正构思的实例化代码,同时添加必要信号并处理PLL锁定状态以避免逻辑异常:
- 修改
top.vhd架构部分,添加内部信号
architecture rtl of top is signal blink : std_logic := '1'; -- 添加PLL相关信号 signal fast_clk : std_logic; signal pll_locked : std_logic; begin
- 正确实例化PLL模块(端口名需与Verilog模块完全匹配)
-- PLL实例化 pll_instance : entity work.pll port map( clock_in => clk, -- 外部12MHz时钟输入 clock_out => fast_clk, -- PLL输出的50MHz时钟 locked => pll_locked -- PLL锁定信号 );
- 修改计数器逻辑,加入PLL锁定判断
避免PLL未锁定时计数器乱跳,在时钟上升沿逻辑中加入锁定状态判断:
process (fast_clk) variable counter : unsigned (23 downto 0) := x"000000"; begin if rising_edge(fast_clk) then -- PLL未锁定时重置计数器与闪烁信号 if pll_locked = '0' then counter := x"000000"; blink <= '1'; else if counter = 11_999_999 then counter := x"000000"; blink <= not blink; else counter := counter + 1; end if; end if; end if; end process;
二、将Verilog PLL模块加入现有综合流程
Yosys支持混合VHDL与Verilog设计的综合,只需修改原有Yosys命令,同时加载两种语言的设计文件:
保存PLL代码
将生成的Verilog PLL代码保存为pll.v,放在与top.vhd同一目录下。修改Yosys综合命令
先通过ghdl处理VHDL文件,再用read_verilog加载Verilog模块,最后统一综合:
yosys -m ghdl -p ' ghdl --std=08 top.vhd -e top; read_verilog pll.v; synth_ice40 -json top.json '
- 后续流程保持不变
nextpnr-ice40与icepack命令无需修改,沿用原有配置即可:
nextpnr-ice40 -r --hx8k --json top.json --package cb132 --asc top.asc --opt-timing --pcf iceFUN.pcf --report bin/usage.report.json icepack top.asc top.bin
关键注意事项
- 确保Verilog模块名(
pll)与VHDL实例化时的entity work.pll完全一致,Yosys会自动合并不同语言的模块到同一设计库。 - 必须处理PLL的
locked信号,否则FPGA上电初期PLL未锁定时,逻辑会出现异常行为。 - 你生成的PLL实际输出频率为50.25MHz,LED实际闪烁频率会略高于预期的4.166Hz(约4.1875Hz),属于正常误差。
内容的提问来源于stack exchange,提问作者Maximilian
相关产品推荐
相关产品推荐

