| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- module ALU(
- alu_out,
- instruction,
- inputA,
- inputB,
- clk,
- reset
- );
- //==== i/o definition ====
- output [7:0] alu_out;
- input [7:0] inputA,inputB;
- input [3:0] instruction;
- input clk,reset;
- //==== reg/wire definition ====
- reg [7:0] alu_out,X,reg_A,reg_B;
- wire [7:0] inputB_inv;
- reg [3:0] reg_ins;
- wire [7:0] sum;
- //==== sequential circuit ====
- always@( posedge clk or negedge reset ) begin
- if(~reset) begin
- alu_out <= 0;
- reg_A <= 0;
- reg_B <= 0;
- reg_ins <= 0;
- end
- else begin
- alu_out <= X;
- reg_A <= inputA;
- reg_B <= inputB;
- reg_ins <= instruction;
- end
- end
- assign inputB_inv = ~reg_B;
- always@( reg_A or reg_B or reg_ins or inputB_inv or sum ) begin
- case(reg_ins)
- 4'b0000: X = reg_A+reg_B;
- 4'b0001: X = reg_A-reg_B;
- 4'b0010: X = inputB_inv;
- 4'b0011: X = reg_A®_B;
- 4'b0100: X = reg_A|reg_B;
- default: X = reg_A^reg_B;
- endcase
- end
- endmodule
|