1.寄存器寫保護的需求
在軟件硬件交互的過程中,通常需要軟件(host)對特定地址的寄存器進行寫操作,告之硬件進行特定的處理流程,我們在《IC設計:軟硬件交互-polling》中提到的doorbell寄存器就屬于此類。
在使用PCIe SR-IOV能力時,對芯片硬件來說,有多個軟件(host),而doorbell寄存器與特定的host綁定,從安全角度考慮,我們期望doorbell寄存器只能被綁定的軟件(host)寫,而不能被其他host寫,不會因為其他host的誤寫操作導致進程出錯。
寄存器的寫保護指的是某些特殊的寄存器只能被指定的host寫更新,而不能被其他host更新。此處的寄存器可能是單個普通寄存器,也可能是多個寄存器組成的ram。
2.寄存器寫保護硬件實現(xiàn)
如圖設計中,多個host編號命名為func_id,且func_id編碼連續(xù);有多個doorbell,且doorbell以ram(db_data_mem)的形式呈現(xiàn),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號,數(shù)據(jù)包為{db_id,db_data}。
db_id2func_id_mem表示db_id與func_id的對應關系,地址為db_id,數(shù)據(jù)為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的寫操作會觸發(fā)db_id2func_id_mem的讀操作,以db_id作為讀地址讀出數(shù)據(jù)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寫操作時,寫數(shù)據(jù)必須包含db_id,這樣db_id會與func_id進行匹配,匹配通過才會真正去更新doorbell。db_id與func_id匹配不通過,則不會更新doorbell。而其他主機是不知道當前doorbell的地址(func_id)對應的db_id的,因此有效降低了其他主機誤寫doorbell的概率。
審核編輯:湯梓紅
-
寄存器
+關注
關注
31文章
5334瀏覽量
120219 -
IC設計
+關注
關注
38文章
1295瀏覽量
103908 -
硬件
+關注
關注
11文章
3311瀏覽量
66195 -
PCIe
+關注
關注
15文章
1234瀏覽量
82571
原文標題:
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論