接手GEM5 model Ruby相关工作遇到的第一个issue:当使用cluster DMA时,如果地址不是64byte(cacheline size), write path写不进去。
查了资料和代码,发现原因很简单,我用的model里,使用的cache一致性协议为MI_example。
而MI_example对应的SLICC file里可以看到,read/write均为line address而不是physical address
但是model会对read path上做data_shift,也就是说,虽然读read path上使用了line address,但是会根据physical address将读取的数据shift到对应位置,因而支持了非64byte 对齐的address。
但是write path上则没有做非对齐处理(这是对 MI_example而言,扫了一眼MESI_Two_Level的SLICC,是支持physical address的,如果我们的model用了MESI而非MI_example的话,我这个问题大概就不会出现了)。
为了不动到model里的cache协议,我改动了如下图五个file来规避这个issue:
(主要就是将write path上的line address替换为physical address, 另外将相关的地址对齐检查assert去掉或者规避掉)
***************************************************
以下为一些截图和记录