从 verilog 中的 PRBS 生成器向错误检查模块提供输入
Giving inputs to error checking module from PRBS generator in verilog
我已经用verilog 编写了模式生成器模块和错误检查器模块的代码。
模式生成器模块生成 PRBS-7。
错误检查器模块采用两个 8 位序列的序列并告诉我 BER(我已经通过测试平台验证了这一点)。
但是我在从模式生成器模块向错误检查器模块提供输入时遇到了麻烦。怎么做?
您必须制作一个包含这两个模块的测试台并将它们连接起来。
要生成人为错误,您必须更改生成器和检查器之间的连接中的一位或多位:
wire [7:0] prbs_out,checker_in;
reg [7:0] make_error;
assign checker_in = prbs_out ^ make_error;
只要 make_error
全部为零,这些位就不会发生变化。如果你有一个测试循环,你偶尔会在使用 $random 函数时出错:
... // Your major test loop
// 1 in 16 times there is an error
if (($random & 32'h0F)==0)
make_error = 8'h01;
else
make_error = 8'h00;
一旦成功,您就可以开始使用错误向量了:
// On average 1 in 16 times there is an error
if (($random & 32'h0F)==0)
make_error = $random & 32'h00FF;
else
make_error = 8'h00;
请注意,上面介绍了不止一个错误位,在某些情况下可能未被发现。
我已经用verilog 编写了模式生成器模块和错误检查器模块的代码。 模式生成器模块生成 PRBS-7。 错误检查器模块采用两个 8 位序列的序列并告诉我 BER(我已经通过测试平台验证了这一点)。 但是我在从模式生成器模块向错误检查器模块提供输入时遇到了麻烦。怎么做?
您必须制作一个包含这两个模块的测试台并将它们连接起来。
要生成人为错误,您必须更改生成器和检查器之间的连接中的一位或多位:
wire [7:0] prbs_out,checker_in;
reg [7:0] make_error;
assign checker_in = prbs_out ^ make_error;
只要 make_error
全部为零,这些位就不会发生变化。如果你有一个测试循环,你偶尔会在使用 $random 函数时出错:
... // Your major test loop
// 1 in 16 times there is an error
if (($random & 32'h0F)==0)
make_error = 8'h01;
else
make_error = 8'h00;
一旦成功,您就可以开始使用错误向量了:
// On average 1 in 16 times there is an error
if (($random & 32'h0F)==0)
make_error = $random & 32'h00FF;
else
make_error = 8'h00;
请注意,上面介绍了不止一个错误位,在某些情况下可能未被发现。