From 652cf24590651d42eafd7b3f35e8dbf3fb34bef7 Mon Sep 17 00:00:00 2001 From: unknown <1975697725@qq.com> Date: Mon, 22 Nov 2021 19:34:13 +0800 Subject: [PATCH] alu --- code/alu.py | 128 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 92 insertions(+), 36 deletions(-) diff --git a/code/alu.py b/code/alu.py index 6bdf879..10606ca 100644 --- a/code/alu.py +++ b/code/alu.py @@ -1,36 +1,92 @@ -import binandint -def alu(a,b,alu_ctrl): #a,b为两个运算数,alu_ctrl为控制信号,返回运算结果result与是否为0 zero - if alu_ctrl=='00000': - pass - elif alu_ctrl=='00001': - pass - elif alu_ctrl=='00010': - pass - elif alu_ctrl=='00011': - pass - elif alu_ctrl=='00100': - pass - elif alu_ctrl=='00101': - pass - elif alu_ctrl=='00110': - pass - elif alu_ctrl=='00111': - pass - elif alu_ctrl=='01000': - pass - elif alu_ctrl=='01001': - pass - elif alu_ctrl=='01010': - pass - elif alu_ctrl=='01011': - pass - elif alu_ctrl=='01100': - pass - elif alu_ctrl=='01101': - pass - elif alu_ctrl=='01110': - pass - elif alu_ctrl=='01111': - pass - else: - pass \ No newline at end of file +from binandint import * +def alu(a,b,alu_ctrl): #a,b为两个运算数,alu_ctrl为控制信号,返回运算结果result与是否为0 zero + signed = a-b + if alu_ctrl=='00000': #add,jalr + alu_result = a+b + elif alu_ctrl=='00001': #sub + alu_result = a-b + elif alu_ctrl=='00010': #or + alu_result = a|b + elif alu_ctrl=='00011': #and + alu_result = a&b + elif alu_ctrl=='00100': #slt + if(signed >= 0): + alu_result = 0 + else: + alu_result = 1 + elif alu_ctrl=='00101': #beq + if a == b: + alu_result = 1 + else: + alu_result = 0 + elif alu_ctrl=='00110': #bne + if a != b: + alu_result = 1 + else: + alu_result = 0 + elif alu_ctrl=='00111': #blt + if a=b: + alu_result = 1 + else: + alu_result = 0 + elif alu_ctrl=='01001': + if a<0: + ua = a+2**32 + else: + ua=a + if b<0: + ub = b+2**32 + else: + ub=b + if ua < ub: + alu_result = 1 + else: + alu_result = 0 + elif alu_ctrl=='01010': + if a<0: + ua = a+2**32 + else: + ua=a + if b<0: + ub = b+2**32 + else: + ub=b + if ua >= ub: + alu_result = 1 + else: + alu_result = 0 + elif alu_ctrl=='01011': + alu_result = 1 + elif alu_ctrl=='01100': + alu_result = a^b + elif alu_ctrl=='01101': + alu_result=a<>b + elif alu_ctrl=='10000': + alu_result=a>>b + else: + alu_result = 0 + return alu_result \ No newline at end of file