有人可以帮我理解如何将5个IR分支中的每一个分配到十六进制数字吗?
R[2] ← Mem2[R[1] + 0x5] << 0x02;
R[3] ← R[2]+ Mem2[0x0A] + 0x01;
使用这两条指令,我们应该能够为名为IR&lt; ...&gt;的五个分支中的每一个分配十六进制数。我知道顶部的第一个分支是唯一一个与注册表直接相关的分支,而两个底部分支将具有常量值,因为它们与注册表无关。但是,你们可以帮助我或解释一下这种语法是如何工作的吗?
答案 0 :(得分:0)
图片中名为“IR”的块注册为输入(端口D)宽度为32位。因此,它的输出(端口Q和~Q)也是32位。
符号IR<N1..N2>
表示32位的一部分;例如IR<12..0>
用于编号为0,1,2,3,4,5,6,7,8,9,10,11,12的位;而IR<23..21>
表示“只取位21,22,23,24”。
因此,如果IR在某个时刻是二进制:00010010 00110100 01010110 01111000(位从头到头编号; 0x12345678用十六进制编号);它的部分是:
IR<31..24>
8位宽值0x12 = 00010010 - 它将进入控制电路。IR<23..21>
3位宽值0x1 = 001 - 它将阻止“mux B”,端口0和寄存器文件的右边部分(这是dst =目的地寄存器号)IR<20..18>
3位宽值0x5 = 101 - 它将阻止“mux B”,端口1(src1或src2)IR<17..15>
3位宽值0x0 = 000 - 它将阻止“mux B”,端口2(src1或src2)IR<14..13>
2位宽值0x2 = 10 - 阻止“C”IR<12..0>
13位宽值0x1678 = 10110 01111000 - 阻止“D”(这是IMM =立即值)IR<23..0>
是低位24位= 0x345678的副本 - 用于阻止“mux A”(在JMP命令的情况下)要解决您的任务,我们应该知道如何将命令编码到IR中以及该CPU的指令集是什么。这看起来非常简化MIPS或RISC,也可能是SPARC。