在 Modelsim 中编写测试平台
Writing testbench in Modelsim
我正在尝试在 modelsim 中用 verilog 编写测试平台。我已经为测试台和被测模块编写了代码。但是在编译它时,我收到一条错误消息说编译失败。
那么我们是否必须在单独的模块中编写测试台代码,并且对于被测模块也一样?
//Writing a test bench
module test_bench;
wire w1,w2,w3;
xyz(w1,w2,w3);
test_xyz(w1,w2,w3);
endmodule;
//现在我们将定义我们在测试平台模块中实例化的模块
//定义模块xyz
module xyz(f,A,B);
input A,B;
output f;
nor(f,A,B);
endmodule;
//Defining the test module which we are going to apply to the module xyz
module test_xyz(f,A,B);
input f;
output A,B;
initial
begin
$monitor ($time ,"A=%b","B=%b", "f=%b",A,B,f);
#10 A=0;B=0;
#10 A=1;B=0;
#10 A=1;B=1;
#10 $finish ;
end
endmodule;
endmodule
不需要分号。
实例应具有实例名称:
module test_bench;
wire w1,w2,w3;
xyz dut (w1,w2,w3);
test_xyz test(w1,w2,w3);
endmodule
如果您要从 initial 或 alwys 块驱动信号,它们需要在本地范围内是 reg
而不是 wire
*。
module test_xyz(f,A,B);
input f;
output reg A,B; //A B are regs
*localscope:电线被驱动的地方是一个 reg,但模块的输出驱动电线。 Verilog 类型不跨越端口边界。
示例 EDA Playground。
我正在尝试在 modelsim 中用 verilog 编写测试平台。我已经为测试台和被测模块编写了代码。但是在编译它时,我收到一条错误消息说编译失败。 那么我们是否必须在单独的模块中编写测试台代码,并且对于被测模块也一样?
//Writing a test bench
module test_bench;
wire w1,w2,w3;
xyz(w1,w2,w3);
test_xyz(w1,w2,w3);
endmodule;
//现在我们将定义我们在测试平台模块中实例化的模块
//定义模块xyz
module xyz(f,A,B);
input A,B;
output f;
nor(f,A,B);
endmodule;
//Defining the test module which we are going to apply to the module xyz
module test_xyz(f,A,B);
input f;
output A,B;
initial
begin
$monitor ($time ,"A=%b","B=%b", "f=%b",A,B,f);
#10 A=0;B=0;
#10 A=1;B=0;
#10 A=1;B=1;
#10 $finish ;
end
endmodule;
endmodule
不需要分号。
实例应具有实例名称:
module test_bench;
wire w1,w2,w3;
xyz dut (w1,w2,w3);
test_xyz test(w1,w2,w3);
endmodule
如果您要从 initial 或 alwys 块驱动信号,它们需要在本地范围内是 reg
而不是 wire
*。
module test_xyz(f,A,B);
input f;
output reg A,B; //A B are regs
*localscope:电线被驱动的地方是一个 reg,但模块的输出驱动电线。 Verilog 类型不跨越端口边界。
示例 EDA Playground。