В этой статье блога мы углубимся в мир тестирования цифровых схем и сосредоточимся конкретно на испытательном стенде полусумматора с использованием Verilog. Мы рассмотрим несколько методов и предоставим примеры кода для каждого. Итак, начнём!
Метод 1: базовый испытательный стенд
module half_adder_tb;
reg a, b;
wire sum, carry;
// Instantiate the module under test
half_adder uut(a, b, sum, carry);
initial begin
// Test case 1
#10 a = 0; b = 0;
#10 $display("Test Case 1: a = %b, b = %b, sum = %b, carry = %b", a, b, sum, carry);
// Test case 2
#10 a = 0; b = 1;
#10 $display("Test Case 2: a = %b, b = %b, sum = %b, carry = %b", a, b, sum, carry);
// Test case 3
#10 a = 1; b = 0;
#10 $display("Test Case 3: a = %b, b = %b, sum = %b, carry = %b", a, b, sum, carry);
// Test case 4
#10 a = 1; b = 1;
#10 $display("Test Case 4: a = %b, b = %b, sum = %b, carry = %b", a, b, sum, carry);
// End simulation
#10 $finish;
end
endmodule
В этом методе используется базовый испытательный стенд, который создает экземпляр модуля полусумматора и применяет различные входные комбинации. Выходные значения отображаются с помощью операторов $display
.
Метод 2: параметризованный испытательный стенд
module half_adder_tb;
reg a, b;
wire sum, carry;
// Instantiate the module under test
half_adder uut(a, b, sum, carry);
initial begin
integer i;
// Generate test cases using loops
for (i = 0; i < 4; i = i + 1) begin
a = i[1];
b = i[0];
#10 $display("Test Case %0d: a = %b, b = %b, sum = %b, carry = %b", i, a, b, sum, carry);
end
// End simulation
#10 $finish;
end
endmodule
В этом подходе используется параметризованный тестовый стенд, который динамически генерирует тестовые примеры с помощью циклов. Это обеспечивает гибкость в увеличении количества тестовых примеров без дублирования кода.
Метод 3. Тестовый стенд с файловым вводом-выводом
module half_adder_tb;
reg a, b;
wire sum, carry;
// Instantiate the module under test
half_adder uut(a, b, sum, carry);
initial begin
integer i;
reg [1:0] test_cases [0:3];
reg [3:0] file_data;
file file_input;
// Open test input file
file_input = $fopen("test_cases.txt", "r");
// Read test cases from file
for (i = 0; i < 4; i = i + 1) begin
$fscanf(file_input, "%b", file_data);
test_cases[i] = file_data;
end
// Close file
$fclose(file_input);
// Apply test cases
for (i = 0; i < 4; i = i + 1) begin
a = test_cases[i][1];
b = test_cases[i][0];
#10 $display("Test Case %0d: a = %b, b = %b, sum = %b, carry = %b", i, a, b, sum, carry);
end
// End simulation
#10 $finish;
end
endmodule
Этот метод демонстрирует тестовый стенд, который считывает тестовые примеры из файла (test_cases.txt
) с помощью операций ввода-вывода файла Verilog. Этот подход полезен при работе с большим количеством тестовых примеров или когда тестовые примеры необходимо создавать или изменять извне.