0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZYNQ系列开发板:PS控制PL产生需要的PWM波

电子设计 来源:CSDN 作者:ChuanjieZhu 2020-12-23 11:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这一节我们探索基于AXI总线的设计,来看一看ZYNQ系列开发板的独特优势,PS可以控制PL产生定制化的行为,而不需要去动硬件代码。

这次实验是产生频率和占空比可调的PWM(Pulse Width Modulation)信号,调用8次,产生8路PWM波,并用这些信号去控制8路LED灯,观察实验效果。后面会做一个比较。

用的板子是zc702。

新建一个工程,命名为PWM_AXI_Lite

创建基于AXI总线的PWM波IP

IP设计为一个寄存器负责控制频率,一个寄存器负责控制占空比。

创建一个IP核,tools-->Create and Package ,这里需要16个寄存器,创建方法见系列(六)、系列(七),这里命名为PWM_AXI_Lite。

在IP核工程里,新建一个PWM模块文件,这里占空比设计的比较糙,直接就用一个计数值代替功能,后面的软件设计要注意:

module PWM(
input clk,
input rst_n,
input cnt_set,
input fre_set,
output pwm_o
);

wire[31:0] cnt_set;
wire[31:0] fre_set;
reg [31:0] fre_cnt;

always @(posedge clk) begin
if(!rst_n) begin
fre_cnt end
else begin
if(fre_cnt fre_cnt else
fre_cnt end
end

assign pwm_o=(cnt_set>fre_cnt);
endmodule

在自动产生的实例文件里,添加端口信号和自定义功能,后面要约束到LED上:

o4YBAF9uHN2AXueaAAAee8p20ys261.png


o4YBAF9uHN6AdHWMAABHkC0jICo966.png

自定义的功能就是一个寄存器控制频率(fre_set),一个寄存器控制占空比(cnt_set):
// Add user logic here
PWM PWM0(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg1),
.fre_set(slv_reg0),
.pwm_o(PWM_o[0])
);

PWM PWM1(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg3),
.fre_set(slv_reg2),
.pwm_o(PWM_o[1])
);

PWM PWM2(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg5),
.fre_set(slv_reg4),
.pwm_o(PWM_o[2])
);

PWM PWM3(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg7),
.fre_set(slv_reg6),
.pwm_o(PWM_o[3])
);
PWM PWM4(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg9),
.fre_set(slv_reg8),
.pwm_o(PWM_o[4])
);
PWM PWM5(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg11),
.fre_set(slv_reg10),
.pwm_o(PWM_o[5])
);
PWM PWM6(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg13),
.fre_set(slv_reg12),
.pwm_o(PWM_o[6])
);

PWM PWM7(
.clk(S_AXI_ACLK),
.rst_n(S_AXI_ARESETN),
.cnt_set(slv_reg15),
.fre_set(slv_reg14),
.pwm_o(PWM_o[7])
);
// User logic ends

在顶层模块添加好用户信号,一个是端口里的,一个是调用里的:

pIYBAF9uHN-AD0k0AAA8JBRcnPY181.png


o4YBAF9uHOGAVAiuAACfxdJpB_8885.png

修改完后重新打包好。

回到原先建的工程,将这个IP添加到IP库里,然后Create Block Design,添加ZYNQ核和PWM_AXI_Lite,为了观察PWM波信号,这里又添加了一个ILA(为了简化,可以去掉),配置如下:

o4YBAF9uHOOAaN7KAAD8pWVGi9o607.png


pIYBAF9uHOWAfQOIAADMoJSJWJY039.png

连接CLK 和 FCLK_CLK0 ,连接 Probe0 和 PWM_o,最后创建的系统如下:

o4YBAF9uHOeAMBx7AAFRaOZ6LCM920.png

添加约束文件,将8路PWM波绑定到8个LED上:
#GPIO PMOD1
set_property PACKAGE_PIN E15 [get_ports {PWM_o[7]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[7]}]
set_property PACKAGE_PIN D15 [get_ports {PWM_o[6]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[6]}]
set_property PACKAGE_PIN W17 [get_ports {PWM_o[5]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[5]}]
set_property PACKAGE_PIN W5 [get_ports {PWM_o[4]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[4]}]
#GPIO PMOD2
set_property PACKAGE_PIN V7 [get_ports {PWM_o[3]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[3]}]
set_property PACKAGE_PIN W10 [get_ports {PWM_o[2]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[2]}]
set_property PACKAGE_PIN P18 [get_ports {PWM_o[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[1]}]
set_property PACKAGE_PIN P17 [get_ports {PWM_o[0]}]
set_property IOSTANDARD LVCMOS25 [get_ports {PWM_o[0]}]

一系列常规操作,生成比特流文件后,Lanch到SDK。

SDK部分设计
在BSP包里找到xparameter.h文件:

pIYBAF9uHOiAGqF6AAAhWRFEXPE751.png

在xparameters.h文件里找到系统为我们的PWM IP配置的地址,待会我们要操作它的寄存器:

打开xparameters.h文件,Ctrl+F:

pIYBAF9uHOqAfXYRAAE0fLqXvXs100.png

这个基地址就是我们的寄存器0的地址,然后我们将各路PWM波的频率和占空比写入:
#include
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h"
#include "xil_types.h"

int main(){

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+4,30000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+8,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+12,20000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+16,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+20,10000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+24,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+28,8000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+32,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+36,6000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+40,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+44,4000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+48,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+52,2000000);

Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+56,40000000);
Xil_Out32(XPAR_PWM_AXI_LITE_V1_0_0_BASEADDR+60,100000);

return 0;
}

板子上电,然后Program FPGA,debug as后,在vivado里会自动打开调试界面,触发后能看到8路波形,在板子上我们可以看到LED灯依次闪烁!

总结:

这里我们达到了led依次闪烁的效果,如同系列(六)达到的效果,但是这里有本质的区别,系列(六)需要CPU一直发送指令控制LED灯,而这次试验CPU写入频率和占空比后,现在8路PWM波自己工作,是PL完成的,不需要CPU发命令,CPU可以去干其他事情。这就是SOPC的优势!
编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1656

    文章

    22305

    浏览量

    630844
  • 寄存器
    +关注

    关注

    31

    文章

    5590

    浏览量

    129178
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5850

    浏览量

    223990
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探索 Kunlun Pi | 基于匠芯创D13x系列开发板分享(二)

    探索 Kunlun Pi | 基于匠芯创D13x系列开发板分享(二)
    的头像 发表于 11-18 18:11 1230次阅读
    探索 Kunlun Pi | 基于匠芯创D13x<b class='flag-5'>系列</b><b class='flag-5'>开发板</b>分享(二)

    ZYNQ PSPL数据交互方式

    ZYNQ SoC 的 PS (Processing System) 和 PL (Programmable Logic) 之间的数据交互是系统设计的核心。
    的头像 发表于 10-15 10:33 578次阅读
    <b class='flag-5'>ZYNQ</b> <b class='flag-5'>PS</b>与<b class='flag-5'>PL</b>数据交互方式

    fpga开发板 璞致ZYNQ 7000 系列之 PZ7035/PZ7045/PZ7100-FH 核心开发板用户手册

    本文介绍了Xilinx Zynq-7000系列可扩展处理平台及其开发板应用。Zynq-7000采用双核ARM Cortex-A9处理器与28nm FPGA架构,支持高性能嵌入式
    的头像 发表于 09-15 15:54 6002次阅读
    fpga<b class='flag-5'>开发板</b> 璞致<b class='flag-5'>ZYNQ</b> 7000 <b class='flag-5'>系列</b>之 PZ7035/PZ7045/PZ7100-FH 核心<b class='flag-5'>板</b>与<b class='flag-5'>开发板</b>用户手册

    瑞芯微RK3506开发板PWM输入捕获驱动调试记录

    本文演示PWM输入信号采集,基于触觉智能RK3506开发板,搭载3核Cortex-A7+Cortex-M0多核异构处理器,支持2路CANFD,5路串口,RGB、MIPI、音频、USB2.0OTG等
    的头像 发表于 09-08 13:48 1000次阅读
    瑞芯微RK3506<b class='flag-5'>开发板</b><b class='flag-5'>PWM</b>输入捕获驱动调试记录

    CW32L011电机驱动电机控制开发板-硬件1

    CW32L011电机驱动电机控制开发板-硬件介绍 后面有软件分析
    的头像 发表于 08-12 14:20 3649次阅读
    CW32L011电机驱动电机<b class='flag-5'>控制</b><b class='flag-5'>开发板</b>-硬件1

    【Milk-V Duo S 开发板免费体验】测试舵机

    MG90S是不能控制转动的角度,因此它的占空比是用来控制舵机转动的速度和方向。 二、配置&实现 基于wiringX实现对Milk-V Duo S 开发板pwm输出。 wiri
    发表于 08-09 22:46

    ESP32开发板元件资料

    ESP32开发板元件
    发表于 07-21 14:47 14次下载

    ALINX AMD RFSoC射频开发板选型指南

    ALINX 作为 FPGA 开发板领域领先供应商,RFSoC 系列开发板精准定位于雷达通信、5G 基站、卫星通信、测试测量等对性能要求严苛的高端射频应用。
    的头像 发表于 07-11 10:03 1286次阅读
    ALINX AMD RFSoC射频<b class='flag-5'>开发板</b>选型指南

    有ARM,NPU,FPGA三种核心的开发板 — 米尔安路飞龙派开发板

    ,是A股首家专注于FPGA业务的上市公司。YM90X开发板用的就是安路的SALDRAGON1(飞龙1,以下简称DR1)系列FPSoC。FPSoC就是将ARM、NPU和
    的头像 发表于 06-13 08:03 1408次阅读
    有ARM,NPU,FPGA三种核心的<b class='flag-5'>开发板</b> — 米尔安路飞龙派<b class='flag-5'>开发板</b>

    【新品】远距离图传数传模块开发板、蓝牙模块开发板、无线模块开发板

    新品上市图传数传模块开发板蓝牙模块开发板国产无线模块开发板部分型号参与送样文末了解详情↓↓↓EWT611-900NW20S远距离图传数传模块开发板EWT611-900NW20S是一款入
    的头像 发表于 06-12 19:33 927次阅读
    【新品】远距离图传数传模块<b class='flag-5'>开发板</b>、蓝牙模块<b class='flag-5'>开发板</b>、无线模块<b class='flag-5'>开发板</b>

    正点原子Z15I ZYNQ 开发板资料发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

    正点原子Z15I ZYNQ 开发板资料发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富! 正点原子Z15I ZYNQ开发板,核心
    发表于 05-30 16:59

    正点原子Z20 ZYNQ 开发板发布!板载FMC LPC、LVDS LCD和WIFI&amp;蓝牙等接口,资料丰富!

    正点原子Z20 ZYNQ 开发板发布!板载FMC LPC、LVDS LCD和WIFI&amp;蓝牙等接口,资料丰富! 正点原子新品Z20 ZYNQ开发板来啦!核心
    发表于 05-30 16:55

    LTC3886输出PWM异常的原因?

    稳定下来,谢谢。 图1是OUT0的PWM,图2是OUT1的,图3是这部分的原理图,参考了DC2155A开发板
    发表于 04-17 06:59

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介本案例是在小凌派-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。例程将创建一个任务,每隔5秒将PWM0~10依
    的头像 发表于 04-09 08:59 2136次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口<b class='flag-5'>控制</b><b class='flag-5'>PWM</b>外设

    用TMS2812开发板通过spi来控制ADS1299开发板的采集,波形非常紊乱是为什么?

    我用的是贵公司提供的ADS1299开发板,用信号发生器产生的正弦信号源作为输入信号,用TMS2812开发板通过spi来控制ADS1299开发板
    发表于 01-08 07:52