全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > EDA/IC设计 >

IC设计:软硬件交互-polling方式

时间:2023-09-26 14:22

人气:

作者:admin

标签: 交互  设计  软硬件  -pollin 

导读:IC设计:软硬件交互-polling方式-在芯片设计中,常常有这样的应用场景。硬件给软件传递消息,软件通过polling的方式获取。在我们的案例中,我们约定,硬件每次都上送128bit的数据。...

image.png

芯片设计中,常常有这样的应用场景。硬件给软件传递消息,软件通过polling的方式获取。在我们的案例中,我们约定,硬件每次都上送128bit的数据。

实际操作如下:

软件在内存中分配了一段内存空间,用于硬件写数据,软件不断读此段内存获取硬件上送的数据。

image.png
那么问题来了,硬件是如何知道这段内存地址的呢?

通常在硬件内部实现了至少两个寄存器字段:起始地址(0x10000)和length 字段。

这两个字段说明了内存空间的位置和大小。软件和硬件两哥们商量好:硬件这从起始地址开始写数据,软件从起始地址开始读数据,硬件写数据占用内存空间,软件读数据释放内存空间。

硬件占用,软件释放,硬件写到最后一个内存地址时,则翻转跳转到起始地址,形成buffer ring,可以用少量的内存空间实现大量的数据传输。

那么又有个问题来了,硬件是如何知道某段地址空间被软件释放了呢?

其实在硬件内部还需要实现一个寄存器(我们称之为doorbell),由软件负责写寄存器,写入软件下一个要读的消息地址序号,硬件比较之前的地址序号和当前的地址序号可以得知软件释放了多大的内存空间。

那么问题来了,软件是如何知道当前的内存中存在有效数据?

软件通过polling(不断询问)的方式不断访问此段内存空间,它是如何知道当前的地址存在有效数据的呢?

其实我们在128bit的消息中还定义了一个flag标志位,软件自己也维护了一个sw_flag标识位。

软件初始化流程中,首先将已分配的内存空间初始化为0,将sw_flag初始化为1,将硬件hw_flag初始化为1。

每完成一轮地址访问,软件将sw_flag翻转一次,硬件将hw_flag翻转一次。软件每次读内存,都会将消息字段中flag与sw_flag进行比较,如果相等,则表示此消息是硬件上送的有效消息,此时读地址rd_ptr加1(为了简化说明,我们以rd_ptr代表软件下一个要读的地址,wr_ptr代表硬件下一个要写的地址)。

image.png

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信