Digamos que estamos tentando escrever um código de testbench Verilog/SystemVerilog chamado SC_TB para o módulo sample_code
. Existe uma maneira mais prática de ver o que reg B
e wire Cw
está fazendo no testbench, sem criar uma porta para eles?
module sample_code(
input A,
output Z
);
reg B;
wire Cw;
*stuff happens in this code*
endmodule
///código do testbench
module SC_TB();
reg A;
wire Z;
sample_code SCInst(
.A(A),
.Z(Z)
);
initial begin
A=0
#x a=value;
end
initial begin
$monitor(A,Z)
end
Atualmente, para ver o que "reg B" e "wire Cw" estão fazendo, eu criaria portas para eles e incluiria essas portas no meu código de testbench. Para os wires (Cw) declarados internamente no sample_code, eu os comentaria e criaria uma porta de wire de saída com um nome semelhante. Para reg (reg B) declarado internamente no sample_code, eu também criaria uma porta de wire de saída e atribuiria o reg interno a essa porta de wire. Meu código e meu código de testbench com base no sample_code e SC_TB acabam ficando assim.
module sample_code(
input A,
output Z,
output wire Cw,
output wire Bw
);
reg B;
//wire Cw;
assign Bw = B;
*stuff happens in this code*
endmodule
///código do testbench
module SC_TB();
reg A;
wire Z;
wire Cw;
wire Bw;
sample_code SCInst(
.A(A),
.Z(Z),
.Cw(Cw),
.Bw(Bw)
);
initial begin
A=0
#x a=value;
end
initial begin
$monitor(A,Z,Cw,Bw) //it doesnt have to be "monitor", "$display" or just the timing diagram works.
end
Com o antigo padrão Verilog (IEEE Std 1364), tínhamos uma maneira de evitar adicionar portas desnecessariamente: especificadores hierárquicos . Por exemplo, no seu testbench, você poderia usar:
Neste código,
SCInst.B
há um especificador hierárquico que permite que você faça um escopo para baixo no módulo de design para exibir o valor doB
sinal interno. Isso é bom para depuração temporária. Consulte IEEE Std 1800-2023 seção 23.6 Nomes hierárquicos .Com o novo padrão SystemVerilog (IEEE Std 1800), também temos a opção de usar a
bind
palavra-chave. Este método é preferido em relação aos especificadores hierárquicos. Consulte a seção 23.11 Binding auxiliary code to scopes or instances do IEEE Std 1800-2023 . Esta é uma boa abordagem quando você deseja criar um monitor, verificador ou asserções para sinais internos de outro módulo.