PYNQ PL生成pwm ip核,axi-lite总线+PS实现呼吸灯彩灯

在这里插入图片描述
自己创建axi-lite总线,
给led rgbled输出接口
需要4+3*2=10个reg,作为输出

具体IP核内部
增加pwm.v

`define DELAY_BITS 6 


// 1 - wire DAC 
module pwm(
        input clk,
        input [7:0] pwm_val ,
        output reg pwm_pin
    );
 
    reg [`DELAY_BITS+7:0] runner =0 ;
 
    always @ (posedge clk)     runner <= runner+1 ;	
    always @ (posedge clk) pwm_pin <=  runner[7+`DELAY_BITS:`DELAY_BITS] < pwm_val ;
	
endmodule

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

例化,
reg因为pwm细粒度是256,reg只用了8bits
在这里插入图片描述

    pwm LED0( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg0[7:0] ) , .pwm_pin( LED[0] )  );
    pwm LED1( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg1[7:0] ) , .pwm_pin( LED[1] )  );
    pwm LED2( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg2[7:0] ) , .pwm_pin( LED[2] )  );
    pwm LED3( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg3[7:0] ) , .pwm_pin( LED[3] )  );
    pwm LEDrgb1_r( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg4[7:0] ) , .pwm_pin( LED_rgb[0] )  );
    pwm LEDrgb1_g( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg5[7:0] ) , .pwm_pin( LED_rgb[1] )  );
    pwm LEDrgb1_b( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg6[7:0] ) , .pwm_pin( LED_rgb[2] )  );
    pwm LEDrgb2_r( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg7[7:0] ) , .pwm_pin( LED_rgb[3] )  );
    pwm LEDrgb2_g( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg8[7:0] ) , .pwm_pin( LED_rgb[4] )  );
    pwm LEDrgb2_b( .clk( S_AXI_ACLK ) , .pwm_val( slv_reg9[7:0] ) , .pwm_pin( LED_rgb[5] )  );

输出bitstream

sdk




#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

#include "sleep.h"
void   set_led_pwn( unsigned int a ,unsigned int   b ){

	*(volatile unsigned int * )(0x43c00000 + (4*a))  = b ;
//	Xil_Out32 ( (0x43c00000 + (4*a) ) ,b ) ;
}
int main()
{

    unsigned char i ;
    unsigned char start_value=0 ;

    for(;;)
    {

       for(i=0;i<4;++i) set_led_pwn( i , start_value ) ;
       set_led_pwn( 4 , start_value) ;
       set_led_pwn( 5 , 0) ;
       set_led_pwn( 6 , 0) ;
       for(i=6;i<9;++i) set_led_pwn( i , start_value-i*32 ) ;
    usleep(200*1000);

    start_value += 32 ;

    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值