module alu8(cmd, a,b, c, czflag, f);
input [3:0] cmd;
input [7:0] a,b;
input c;
output [1:0] czflag;
output [7:0] f;
function [8:0] aluCore;
input [3:0] cmd;
input [7:0] a,b;
input c;
case (cmd)
4'h0: aluCore = a+b; // A+B
4'h1: aluCore = a+b+{7'b0,c}; // A+B+C
4'h2: aluCore = a-b; // A-B
4'h3: aluCore = a-b-{7'b0,c}; // A-B-C
4'h4: aluCore = a&b; // A and B
4'h5: aluCore = a|b; // A or B
4'h6: aluCore = a^b; // A xor B
4'h7: aluCore = ~a ; // not A
4'h8: aluCore = b; // b
default: aluCore = 9'bzzzzzzzzz; //reserved
endcase
endfunction
assign { czflag[1],f } = aluCore(cmd,a,b,c);
assign czflag[0] = (f==8'b0);
endmodule
/* instructionSet.h */
`define ADD 4'b0000
`define ADC 4'b0001
`define SUB 4'b0010
`define SUC 4'b0011
`define AND 4'b0100
`define OR 4'b0101
`define XOR 4'b0110
`define NOT 4'b0111
`define LD 4'b1000
`define B 4'b1011
`define FIN 4'b1111
ALU(alu8),マルチプレクサ他は
submodule.vに作成