2020年4月2日 星期四

1 bit Full-Adder in Verilog (1bit 全加器)

1 bit Full-Adder  in Verilog (1bit 全加器)




//=================================
// Ch07 adder1.v
// 一位元全加法器 (assign 敘述與 if 敘述)

module FA (S_0, S_1,S_2,Co_0, Co_1,Co_2, A, B, Ci);

input  A, B, Ci; // A, B, Ci 一位元輸入
output S_0, S_1,S_2, Co_0, Co_1, Co_2; // S 加法和, Co 進位
reg    S_1, Co_1,S_2,Co_2; // 宣告為暫存器資料

// 布林方程式描述 
assign S_0 = A ^ B ^ Ci;
assign Co_0 = (A & B) | (A & Ci) | (B & Ci);

// 查真值表描述 
always@ (A or B or Ci) begin
  if      ({A,B,Ci} == 3'b000)    {Co_1,S_1} = 2'b00; 
  else if ({A,B,Ci} == 3'b001)    {Co_1,S_1} = 2'b01; 
  else if ({A,B,Ci} == 3'b010)    {Co_1,S_1} = 2'b01; 
  else if ({A,B,Ci} == 3'b011)    {Co_1,S_1} = 2'b10; 
  else if ({A,B,Ci} == 3'b100)    {Co_1,S_1} = 2'b01; 
  else if ({A,B,Ci} == 3'b101)    {Co_1,S_1} = 2'b10; 
  else if ({A,B,Ci} == 3'b110)    {Co_1,S_1} = 2'b10; 
  else                            {Co_1,S_1} = 2'b11; 
end

// 查真值表描述 
always@ (A or B or Ci) begin
case ({A,B,Ci})
3'b000 :  begin S_2 = 0; Co_2 = 0; end 
3'b001 :  begin S_2 = 1; Co_2 = 0; end 
3'b010 :  begin S_2 = 1; Co_2 = 0; end 
3'b011 :  begin S_2 = 0; Co_2 = 1; end 
3'b100 :  begin S_2 = 1; Co_2 = 0; end 
3'b101 :  begin S_2 = 0; Co_2 = 1; end 
3'b110 :  begin S_2 = 0; Co_2 = 1; end 
3'b111 :  begin S_2 = 1; Co_2 = 1; end
endcase
end

endmodule



////////////////////////////////////////////////////////////////////////////////

`timescale 100ns/1ps

module T;

//output
    wire S_0;
    wire S_1;
    wire S_2;
    
    wire Co_0;
    wire Co_1;
    wire Co_2;

//input    
    reg A = 1'b0;
    reg B = 1'b0;
    reg Ci = 1'b0;

// Instantiate the Unit Under Test (UUT)
    FA UUT (
        .S_0(S_0),
        .S_1(S_1),
        .S_2(S_2),
        .Co_0(Co_0),
        .Co_1(Co_1),
        .Co_2(Co_2),
        .A(A),
        .B(B),
        .Ci(Ci));

    integer i = 0;
    
    initial
    begin
      #220 // Final time:  800 ns
        $stop;
    end

initial begin
$monitor (S_0, S_1,S_2,Co_0,Co_1,Co_2, A, B, Ci);
for(i=1; i<=10; i=i+1)
begin
#20 {A,B,Ci}=i;
end

end
endmodule



沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...