- 最简单的自定义IP封装
1.1实验任务
将PL端控制LED灯每隔1s进行闪烁的IP核进行简单的封装,然后与ARM A9处理器连接,A9处理器给该LED IP核提供clk和rst_n信号
1.2实验过程
首先将Zynq_Uart工程另存为,在此工程上修改,避免重复性工作。首先需要显示FCLK,并将频率设置为100MHz,双击Zynq模块
显示clk_rst_n信号
显示之后的效果如下
下面编写驱动PL端LED灯的代码,如下
- `timescale 1ns / 1ps
- module led(
- input clk, // 100MHz
- input rst_n,
- output reg[3:0] led
- );
- reg[31:0] cnt;
- always @(posedge clk, negedge rst_n) begin
- if(!rst_n)
- cnt <= 32'd0;
- else begin
- if(cnt == 32'd999_999_99)
- cnt <= 32'd0;
- else
- cnt <= cnt + 1'b1;
- end
- end
- //define led
- always @(posedge clk, negedge rst_n) begin
- if(!rst_n)
- led <= 4'b0;
- else if(cnt == 32'd499_999_99)
- led <= 4'b1111;
- else if(cnt == 32'd0)
- led <= 4'b0;
- else
- led <= led;
- end
- endmodule
该模块共三个信号,100MHz的clk,复位信号 rst_n,以及输出的led信号
代码没有错误后,进行封装
点击next
选择Package a specified directory,再点击next
定位到IP核对应的verilog文件,点击next
点击finish,此时会打开IP封装的工程界面
点击 Re-Package IP,成功后会弹出如下对话框,提示用户关闭IP核封装工程界面
点击Yes,关闭IP核封装工程界面。
回到工程界面,由于自定义的IP核的存放路径软件是不知道的,所以需要先在vivado软件中指定自定义IP核文件的路径,方法如下(软件为vivado 2018.3)
点击Setting
点击IP
点击+号,定位到自定义IP核文件目录
添加完成后,在Block Design中就可以添加自定义的led IP核了
添加后,连接clk与rst_n信号,效果如下
将led信号引出(Ctrl + T快捷键)
引出的信号,在属性窗口下可以修改属性
修改名称
下面是创建约束文件,约束引脚与对应的电平标准
下面是Generate Output Products(如果没有这一步,Running Multiple Blocks这个过程持续的时间会很长)
上述步骤完成后,就是running multiple blocks, 综合,布局布线,生成比特流文件,然后导出硬件,需要添加比特流文件
启动SDK,创建Application,
主程序如下
由于ARM与led IP核之间只有clk核rst_n之间的连接,所以两者之间是无法通信的,实验现象为,板子上PL端LED灯每间隔1s闪烁,PS端每间隔1s通过uart打印一串字符。