随笔分类 -  计算机基础

包含openMIPS、计算机原理、Linux、编译等计算机相关的基础话题。
MIPS32的DIV和DIVU实现(除法指令)
摘要:《自己动手写CPU》一书的7.11节到7.14节实现了DIV和DIVU指令。 书中通过“试商法”实现除法,并在原有的流水线结构之外另加了状态机进行计算。 照抄书上的实现方法需要另外添加个.v,我实在有点懒,不想在运算指令实现上再另外加个文件。 而且按照书上的实现,DIV和DIVU指令跟其他的运算指令 阅读全文

posted @ 2017-09-20 11:27 再见,列宁 阅读(5655) 评论(0) 推荐(0)

MIPS32的ADDI和ADDIU的实现要点(加法指令)
摘要:《自己动手写CPU》一书中对指令ADDI和ADDIU的实现方式是一样的。 对16位立即数imm,在执行加法指令之前都符号扩展成32位数(与符号扩展对应的是零扩展)。 这样看来ADDI和ADDIU指令都用于有符号数的加法,在指令集实现的时候没有任何区别。 如果是这种情况,那么ADDI和ADDIU都仅支 阅读全文

posted @ 2017-09-13 10:22 再见,列宁 阅读(12337) 评论(0) 推荐(1)

使用加法器实现减法
摘要:《自己动手写CPU》一书中,MIPS32的减法指令SUB和SUBU与加法指令一起实现。 书中的方法是(示例代码,不严谨): reg2_mux = (是减法指令) ? ( ~reg2 + 1 ) : reg2 ; result = reg1 + reg2_mux ; 对这个处理方法,书中将 ~reg2 阅读全文

posted @ 2017-09-12 14:12 再见,列宁 阅读(4106) 评论(0) 推荐(0)

算术右移verilog实现
摘要:32位算术右移操作的描述是将寄存器的32位数据右移,左侧移位后空出的bit位用bit[31]填充。 《自己动手写CPU》一书中,对于openMIPS算术右移指令SRA的verilog实现如下: shiftres[31:0] = ( {32{reg2_i[31]}} << ( 6'd32 - {1'b 阅读全文

posted @ 2017-09-08 17:31 再见,列宁 阅读(9137) 评论(0) 推荐(0)

导航