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

在芯片设计中,常常有这样的应用场景。硬件给软件传递消息,软件通过polling的方式获取。在我们的案例中,我们约定,硬件每次都上送128bit的数据。
实际操作如下:
软件在内存中分配了一段内存空间,用于硬件写数据,软件不断读此段内存获取硬件上送的数据。
那么问题来了,硬件是如何知道这段内存地址的呢?
通常在硬件内部实现了至少两个寄存器字段:起始地址(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代表硬件下一个要写的地址)。

手机壳气密性检测设备的工作原理以及应用
研究人员设计了一款能够实时测量血小板强度的微流控装置
北京宝沃复活失败,申请破产清算
基于MSP430F413单片机和MFRC522芯片实现低功耗预付费水表的设计
腔镜手术机器人研发商术锐完成近3亿元B轮融资
IC设计:软硬件交互-polling方式
UART自动波特率识别程序设计方案
调节阀和控制阀的区分
iPod如何当做移动硬盘来用?
SCHURTER硕特高功率应用的安全网设计
世平集团所代理产线ADI针对DSC提出一系列解决方案
串口转WIFI模块
机器人和人工智能科技成为常态,会造成现有劳动力的失业吗?
消息 传滴滴亏损109亿 苹果春季发布会时间3月25日
Iphone5S/5C拆机秘密武器大曝光!
一款轻巧多模的无线充电鼠标雷柏M300S
德国对特斯拉触摸屏失灵问题进行调查
是德科技出席首届“全球5G 大会”并展示最新5G创新与合作成果
什么是Apache日志?Apache日志分析工具介绍
锤子M1L评测 好不好用