文章目录概要tbmain波形图参考
过采样是指对输入信号进行采样,采样频率为输入信号最高频率的2倍以上。 FGA以clk0周期对输入信号data进行4次采样; 在clk的0度、90度、180度、270度的位置分别进行采样,4个周期后输出在clk0时钟域采样的并行数据;
为什么第四行的第一个触发器使用clk270时钟?
因为:
第一拍先实现270度位置采样;
在180度位置对第2拍270度采样的数据进行采样。 (0.75的建立时间0.25的保持时间);
第3拍180度位置采样数据,90度位置采样(0.75的设置时间0.25的保持时间);
第4拍为90位置采样数据,0位置采样(0.75设置时间0.25保持时间);
tb reg clk_ref=1; reg clk0=0; reg clk90=0; reg clk180=0; reg clk270=0; reg data; initialbeginforeverbeginclk _ ref=# 20至clk _ ref; endendinitialbeginforeverbegin @ (posedge clk _ ref; clk0=1; #1; clk0=0; endend initial begin #10; ForeverBegin@(Posedgeclk_ref; #10; clk90=1; #1; clk90=0; endendinitial begin #20; ForeverBegin@(Posedgeclk_ref; #20; clk180=1; #1; clk180=0; endendinitial begin #30; ForeverBegin@(Posedgeclk_ref; #30; clk270=1; #1; clk270=0; 结束初始begin data=0; #200; @ ) @(posedge clk270; #5; 数据=1; #200; 数据=0; #200; $stop (; endcdrU0_cdr(.clk_ref )、/inputclk0、 clk0、/inputclk0、 clk90 )、/inputclk0、 clk90 )//input clk270 main ` time scale1ns/100 psmodulecdr (input clk _ ref,input clk0,input clk90,input clk180,input clk270,input data ); reg [3:0] data_r0=0; //1级延迟reg [3:0] data_r1=0; //二级延迟reg [3:0] data_r2=0; //三级延迟reg [3:0] data_r3=0; //4阶段延迟//data_r0always@(posedge clk0) data_r0[0]=#1 data; always @ [ posedge clk 90 ] data _ r0 [1]=#1data; always@(Posedgeclk180 ) data_r0[2]=#1 data; always@(Posedgeclk270 ) data_r0[3]=#1 data; //data_r1always@(posedge clk0) data_r1[0]=#1 data_r0[0]; always@(Posedgeclk0) data_r1[1]=#1 data_r0[1]; always @ [ posedge clk 90 ] data _ R1 [2]=#1data _ r0 [2]; always@(Posedgeclk180 ) data_r1[3]=#1 data_r0[3]; //data_r2always@(posedge clk0) data_r2[0]=#1 data_r1[0]; always@(Posedgeclk0) data_r2[1]=#1 data_r1[1]; always@(Posedgeclk0) data_r2[2]=#1 data_r1[2]; always @ [ posedge clk 90 ] data _ R2 [3]=#1data _ R1 [3]; //data_r3always@(posedge clk0) data_r3[0]=#1 data_r2[0]; always@(Posedgeclk0) data_r3[1]=#1 data_r2[1]; always@(Posedgeclk0) data_r3[2]=#1 data_r2[2]; always@(Posedgeclk0) data_r3[3]=#1 data_r2[3]; 结束模块波形图
请参阅SerDes interface参考设计