📄 alu.v
字号:
module ALU(A, B, S, M, CN, F, CO);
input[7:0] A;
input[7:0] B;
input[3:0] S;
input M;
input CN;
output[7:0] F;
output CO;
reg[7:0] F;
reg[8:0] MEDI;
reg CO;
always @(A, B, S, M, CN)
begin
//Logic Function
if(M)
case(S)
4'b0000: MEDI=~A;
4'b0001: MEDI=~(A|B);
4'b0010: MEDI=(~A)&B;
4'b0011: MEDI=9'b0;
4'b0100: MEDI=~(A&B);
4'b0101: MEDI=~B;
4'b0110: MEDI=A^B;
4'b0111: MEDI=A&~B;
4'b1000: MEDI=(~A)|B;
4'b1001: MEDI=~(A^B);
4'b1010: MEDI=B;
4'b1011: MEDI=A&B;
4'b1100: MEDI=9'b1;
4'b1101: MEDI=A|~B;
4'b1110: MEDI=A|B;
4'b1111: MEDI=A;
endcase
//arithmetic function
else if(~CN)
case(S)
4'b0000: MEDI=A;
4'b0001: MEDI=A|B;
4'b0010: MEDI=A|(~B);
4'b0011: MEDI=9'b0;
4'b0100: MEDI=A+(A&~B);
4'b0101: MEDI=(A|B)+(A&(~B));
4'b0110: MEDI=A-B;
4'b0111: MEDI=A|(~B);
4'b1000: MEDI=A+(A&B);
4'b1001: MEDI=A+B;
4'b1010: MEDI=(A|~B)+(A&B);
4'b1011: MEDI=A&B;
4'b1100: MEDI=A+A;
4'b1101: MEDI=(A|B)+A;
4'b1110: MEDI=(A|~B)+A;
4'b1111: MEDI=A;
endcase
else if(CN)
case(S)
4'b0000: MEDI=A+9'b1;
4'b0001: MEDI=(A|B)+9'b1;
4'b0010: MEDI=(A|B)+9'b1;
4'b0011: MEDI=9'b0;
4'b0100: MEDI=A+(A&~B)+9'b1;
4'b0101: MEDI=(A|B)+(A&~B)+9'b1;
4'b0110: MEDI=A-B-9'b1;
4'b0111: MEDI=(A|~B)-9'b1;
4'b1000: MEDI=A+(A&B)+9'b1;
4'b1001: MEDI=A+B+9'b1;
4'b1010: MEDI=(A|~B)+(A&B)+9'b1;
4'b1011: MEDI=(A&B)-9'b1;
4'b1100: MEDI=A+A;
4'b1101: MEDI=(A|B)+A+9'b1;
4'b1110: MEDI=(A|~B)+A+9'b1;
4'b1111: MEDI=A-9'b1;
endcase
{CO, F}=MEDI;
end
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -