原始声明:该原始教程是由信义电子技术(上海)有限公司(ALINX)创建的。
版权归我们公司所有。
如果需要重印,则需要授权并注明出处。
适用于板型号:AXU2CGA / AXU2CGB / AXU3EG / AXU4EV-E / AXU4EV-P / AXU5EV-E / AXU5EV-P / AXU9EG / AXU15EG实验Vivado项目目录为“ custom_pwm_ip / vivado”。
实验葡萄项目目录是“ custom_pwm_ip / vitis”。
Xilinx正式为每个人提供了许多IP内核。
您可以在Vivado的IPCatalog中查看这些IP内核。
用户在构建自己的系统时无法使用Xilinx官方免费IP内核。
在许多情况下,他们需要创建自己的用户IP内核。
,创建自己的IP内核有很多好处,例如系统设计定制;设计重用时,您可以将许可证添加到IP内核,并收费提供给他人;简化系统设计并缩短设计时间。
当使用ZYNQ系统设计IP核时,最常用的是使用AXI总线将PS与IP核的PL部分相连。
该实验将介绍如何在Vivado中构建AXI总线类型IP内核。
该IP内核用于生成PWM,并使用它控制开发板上的LED产生呼吸光效果。
FPGA工程师的工作内容以下是FPGA工程师的责任。
1. PWM简介我们经常使用PWM来控制LED,蜂鸣器等,并通过调整脉冲的占空比来调整LED的亮度。
我们在其他开发板上使用的pwm模块如下://////////////////////////////// // ///////////////////////////////////////// ////////////////////////////////////////// ///////////////////////////// Copyright(c)2017,ALINX(Shanghai)TechnologyCo。
,Ltd ////保留的所有权利////////可以不经限制地使用和分发此源文件////此版权声明不从文件中删除,并且任何/////衍生作品均包含原始版权//////免责声明/////////////// ///////////////////////////////////// ////////////// ===================================== ================================================== ================================================== ================================================== ================================================= =========================== //描述:pwmmodel // pwmoutperiod = frequency(pwm_out)*(2 ** N)/ frequency( clk); //// ============================================= =================================== // RevisionHistory:// DateByRevisionChangeDescription // ---- ------------------------- ------------------------- --------------------------// 2017/5 / 3meisq1.0Original // ************* ********** ******************************************** ********** ******* /`timescale1n s / 1psmoduleax_pwm#(参数N = 32 // pwmbitwidth)(inputclk,inputrst,input [N-1:0]期间,input [N-1:0] duty,outputpwm_out); reg [N-1:0] period_r; reg [N-1:0] duty_r; reg [N-1:0] period_cnt; regpwm_r; assignpwm_out = pwm_r; always @(posedgeclkorposedgerst)beginif(rst == 1)beginperiod_r = duty_r)pwm_r可以看到此PWM模块需要两个参数“周期”表示两个周期。
和“职责”;控制频率和占空比。
“期间”是步进值,是计数器需要在每个周期中相加的值。
占空比是占空比的值。
我们需要设计一些寄存器来控制这些参数。
在这里,我们需要使用AXI总线,而PS使用AXI总线来读取和写入寄存器。
2.创建一个Vivado项目并保存“ ps_hello”。
项目名称为“ custom_pwm_ip”的项目; 2.1创建自定义IP 1)单击菜单“工具->创建并打包IP ...”。
2)选择“下一步”。
3)选择以创建一个新的AXI4设备。
4)填写“ ax_pwm”。
在名称中,填写“ alinxpwm”在描述中,然后选择放置IP的合适位置5)以下参数可以指定接口类型,寄存器数等,这里无需修改,使用AXILiteSlave接口的4个寄存器。
6)单击“完成”,然后单击“完成”。
完成IP的创建。
7)在“ IP目录”中,您可以看到刚刚创建的IP。
8)此时的IP仅具有简单的寄存器读取和写入功能。
我们需要修改IP,选择IP,然后右键单击“ EditinIPPackager”, 9)这是一个弹出对话框,您可以填写项目名称和路径,默认情况下,单击“确定”。
10)Vivado打开一个新项目11)添加PWM功能的核心代码12)添加代码时,选择将代码复制到IP目录13)修改“ ax_pwm_v1_0.v”,添加一个pwm输出端口14)修改“ ax_pwm_v1_0.v”,将pwm端口的实例添加到实例“ ax_pwm_V1_0_S00_AXI”中。
15)修改“ ax_pwm_v1_0_s00_port”文件,添加文件“ Apwm_v1_0_S00_AXI”。
,此文件是AXI4LiteSlave的核心代码。
16)修改“ ax_pwm_