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直接使用即可。

相关推荐
jsons17 小时前
rocky8内网离线批量补丁(你之前搭建的架构,多台服务器首选,无订阅)
linux·运维·服务器
进击切图仔7 小时前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
Bomangedd7 小时前
NSK RA25BN 滚子直线导轨技术详解
运维·服务器·经验分享·规格说明书
阿拉斯攀登8 小时前
SPI 设备驱动开发
linux·驱动开发·嵌入式硬件·linux内核·嵌入式·linux驱动·spi
zhou135284822678 小时前
Windows 配置 WSL (Ubuntu) 环境完整指南
linux·windows·ubuntu
本尊是喵8 小时前
AutoDL--FileZilla--VS Code远程连接
运维·服务器
FREEDOM_X8 小时前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
天空'之城8 小时前
Linux 系统编程 17:零拷贝技术全解
linux·嵌入式·零拷贝技术全解
网络小白不怕黑9 小时前
11.虚拟机模拟路由器实验
linux·运维·服务器·网络
Mapleay9 小时前
Linux 内核编程基础
linux·运维·服务器