Study/Digital System Design and Lab[Verilog]

#1-1 Design a full adder

얼죽아여뜨샤 2023. 10. 4. 01:13

*Full Adder

 

*Full Adder Design Using Verilog

FullAdder.v file

`timescale 1ns/100ps

module FullAdder (input x, y, Cin, output Cout, Sum);
	assign Sum = x ^ y ^ Cin;
    assign Cout = (x & y) | (x & Cin) | (y & Cin);
endmodule
  • timescale 1ns/100ps : time 프리시전으로 time step결정, 얼마나 쪼개서 할 것인지 설정
  • FullAdder : module의 이름 / 순서에 맞게 mapping하기(순서중요)
  • ^ : exclusive OR

FullAdderTester.v file

`timescale 1ns/100ps
module FullAdderTester;
	reg x = 0, y = 0, Cin = 0;
    wire Cout, Sum;
    parameter tlimit = 500;
    
    FullAdder FA1(x, y, Cin, Cout, Sum);
    
    always begin
    	if ($time >= tlimit) $stop; //for문처럼 반복되는 문
        else begin
        	#17;
            x = ~x;
            #13;
            Cin = ~Cin;
            #19;
            y = ~y;
        end
    end
    
    integer result; //txt파일에 저장 시작
    wire on;
    
    assign on = ($time < tlimit-1)? 1 : 0;
    
    always@(x, y, Cin)begin
    	if(on)begin 
        	result = $fopen("result.txt");
            $fdisplay(result, $time, "%d, %d, %d, %d, %d", x, y, Cin, Sum, Cout);
        end
        else
        	$fclose(result); //저장 끝
    end

endmodule
  • parameter tlimit = 500 : 500ns까지만 시뮬레이션하라
  • FullAdder : 앞의 module 불러오기
  • FA1 : test bench에서 사용하는 module이름
  • $time : 시간 가져오기 / 500ns 넘어가면 멈춰라
  • # : 이만큼의 시간 후에 다음 명령을 실행하라

*Full Adder Design Using Verilog - Result(wave)

 

*Full Adder Design Using Verilog - Result(text file)