前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zynq PL端调用PS端的时钟

Zynq PL端调用PS端的时钟

作者头像
黑马Amos
发布2023-03-21 13:41:04
1K0
发布2023-03-21 13:41:04
举报
文章被收录于专栏:李家杂货铺zi李家杂货铺zi

ZYNQ PS端最多可以分配4个时钟供给PL端使用,见下图。

 本文的目的:在XCZU21DR环境下,PS给PL提供一个100MHz的时钟,PL端根据此时钟产生1S信号,点亮LED。

添加&配置Zynq UltraScale+ MPSoc IP

双击该IP,在Clock Configuration -> Output Clocks -> Low Power Domain Clocks -> PL Fabric Clocks中设置见上图。

这个PL Fabric Clocks就是PS提供给PL的100MHz时钟。 最终将pl_clk0引出,得到下图。

 执行Generate Output Products和Create HDL Wrapper,最后修改顶层文件如下:

代码语言:javascript
复制
module design_1_wrapper(
  output led
);

wire pl_clk0_0;

design_1 design_1_i(
.pl_clk0_0(pl_clk0_0));

clk_div_N #(
  //.FREQ_WORD(32'd43)  //1S闪烁1次
  // .FREQ_WORD(32'd20) //2S闪烁1次
  .FREQ_WORD(32'd86)    //0.5S闪烁1次
) clk_div_N_inst(
  .clk_in(pl_clk0_0),
  .rst_n(1'b1),
  .clk_out(led)
);

endmodule

 clk_div_N内容如下:

代码语言:javascript
复制
//clk_in = 50MHz, 可任选
//clk_out = clk_inK/(2^32),32表示计数器位数
//频率控制字FREQ_WORD = clk_out(2^32)/clk_in, 32表示计数器位数
module clk_div_N #(
  parameter FREQ_WORD = 32'd1431655765 //3分频
) (
  input clk_in,
  input rst_n,
  output reg clk_out);
  
//--------------------------------------
reg [31:0] max_value;

always@(posedge clk_in or negedge rst_n)
begin
  if(!rst_n)
    max_value <= 1'b0;
  else
    max_value <= max_value + FREQ_WORD;
end

//--------------------------------------
always@(posedge clk_in or negedge rst_n)
begin
  if(!rst_n)
    clk_out <= 1'b0;
  else
  begin
    if(max_value < 32'h7FFF_FFFF)
    clk_out <= 1'b0;
  else
  clk_out <= 1'b1;
  end
end

endmodule

执行综合、实现后,完成led的引脚约束即可,见下图。

 代码经过上板测试通过。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加&配置Zynq UltraScale+ MPSoc IP
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档