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

相关推荐
鲜花飘飘扬18 分钟前
HTTP请求头中表示代理IP地址的属性及获取情况
网络协议·tcp/ip·http
hyf32663337 分钟前
泛程序:从零开始搭建稳定程序项目框架
运维·服务器·爬虫·百度·seo
哎呦喂我去去去43 分钟前
C#实现屏幕墙:同时监控多个电脑桌面(支持Windows、信创Linux、银河麒麟、统信UOS)
linux·windows·c#
NiceCloud喜云1 小时前
海外云服务器怎么选?适用场景、价格和避坑经验总结
运维·服务器
easy_coder2 小时前
Linux LVM 知识文档
linux·运维
小小的木头人3 小时前
Ubuntu 使用 udev + systemd + UUID 实现 USB 硬盘自动挂载
linux·运维·ubuntu
kaoa0004 小时前
Linux入门攻坚——84、网络虚拟化技术-1
linux·运维·服务器
RisunJan4 小时前
Linux命令-shutdown(安全关闭或重启系统)
linux·服务器·安全
2601_965798475 小时前
MTDb Movie & TV Database Script Setup, Caching, and SEO Guide
linux·服务器·数据库·php
我头发多我先学5 小时前
linux系统编程:初识进程
linux·运维·服务器