前言
Altera芯片数字越大,输出等级越低;赛灵思数字越小,输出等级越低。
一、参数介绍
当锁相为高电平时表示输出的时钟可用。
multiplication factor为乘法因子,division factor为除法因子,对应如图:
输入50,输出为13时,寻找两者的最大公约数:1
输入50,输出130,同理:
当设置150MHz时,输出会自动生成乘法因子为3,除法因子为1,即50×3/1=150
当设置333.3MHz
时,输出会生成333.333333,乘法因子为20,除法因子为3,即50×20/3=333.333333,约等于333.3。
占空比:当输入为50时输出为50,如上图。
当输入为20时,输出为17,如下图,这是涉及到某些算法所导致的(注意这时设置的是333.3MHz
,如果是150MHz则占空比输入20输出20)。
设置四路输出:
Enter output clock frequency:
c0输入100MHz,输出100MHz,其余不变;
Enter output clock parameter:
c1除法因子设置为2,实现2分频,输出为25MHz;
c2输出为50MHz,相移90°;
c3输出为50MHz,占空比为20%。
二、代码
1.rtl代码
代码如下(示例):
module pll
(
input wire sys_clk , //系统时钟50Mhz
output wire clk_mul_2 , //系统时钟经过2倍频后的时钟
output wire clk_div , //系统时钟经过2分频后的时钟
output wire clk_pha_90, //系统时钟经过相移90°后的时钟
output wire clk_duc_20, //系统时钟变为占空比为20%的时钟
output wire locked //检测锁相环是否已经锁定,
//只有该信号为高时输出的时钟才是稳定的
);
pll_ip pll_ip_inst
(
.inclk0 (sys_clk),
.c0 ( clk_mul_2 ),
.c1 ( clk_div ),
.c2 ( clk_pha_90 ),
.c3 ( clk_duc_20 ),
.locked ( locked )
);
endmodule
2.测试代码
代码如下(示例):
`timescale 1ns/1ns
module tb_pll();
wire clk_mul_2 ;
wire clk_div ;
wire clk_pha_90;
wire clk_duc_20;
wire locked ;
reg sys_clk ;
initial sys_clk = 1'b1;
always #10 sys_clk = ~sys_clk;
pll pll_inst
(
.sys_clk (sys_clk ), //input sys_clk
.clk_mul_2 (clk_mul_2 ), //output clk_mul_2
.clk_div (clk_div ), //output clk_div_2
.clk_pha_90 (clk_pha_90 ), //output clk_phase_90
.clk_duc_20 (clk_duc_20 ), //output clk_ducle_20
.locked (locked ) //output locked
);
endmodule
总结
太棒了,未定义,累了。
这到底怎么解决啊?!