S_tb
и V_tb
- это ожидаемые выходные данные, которые определяются модулем проектирования, который в данном случае является "машиной состояний".Испытательный стенд охватывает дизайн, он служит стимулом для вашего дизайна.В этом случае вы будете применять входные данные, такие как
initial
begin
rstn_tb = 0; //assuming an active low reset
clk_tb = 0;
#10 X_tb = 0;
end
always
#5 clk_tb = ~clk_tb; //generates a clock having a frequency of 100MHz
. Вышеуказанные входные данные передаются на модуль состояния машины, и в ответ на это модуль состояния машины генерирует некоторый результат, который принимается в портах S_tb
& V_tb
.
Кроме того, при создании экземпляра модуля лучше использовать соглашение об именах точек, например
module half_add(a,b,sum,carry); //half adder, partially written
input a,b;
output sum,carry;
//logic
endmodule
module full_add(a,b,cin,sum,carry)
input a,b,cin;
output sum,carry;
//wires are not declared
//instantiating half_add
half_add h1(.a(w1),
.b(w2),
.sum(sum1),
.carry(carry1)
);
half_add h2(
//similar call as h1 instance
);
endmodule
Приведенный выше тип экземпляра позволяет избежать ошибок, если я создаю экземпляр модуля, как показано ниже.
half_add h1(w1,
w2,
sum1,
carry1
);
Здесь порты подключены в зависимости от положения, и при написании этого сообщения можно ошибиться, как и случайно, можно написать
half_add h1(w1,
w2,
carry1,
sum1
);
Это приведет к подключению carry1
кпорт суммы модуля половинного сумматора, что приводит к ошибочному выводу.Поэтому я предлагаю вам избегать такого вызова экземпляров.Я думаю, что это может быть причиной ошибки.