首页 技术 正文
技术 2022年11月18日
0 收藏 405 点赞 4,394 浏览 1813 个字

https://mp.weixin.qq.com/s/0D_NaeBEZX5LBQRdCz2seQ  介绍解码单个信号逻辑的实现。  1. 单个信号 每个指令对应了一组信号,每个信号对应了一个解码逻辑。 如BNE指令对应的信号如下:​Rocket – decode – 解码单个信号​ 各个信号的含义如下:​Rocket – decode – 解码单个信号​ 每个信号都是一个BitPat,位宽不定,并非只有一位:​Rocket – decode – 解码单个信号​ 事实上是每个信号的每一位对应了一个解码逻辑,每一次只解出一位。 2. generator 生成解码逻辑的代码(generator)定义于DecodeLogic对象中,如下(已做重构):​Rocket – decode – 解码单个信号​ 1) addr即是inst,也就是指令本身;2) default为默认值;3) 调用term方法把default转换为项(Term类的实例,如最小项或最大项): val dTerm = term(default)4) 把映射表mapping解为一组keys和一组values:val (keys, values) = mapping.unzip5) 分别求出keys和values的最大宽度:​Rocket – decode – 解码单个信号​6) 把keys和values转变成为Term:​Rocket – decode – 解码单个信号​ 7) 检查kTerms是否存在重叠的情况,即各个指令的编码是否存在重叠的情况:​Rocket – decode – 解码单个信号​ 执行示例如下:​Rocket – decode – 解码单个信号​​Rocket – decode – 解码单个信号​ intersects实现如下:​Rocket – decode – 解码单个信号​ (value ^ x.value) &~ mask &~ x.mask 可以转换为更容易理解的形式:(value ^ x.value) & (~mask) & (~x.mask)a. (~mask) & (~x.mask)意为:this和x共同的变量;b. (value ^ x.value) & (~mask) & (~x.mask)意为:this和x共同的变量值都相同; 8) 逐个解出信号value的每一位:(0 until vMaxWidth).map(…),然后组合成为所对应的信号:Cat(…) 因为前者LSB在前,后者MSB在前,所以需要使用reverse逆序。  3. 解码单个位 先提一下项(Term)的mask中为1的位对应的变量为忽略(dont care)的变量,其对应的位在value中的值为0。mask中为0的位对应的变量为项(最大项、最小项)中包含的变量,其对应的位在value中的值可以为0或1。 如由四个变量(A/B/C/D)组成的项AB,则AB对应的mask位为0,CD对应的mask位为1。 生成解码单个位的逻辑的代码如下:​Rocket – decode – 解码单个信号​ 1) 取出最小项 ​Rocket – decode – 解码单个信号​ k对应的为key,即指令编码;t对应的为要解码的信号; mint即minTerms,即信号的第i位为1的key的集合,也就是指令的集合。  2) 取出最大项 ​Rocket – decode – 解码单个信号​ maxt即maxTerms,即信号的第i为为0的key的集合,也是指令的集合。 之所以称为maxTerms,是因为其对应的值为0,与minTerms对应的值1相反。根据反演律亦即德摩根定律,最小项取反即为最大项。 3) 取出无关项 ​Rocket – decode – 解码单个信号​ mask为1的变量为无关项。  4) 根据默认值选择要参与解码的项 译码的结果有三种:a. 0b. 1c. x/dc,不关心 默认值为其中一种,则只需要把 要解码的指令 到 另外两种解码结果的指令集合 中查找即可。 a. 默认值为不关心:((dTerm.mask >> i) & 1) != 0 使用minTerms和maxTerms进行查找:​Rocket – decode – 解码单个信号​ SimplifyDC使用类似卡诺图化简的方法进行化简,返回Seq[Term]。logic中生成逐个比较并返回的逻辑。 b. 默认值为0:val dBit = (dTerm.value.toInt >> i) & 1 默认值dBit=0,使用minTerms和dc进行查找:​Rocket – decode – 解码单个信号​ bit为查找结果,找到为1,找不到为0,即默认值。与译码结果一致。 c. 默认值为1:val dBit = (dTerm.value.toInt >> i) & 1 默认值dBit=1, 使用maxTerms和dc进行查找:​Rocket – decode – 解码单个信号​bit为查找结果,找到为1,找不到为0。与译码结果相反,需要取反。 4. logic ​Rocket – decode – 解码单个信号​ 把addr与terms中的所有项逐个比对,返回比对结果。  5. term ​Rocket – decode – 解码单个信号​ term方法把BitPat,转换为Term。 a. Term的值即为BitPat的值;b. Term的mask为BitPat的mask取反; mask补码 = 2^n – mask = ~mask + 1即:~mask = 2^n – mask – 1 = 2^n – (mask + 1)   

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,736
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,487
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,127
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,289