Writing The Testbench
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 45 de 90.
Desafio
Agora precisamos testar se o half adder está funcionando corretamente. Adicione o código de test dentro do bloco initial.
Importante: Antes de adicionar o test, você deve alterar as portas do module para que o test possa funcionar corretamente.
O que fazer:
Etapa 1: Alterar as declarações das portas
- Altere
input a, bparareg a, b(use o ponto e vírgula) - Altere
output sum, carryparawire sum, carry(use o ponto e vírgula) - Remova completamente as portas do module (o module não deve ter
( ))
Etapa 2: Adicionar o código de test
- Adicione um bloco
initial begin - Dentro do bloco, adicione:
$display("a b | sum carry");
a = 0; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 0; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 0; #1 $display("%d %d | %d %d", a, b, sum, carry);
a = 1; b = 1; #1 $display("%d %d | %d %d", a, b, sum, carry);
- Adicione
$finish;para encerrar o test - Adicione
endpara fechar o bloco initial
Experimente você mesmo
module half_adder (
input a,
input b,
output sum,
output carry
);
assign sum = a ^ b;
assign carry = a & b;
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online