棋子 · 2023年10月08日

IC设计:寄存器写保护的以一种实现方式

1.寄存器写保护的需求  

在软件硬件交互的过程中,通常需要软件(host)对特定地址的寄存器进行写操作,告之硬件进行特定的处理流程,我们在《IC设计:软硬件交互-polling》中提到的doorbell寄存器就属于此类。

在使用PCIe SR-IOV能力时,对芯片硬件来说,有多个软件(host),而doorbell寄存器与特定的host绑定,从安全角度考虑,我们期望doorbell寄存器只能被绑定的软件(host)写,而不能被其他host写,不会因为其他host的误写操作导致进程出错。

寄存器的写保护指的是某些特殊的寄存器只能被指定的host写更新,而不能被其他host更新。此处的寄存器可能是单个普通寄存器,也可能是多个寄存器组成的ram。

2.寄存器写保护硬件实现   

image.png

如图设计中,多个host编号命名为func_id,且func_id编码连续;有多个doorbell,且doorbell以ram(db_data_mem)的形式呈现,db_data_mem的地址表示func_id号,这样,func_id与doorbell的关系就绑定了。

在如下的模块中:存在3个ram,db_id_func_mem、db_id2func_id_mem、db_data_mem、

db_id_func_mem是虚拟ram,用于cfg_csr产生ram访问接口,在图中画出也方便理解流程,地址表示func_id号,数据包为{db_id,db_data}。

db_id2func_id_mem表示db_id与func_id的对应关系,地址为db_id,数据为func_id,db_id2func_id_mem的内容需要软件提前配置好。

db_data_mem是目标ram,地址表示func_id号,data表示db_data内容。

配置模块cfg_csr对db_id_func_mem的写访问信号线包含:wdata、wen、waddr等信号,其中wdata为{db_id,db_data},waddr表示的是func_id。

对db_id_func_mem的写操作会触发db_id2func_id_mem的读操作,以db_id作为读地址读出数据func_id。

写访问信号进过打拍对齐后,将wr_addr_dly与db_id_func_mem读出的func_id进行比较,如果相等则证明写操作正确,db_data会被写入到db_data_mem。如果不相等,则不会对db_data_mem进行写操作。

3.为什么此种设计能够达到写保护的效果呢?   

在这里,每个主机都知道自己的db_id,以及doorbell的地址(func_id),而不知道其他主机的db_id和doorbell的地址。主机在进行doorbell写操作时,写数据必须包含db_id,这样db_id会与func_id进行匹配,匹配通过才会真正去更新doorbell。db_id与func_id匹配不通过,则不会更新doorbell。而其他主机是不知道当前doorbell的地址(func_id)对应的db_id的,因此有效降低了其他主机误写doorbell的概率。

作者:IC小鸽
文章来源:IC的世界

推荐阅读

更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
17687
内容数
1281
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息