Verilog Simulation 1
- Simulation
PFGA Verilog Code를 합성하여 SYNTHESIS (Netlist를 추출하고 Netlist를 Place & Routing) 하는데 시간이 오래걸리기 때문에, 먼저 Simulation을 해서 정확한 동작을 하는지 검증을 한다.
`timescale 1ns / 1ps
module AND_GATE(
input A,
input B,
output C
);
assign C = A&B;
endmodule
Simulation할 시 정상적으로 timing diagram이 생성되는 것을 확인할 수 있다.
- Simulation with Modelsim
베릴로그를 사용하여 디지털 로직을 설계할 시 그림을 그린다고 표현.
자기가 원하는 디지털 로직의 연결과 게이트를 추가하여 입, 출력을 연결해준다.
시뮬레이션은 실제로는 없지만 가상으로 신호를 연결하여 출력을 확인하는 과정.
신호에 어떤 값을 입력할지에 따라 결과값이 달라진다.
초기 설계 시 입력 신호가 없기때문에 해당 입력신호를 테스트벤치를 통해 넣어준다.
- Testbench
instance화 시켜줘야 한다. -> 객채화시켜주는 것.
initial문을 통해 초기 값을 설정해줄 수 있다.
(instance화 시킬 하위 모듈 이름) (instance시킨 모듈 이름) (.하위모듈(상위모듈) ...)
- OR GATE Simulation
`timescale 1ns / 1ps
module OR_GATE(
input wire A,
input wire B,
output wire C
);
assign C = A | B;
endmodule
`timescale 1ns / 1ps
module GATE_TB();
reg A;
reg B;
wire C;
OR_GATE ex_or_gate (.A(A), .B(B), .C(C));
initial begin
A = 0; B = 0; #500;
A = 0; B = 1; #500;
A = 1; B = 0; #500;
A = 1; B = 1; #500;
A = 0; B = 0;
end
endmodule
테스트벤치의 module OR_GATE_TB();에서 sensitivity list를 공백으로 비워두는 이유는 테스트벤치가 가장 상위 모듈이어야 하기 때문이다. sensitivity list에 포트가 존재한다는 것은 해당 모듈이 외부와 입, 출력 포트가 존재한다는 것이다.
베릴로그 코드에 맞게 정확히 출력이 나오는 것을 확인할 수 있다.
- AND GATE Simulation
`timescale 1ns / 1ps
module AND_GATE(
input A,
input B,
output C
);
assign C = A & B;
endmodule
`timescale 1ns / 1ps
module GATE_TB();
reg A;
reg B;
wire C;
AND_GATE ex_or_gate (.A(A), .B(B), .C(C));
initial begin
A = 0; B = 0; #500;
A = 0; B = 1; #500;
A = 1; B = 0; #500;
A = 1; B = 1; #500;
A = 0; B = 0;
end
endmodule
- NAND GATE Simulation
`timescale 1ns / 1ps
module NAND_GATE(
input A,
input B,
output C
);
assign C = ~(A & B);
endmodule
`timescale 1ns / 1ps
module GATE_TB();
reg A;
reg B;
wire C;
NAND_GATE ex_or_gate (.A(A), .B(B), .C(C));
initial begin
A = 0; B = 0; #500;
A = 0; B = 1; #500;
A = 1; B = 0; #500;
A = 1; B = 1; #500;
A = 0; B = 0;
end
endmodule