ZYNQ开发板-ZCU102-LED闪烁

为了点亮及闪烁ZYNQ开发板上的两个LED,废掉了国庆节第一天的整个上午。

开发板为ZCU102,初次使用,搞不清楚FPGA部分的时钟,查资料

ZYNQ开发板-ZCU102-LED闪烁

暂且就用一下125M的吧

开始写代码

一想,这是差分时钟,是不是得做点啥,差分转单端:

IBUFGDS i_ibufgds_adc_0     
(.I		(adc_0_dclk_p_in),
 .IB		(adc_0_dclk_n_in),
 .O		(sys_clk)    //单端信号时钟
);

 1秒闪一次吧,好算:

assign led = (cnt<28'd62_500_000) ? 2'b10 : 2'b01;

第一次使用集成的逻辑分析仪ILA,需要先配置IP核,很简单,然后例化:


ila_0 ila_instance (
	.clk(sys_clk), // input wire clk


	.probe0(sys_ret_p), // input wire [0:0]  probe0  
	.probe1(cnt), // input wire [0:0]  probe1 
	.probe2(led) // input wire [0:0]  probe2
);

完整的代码如下,有些注释可能不对,因为是从别的地方粘过来的 


module test_adc_clk(
input                       sys_ret_p,      //ZCU板子上的独立按键,按下是高电平
input						adc_0_dclk_p_in,//adc的差分时钟P端口
input						adc_0_dclk_n_in,//adc的差分时钟N端口
output                      [1:0] led
);
reg                        [28:0] cnt;
//wire						adc_0_clk_bufg;//adc的差分输出时钟,经过IBUFGDS后的单端信号时钟
wire                        sys_clk;
assign led = (cnt<28'd62_500_000) ? 2'b10 : 2'b01;
always@(posedge sys_clk or posedge sys_ret_p)begin
    if(sys_ret_p)
        cnt <= 28'd0;
    else if(cnt < 28'd125_000_000)
        cnt <= cnt + 1'b1;
    else
        cnt <= 28'd0;
end
//IBUFGDS是时钟信号专用的输入缓冲器,它是IBUFG的差分形式,当信号从一对差分全局时钟管脚输入时
//必须使用IBUFGDS作为全局输入缓冲,它支持LVDS的IO标准
IBUFGDS i_ibufgds_adc_0     
(.I		(adc_0_dclk_p_in),
 .IB		(adc_0_dclk_n_in),
 .O		(sys_clk)    //adc的差分输出时钟,经过IBUFGDS后的单端信号时钟
);


ila_0 ila_instance (
	.clk(sys_clk), // input wire clk


	.probe0(sys_ret_p), // input wire [0:0]  probe0  
	.probe1(cnt), // input wire [0:0]  probe1 
	.probe2(led) // input wire [0:0]  probe2
);
endmodule

最后终于闪了

ZYNQ开发板-ZCU102-LED闪烁

 

上一篇:Petalinux学习记录


下一篇:JavaScript单行代码,也就是代码片段