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

相关推荐
大树8812 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush412 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52012 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz12 小时前
Maven依赖冲突
java·服务器·maven
treesforest14 小时前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
不会C语言的男孩14 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈14 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix
程序猿阿伟14 小时前
《Chrome离线扩展安装的底层逻辑与场景落地指南》
服务器·网络·chrome
凡人叶枫15 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++