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

相关推荐
bosins4 小时前
彻底解决 WSL 2.7+ 空闲自动关闭/内存回收导致 Docker 中断的问题
linux·docker·wsl·dashboard
LongRunning4 小时前
【Linux】H3网络(二)
linux
国际云,接待5 小时前
华为云 EVS 性能诊断:用 CES、ECS QoS 与 fio 定位 IOPS 和吞吐瓶颈
服务器
xx~t5 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t5 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
智恒百亿8 小时前
RTX 5090 八卡服务器 vs RTX PRO 6000 整机:AI 推理、微调与渲染选型部署指南
运维·服务器·rtx5090
ManageEngineITSM8 小时前
DevOps和ITIL是什么关系?是替代还是互补一文讲清
java·服务器·资产管理·变更管理
DYWorker0018 小时前
Linux驱动子系统:DMA-Buf —— Consumer和Provider(008)
linux·驱动开发
雯宝9 小时前
Linux 内核函数集
linux
码少女9 小时前
Linux--多路转接之select
java·服务器·数据库