当前位置: 首页 > news >正文

在vitis中bit位赋值如何优化到一拍完成

使用vitis实现硬件代码时,经常遇到不是整拍对齐的情况,比如:

ap_uint<128> a;

ap_uint<64>  b[10];

int                pad,pos;

/// 计算pos,pad .....

a(pos-1,0) = b[pad](63,pos);

a(63+pos,pos) = b[pad+1];

a(127,64+pos)=b[pad+2];

上述代码要3拍才能完成,如果做到1拍需要做以下优化

ap_uint<64>& get_one_pad(ap_uint<64>& data1,ap_uint<64>& data2,int pos)

{

        ap_uint<64>        data;

        data(63-pos,0) = data1(63,pos);

        data(63,64-pos)=data2(pos-1,0);

        

        return data;

}

///**************************************************************************************

ap_uint<128> a;

ap_uint<64>  b[10];

int                pad,pos;

/// 计算pos,pad .....

/// 1 这块代码的目的是将b中需要用到的数据copy出来,copy两份是为了后面赋值避免冲突

ap_uint<64>        x1[3];

ap_uint<64>        x2[3];

for( int i=0;i<2;i++)

{

        x1[i] = b[pad];

        x2[i] = b[pad];

}

/// 2这块代码的目的是将数据分别放到两个64bit区域

ap_uint<64>      d[2];

d[0] = get_one_pad(x1[0],x2[1],pos);

d[1] = get_one_pad(x1[1],x2[2],pos);

/// 3最终赋值

a(63,0) = d[0];

a(127,64)=d[1];

上述代码通过三步解决了每次数据操作都是整拍的问题,这样后续即使一拍无法完成,也可以流水打拍完成,比如a如果是ram,就可以方便的流水打拍了。

ps:在实现上述功能的时候发现vitis对函数inline是在verilog层次的,就是说它先把c代码编译成verilog在inline,这样导致本来函数在从c到verilog过程中可以优化的地方无法优化了。比如:get_one_pad函数如果inline就无法一拍完成了,这种情况也不能用pipeline,只能让编译器自动生成

http://www.lryc.cn/news/214475.html

相关文章:

  • 深度学习入门(二)之 简单手写数字识别实现
  • USART HMI串口屏+单片机通讯上手体验
  • Linux进程概念(1)
  • uniapp 查看安卓第三方插件抛出的异常
  • 美妆造型教培服务预约小程序的作用是什么
  • Pytorch常用函数
  • 如何利用python连接讯飞的星火大语言模型
  • 【Kubernetes 基本概念】Kubernetes 的架构和核心概念
  • Docker安装部署Elasticsearch+Kibana+IK分词器
  • PCL setCameraPosition 参数讲解
  • 有关YOLOV5在测试时,图片大小被调整的问题
  • 【机器学习】四、计算学习理论
  • spring解决后端显示时区的问题
  • 大模型冷思考:企业“可控”价值创造空间还有多少?
  • ctfshow-web入门37-52
  • 前端项目部署后,需要刷新页面才能看到更新内容
  • android 13 write javaBean error at *** 错误
  • Only fullscreen opaque activities can request orientation
  • 前端实验(一)单页面应用的创建
  • 数字人小灿:始于火山语音,发于 B 端百业
  • 蓝桥杯刷题
  • Go Metrics SDK Tag 校验性能优化实践
  • 二叉树问题——前/中/后/层遍历问题(递归与栈)
  • Vue3问题:如何实现级联菜单的数据懒加载?
  • STM32-电源管理(实现低功耗)
  • vue 自己捣鼓周日程日历组件
  • 【力扣】2127. (分类讨论 + 拓扑排序)参加会议的最多员工数
  • Flutter——最详细(Map)使用教程
  • vue的入门第一课
  • 已解决:conda找不到对应版本的cudnn如何解决?