Forum Discussion
I’m seeing the same issue, and I’ll report it to the tool specialists for further investigation. This problem seems to affect the ALTPLL IP across different devices (MAX 10 and Cyclone IV).
Workaround:
Please use an earlier version of Quartus to instantiate the IP, then upgrade the design to Quartus 25.1 Standard Edition on Windows OS.
Alternatively, the IP instantiation GUI works correctly on Linux OS using Quartus v25.1std(tested with SUSE).
For reference, I’ve tested this using Quartus 23.1 Standard Edition on Windows 11, and it works as expected.
Regards,
Richard Tan
Hi Richard,
First thank you for confirming the issue. I'm glad it has been noted, but I don't think it's isolated to release 25.1. Perhaps it's bad luck, but I have not been able to get reliable operation with it for a Max 10M08SAE in Quartus 17.1, 23.1 or 25.1. I've tried two different systems... 1x AMD, 1x Intel, both running Windows 11 with 4k monitors. The behavior changes between releases, but every instance involves a scrambling of the screen due to GUI sizing and overlayed text. Unlike 25.1, 23.1 was marginally readable.
I did read about issues with high-resolution displays which lead me to testing the compatibility settings and hi-res override modes. This leads me to the reason I believe the issue has been there awhile... the graphics compatibility settings changes the Megafunction behavior. In some modes it refused to open, while in others it would open and crash. The only setting that allowed it to open was no setting. There isn't a great reason why changing this should cause such a dramatic shift in behavior.
I would appreciate it if Altera could post an app note on how to instantiate a basic PLL without the Megafunction... a bare minimum implementation (1 clock in, 1 clock out). I don't mind configuring a slew of parameters, I just want something that works and I can modify without worrying about the software version I have installed or having to jump between versions.
Thanks!
- FvM13 days ago
Super Contributor
Hi,
VHDL example, inclock 16 MHz, outclock 50 MHzlibrary ieee; use ieee.std_logic_1164.all; entity plltest_min is port ( inclk0 : in std_logic := '0'; c0 : out std_logic ); END plltest_min; architecture inst of plltest_min is component altpll generic ( bandwidth_type : string; clk0_divide_by : natural; clk0_duty_cycle : natural; clk0_multiply_by : natural; clk0_phase_shift : string; inclk0_input_frequency : natural; operation_mode : string; pll_type : string; compensate_clock : string := "CLK0"; self_reset_on_loss_lock : string ); port ( inclk : in std_logic_vector (0 downto 0) := (others => '0'); areset : in std_logic := '0'; clk : out std_logic_vector (0 downto 0); locked : out std_logic ); end component; begin mypll : altpll generic map ( bandwidth_type => "AUTO", clk0_divide_by => 16, clk0_duty_cycle => 50, clk0_multiply_by => 50, clk0_phase_shift => "0", inclk0_input_frequency => 62500, -- 16 MHz operation_mode => "NORMAL", pll_type => "AUTO", self_reset_on_loss_lock => "ON" ) port map ( inclk(0) => inclk0, clk(0) => c0 ); end inst;Verilog example
module vpll_min ( inclk0, c0); input inclk0; output c0; wire [4:0] clk; assign c0 = clk[0]; altpll altpll_component ( .areset (1'b0), .inclk ({1'b0, inclk0}), .locked (), .clk (clk)); defparam altpll_component.bandwidth_type = "AUTO", altpll_component.clk0_divide_by = 16, altpll_component.clk0_duty_cycle = 50, altpll_component.clk0_multiply_by = 50, altpll_component.compensate_clock = "CLK0", altpll_component.inclk0_input_frequency = 62500, altpll_component.operation_mode = "NORMAL", altpll_component.pll_type = "AUTO", altpll_component.self_reset_on_loss_lock = "OFF", altpll_component.width_clock = 5; endmoduleRegards
Frank- drbarryh12 days ago
Occasional Contributor
Thanks Frank, That is very helpful, In my case i need to instance the ALT_PLL with all four of the clocks enabled in System Verilog (or Verilog). I would like to do that using the 'Set Frequency option' method as well and not the multiply / divide by method. With the following setup: The PLL Input frequency is 25 MHz, then i need to set the PLL output clocks c0 to c3 as follows:
c0 -> 100 MHz
c1 -> 5 MHz
c2 -> 50 MHz
c3 -> 125 MHz
Can you please provide me with an instantiation template as you did for the previous case ?
Thanks very much,
Barry
- FvM12 days ago
Super Contributor
Hi Barry,
unlike altera_pll (e.g. used for Cyclone V) altpll IP doesn't accept MHz values.
You can however add arbitrary integer multiply_by and divide_by values, e.g. assuming 1 MHz reference frequency. They are automatically converted to appropriate PLL parameters. Also input frequency should be specified in ps.module vpll_min ( inclk0, c0, c1, c2, c3); input inclk0; output c0; output c1; output c2; output c3; wire [4:0] clk; assign c0 = clk[0]; assign c1 = clk[1]; assign c2 = clk[2]; assign c3 = clk[3]; altpll altpll_component ( .areset (1'b0), .inclk ({1'b0, inclk0}), .locked (), .clk (clk)); defparam altpll_component.bandwidth_type = "AUTO", altpll_component.clk0_divide_by = 25, altpll_component.clk0_multiply_by = 100, altpll_component.clk1_divide_by = 25, altpll_component.clk1_multiply_by = 5, altpll_component.clk2_divide_by = 25, altpll_component.clk2_multiply_by = 50, altpll_component.clk3_divide_by = 25, altpll_component.clk3_multiply_by = 125, altpll_component.compensate_clock = "CLK0", altpll_component.inclk0_input_frequency = 40000, altpll_component.operation_mode = "NORMAL", altpll_component.pll_type = "AUTO", altpll_component.self_reset_on_loss_lock = "OFF", altpll_component.width_clock = 5; endmoduleRegards
Frank
- drbarryh12 days ago
Occasional Contributor
Good question ! Thanks for asking. I was going to ask that as my next question.