设计一个8位的ALU(算术逻辑单元),该单元具有两个输入数据a,b和一个输入操作符Oper及输出数据c_out, sum,并且还具有下表所示的功能。

设计代码::

module adder(a,b,oper,sum,out);
input a,b,oper;
output sum,out;
wire [7:0] a,b;
wire [2:0] oper;
reg  [7:0] sum;
reg out;

parameter Add=3'b000;
parameter Substract=3'b001;
parameter Substract_a=3'b010;
parameter Or=3'b011;
parameter And=3'b100;
parameter Xor=3'b101;
parameter Xnor=3'b110;

	always@(oper,a,b)
	
		case(oper)
		
			Add:{out,sum}=a+b;
			Substract:{out,sum}=a-b;
			Substract_a:{out,sum}=b-a;
			Or:sum=a|b;
			And:sum=a&b;
			Xor:sum=a^b;
			Xnor:sum=a~^b;
			
			default:sum=8'bx;
		endcase
endmodule

测试部分:

module adder_tb;
reg [7:0] a,b;
reg [2:0] oper;
wire out;
wire [7:0] sum;

adder U1 (
.a(a),
.b(b),
.oper(oper),
.out(out),
.sum(sum));

always #20 a=a+1'b1;

initial

  begin
  a=8'b00000010;
  b=8'b00001000;

  #20 oper=3'b000;
  #20 oper=3'b001;
  #20 oper=3'b010;
  #20 oper=3'b011;
  #20 oper=3'b100;
  #20 oper=3'b101;
  #20 oper=3'b110;
  #20 oper=3'b111;
  #2000 $finish;
  end
endmodule

你可能感兴趣的:(Verilog,学习日记,fpga开发,verilog,硬件工程)