比尔李先森

锁相环的fpga实现

0
阅读(4242)

参考《全国大学生电子设计竞赛教程--基于TI器件的设计方法》 P248页


module bit_syn_extraction

(
input clk,
input code_in,
output bs_out
);


wire clk_1;
wire sig_div_out;
wire d_inst45;
wire code_diff_out;
sig_diff sig_diff_inst
(
 .code_in(code_in) , // input  code_in_sig
 .clk(clk) , // input  clk_sig
 .code_out(code_diff_out) // output  code_out_sig
);

wire d_inst35=code_diff_out&sig_div_out; //超前门

reg q_inst36;
always @(posedge clk_1)
q_inst36<=d_inst35;

wire d_inst38=~q_inst36;

wire d_inst37=bs_out&code_diff_out&d_inst38;

reg q_inst39;
always @(posedge clk_1)
q_inst39<=d_inst37;


reg q_inst15;
always @(posedge clk)
q_inst15<=d_inst45;

assign  d_inst45=~q_inst15;

assign clk_1=(~clk)&d_inst45; //d_inst47

wire d_inst48=(~clk)&q_inst15;

wire d_inst41=d_inst38&d_inst48;

wire  d_inst42=q_inst39&(~clk_1);

wire d_inst49=d_inst41^d_inst42;


sig_divider sig_divider_inst
(
 .sig_in(d_inst49) , // input  sig_in_sig
 .sig_out(sig_div_out) // output  sig_out_sig
);

assign bs_out=~sig_div_out;

endmodule 






//这个东西只会对正跳变沿有效  就是一个沿判断电路

module sig_diff
(
input code_in,
input clk,
output code_out
);
reg [9:0] code_shift1;
always@(posedge clk)
code_shift1<={code_shift1[8:0],code_in};

assign code_out=code_in&(code_in^code_shift1[9]);
endmodule 


module sig_divider
(
input sig_in,
output sig_out
);
reg [5:0] cnt;
reg sig_out_r;
always @ (posedge sig_in)
begin
  if(cnt<25) //因为在cnt为0的时候没有将sig_out_r转换过来
 begin
  cnt<=cnt+1;
  sig_out_r<=0;
 end
 else if(cnt<49)
 begin
  cnt<=cnt+1;
  sig_out_r<=1;
 end
 else
  cnt<=0;
end

assign sig_out=sig_out_r;


endmodule 



4.2.7 数字锁相环提取位同步信号电路

数字锁相环是一个相位反馈控制系统,在数字锁相环中,由于误差控制信号是离散的数字信号,因而受控的输出相位的改变也是离散的;此外,环路组成的部件也是全用数字电路实现的,故而这种锁相环也称为全数字锁相环。常用的数字锁相环的原理框图如图4-48所示。




针对框图,有以下几点说明:

  1. 设要提取的位同步信号频率为f,则要求晶体振荡器的振荡频率为mf,其中m为分频器的分频系数。
  2. 窄脉冲形成器的作用是将振荡波形变成窄脉冲。图中两个窄脉冲形成电路的输出信号相位要求刚好相差90°
  3. 添门为常闭门,在没有滞后脉冲控制时,此门始终关闭,输出低电平;扣门为常开门,若无超前脉冲控制时,来自晶体振荡器的脉冲信号顺利通过扣门。晶振信号经过或门到达m分频器,输出频率为f的脉冲信号。该信号再经过脉冲形成电路,输出规则的位同步脉冲信号。
  4. 鉴相器的功能是比较接收码元与m分频器的输出信号(即本地时钟信号)的相位关系,若本地时钟信号超前于接收码元的相位,则鉴相器输出一个超前脉冲,加到扣门,扣除一个晶振脉冲,这样分频器的输出脉冲的相位就滞后了1/m周期;若本地时钟信号的相位滞后于接收码元,则鉴相器输出一个滞后脉冲,加到添门,控制添门打开,加入一个晶振脉冲到或门。由于加到添门的晶振信号与加到扣门的晶振信号的相位相差π,即这两路晶振信号脉冲在时间上是错开的,因此当从添门加入一个晶振脉冲到或门时,相当于在扣门输出的晶振信号中间插入了一个窄脉冲,也就使分频器输入端添加了一个脉冲,这样分频器输出相位就提前了1/m周期。整个数字锁相环路按上述方式,反复调整本地时钟相位,以实现位同步。添扣脉冲的原理如图4-49所示。


4-49     添扣脉冲原理框图

下面介绍基于FPGA/CPLD设计超前滞后数字锁相环提取位同步信号,整个模块包括四个部分:微分与鉴相电路、超前与滞后控制电路、双相高频时钟源及分频电路。其电路原理模型如图4-50所示。图中,微分电路模块将非归零码转换成归零码,以利于定时信息的提取;双相高频时钟源将本地高频时钟信号变换成两路相位相反的高频时钟信号,然后分别送给控制电路中的常开门和常闭门;常开门和常闭门的输出经过或门送给分频器,从分频器输出所提取的低频时钟信号。鉴相器包括数字微分器和两个与门。本地时钟信号和接收码元通过与门进行相位比较,输出超前信号与滞后信号,并分别送至常开门和常闭门。


4-50     位同步信号提取电路模型

图中,微分器的顶层电路如图4-51所示,其中CODE_IN为码元输入,CLKIN为时钟输入,CODE_OUT为微分后的码元输出。整个微分器由异或门、与门和由10D触发器构成的移位寄存器组成。


4-51     微分器顶层电路图

利用Verilog HDL对图2-37的电路模型进行时序仿真,得到仿真波形如图4-52所示。由图可知,该电路可从信码中较准确地提取位同步信号。图中code in为信码输入,bs_out为位同步信号输出。


4-52     位同步信号提取的时序仿真