vivado hls的应用(第一个axi接口的ip)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

前面我们也用hls设计了一个ip。这个ip有两个输出信号,目的就是为了实现两个led的亮灭。整个ip是独立的ip,不受cpu的控制。这样的话,几乎系统加载之后,ip就可以自己独立工作了。但是缺点也是存在的,那就是不受控。所以今天,我们编写另外一个ip,那就是带总线接口的ip。这样就可以利用cpu对ip进行编程处理。

1、修改c文件

编写带axi接口的ip还是不复杂的。这里,我们继续用hls的方法设计ip。需要做的主要就是两部分,一部分是注意top函数中添加参数,这些参数就是未来的axi输入变量。还有一部分就是pragma添加,告诉工具这些变量都是通过axi-lite接口进来的。其他部分就是常规的c编程即可。

复制代码
#include <ap_cint.h>

void led_control(uint1* led, int total_cnt, int high_cnt)
{
#pragma HLS INTERFACE ap_none port=led
#pragma HLS INTERFACE s_axilite port=total_cnt
#pragma HLS INTERFACE s_axilite port=high_cnt
#pragma HLS INTERFACE ap_ctrl_none port=return

	 *led = 0;
      for(int i=0;i<total_cnt;i++)
      {
#pragma HLS LOOP_TRIPCOUNT avg=100000000 max=100000000 min=100000000
          if(i == high_cnt)
              *led = ~*led;
      }
}

2、代码分析

如上面代码所示,首先函数的开头多了两个变量,即total_cnt、high_cnt,这就是未来cpu可以传入的寄存器变量。如果是指针的话,一般就是写入变量了。其次,就是pragma部分出现了两个s_axilite声明,这说明函数入口的两个变量是通过总线传进来的。其他部分则没有区别。

3、综合、导出rtl、创建vivado工程、添加ip库

hls c代码准备好之后,接下来就是和上期一样,开始导出自己的ip,并且创建新的block design工程,验证一下刚刚创建的ip是否正确。

4、创建block design,自动连接

创建block design的时候,cpu+gpio是最小连接组合。这个时候,可以继续添加我们刚刚创建的ip,并且使用自动连接的方法进行处理。不出意外的话,就可以看到下面这样的截图,

通过观察发现,这一次axi总线上面有了两个slave设备,一个是led_control,还有一个是gpio,这就很有意义了。这意味着这个ip已经是一个受控的ip,而且led的闪烁频率是可以通过cpu设定去完成的。

5、驱动代码

hls生成ip的时候,也会同时把驱动代码准备好,到时候sdk直接使用即可。

相关推荐
广州灵眸科技有限公司11 小时前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
daad77711 小时前
wifi_note
运维·服务器·数据库
IT界的老黄牛11 小时前
Linux 压缩命令实战:tar、gzip、bzip2、xz、zstd 怎么选?一篇讲清楚
linux·运维·服务器
IT WorryFree11 小时前
飞塔防火墙与第三方设备进行IPSEC故障诊断期间,用户可能会观察到以下错误:
linux·服务器·网络
12345,catch a tiger11 小时前
虚拟机ubuntu安装Vmware Tools
linux·运维·ubuntu
✎ ﹏梦醒͜ღ҉繁华落℘12 小时前
Makefile -GNU和MakeFile关系(二)
服务器·gnu
凉、介12 小时前
别再把 PCIe 的 inbound/outbound、iATU 和 eDMA 混为一谈
linux·笔记·学习·嵌入式·pcie
辰风沐阳12 小时前
OpenClaw 安装教程(Ubuntu 24.04 Desktop)
linux·ubuntu
嘿嘿嘿x312 小时前
Linux记录过程
linux·开发语言
程序猿编码13 小时前
一个授予普通进程ROOT权限的Linux内核级后门:原理与实现深度解析
linux·运维·服务器·内核·root权限