ZYNQ PS端最多可以分配四个时钟供给PL端使用,通过PS端供给PL使用的时钟,在最后添加约束文件时,只需要对功能I/O进行约束,
不需要再关注时钟约束的问题。
一个简单的例子:PS产生一个100MHz的时钟,供给PL使用。利用该时钟,使PL端两颗led闪烁
module led_tst( led_o ); output [1:0] led_o; reg [25:0] clk_cnt = 26'd0; reg [1:0] led_o_r = 2'd0; wire clk; always @(posedge clk)begin if(clk_cnt == 26'd49999999) begin clk_cnt <= 'd0; led_o_r <= ~led_o_r; end else begin clk_cnt <= clk_cnt + 1'b1; led_o_r <= led_o_r; end end system_wrapper led_wrapper ( .FCLK_CLK0_0(clk) ); assign led_o = led_o_r; endmodule
需要注意的是,时钟是由PS端产生的,PS端的ARM必须运行,才能供给PL时钟信号。直接将bit流文件下载到ZYNQ中,PS端不会工作。
因此,需要将bit流文件导入到SDK端。在SDK中新建一个empty prj 。最后将文件下载到ZYNQ中即可正常运行