主要内容

使用SystemVerilog DPI测试台验证HDL设计

这个例子展示了如何使用SystemVerilog DPI测试平台来验证需要大量数据集的HDL代码。

在某些应用程序中,需要模拟大量样本来验证HDL Coder™为您的算法生成的HDL代码。例如,这些应用程序需要大量的样本进行算法验证:

a)利用多相滤波器组计算雷达天文信道。

b)从通信系统中的维特比解码器获得误码率(BER)。

c)高分辨率视频上的像素流视频处理算法。

生成HDL测试台来验证这样的设计是很耗时的,因为编码器必须在Simulink中模拟模型以获取测试台数据。金宝app

一个更快生成测试台的替代方案是HDL Verifier™SystemVerilog DPI测试台。SystemVerilog DPI测试台不需要Simulink仿真,因此对于大数据集,它在比HDL测试台金宝app更短的时间内生成测试台。

HDL Verifier™SystemVerilog DPI测试台集成了Simulink Coder™,可以在Syst金宝appemVerilog组件中导出具有直接编程接口(DPI)的Simulink系统作为生成的C代码。在DPI-C组件中,刺激被生成并应用于C子系统,也应用于为Simulink系统生成的HDL代码。金宝app该测试台将HDL模拟的输出与DPI-C组件的输出进行比较,以验证HDL设计。

多相滤波器组

多相滤波器组是一种广泛应用的减小FFT中由于漏频和扇形损耗而导致的不准确的技术。多相滤波器组通过显著抑制带外信号产生比正常DFT更平坦的响应。

该模型是一个多相滤波器组,由一个滤波器和一个FFT组成,FFT一次处理16个样本。有关多相滤波器组的更多信息,请参阅FPGA的高吞吐量信道器

modelname =“hdlcoder_DPIC_testbench”;open_system (modelname);

建立模型

InitFcn回调(Model Properties > Callbacks > InitFcn)建立模型。在这个例子中,使用512点FFT,每个频带有四个滤波器。dsp。信道器对象用于生成系数。

该算法需要512个滤波器(每个频带一个滤波器)。对于16个样本的向量输入,滤波器实现共享16个滤波器,共32次。输入数据由两个正弦波组成,200KHz和250khz。

生成HDL代码,HDL测试台和SystemVerilog DPI测试台

为生成的文件使用临时目录:

Workingdir = tempname;

检查PolyphaseFilterBank子系统的HDL代码生成兼容性:

checkhdl (“hdlcoder_DPIC_testbench / PolyPhaseFilterBank”“TargetDirectory”, workingdir);

运行以下命令生成HDL代码:

makehdl (“hdlcoder_DPIC_testbench / PolyPhaseFilterBank”“TargetDirectory”, workingdir);

运行如下命令生成测试台:

makehdltb (“hdlcoder_DPIC_testbench / PolyPhaseFilterBank”“TargetDirectory”, workingdir);

这将通过在Simulink中模拟模型并捕获测试台架数据来生成HDL测试台架。金宝app

执行如下命令生成SystemVerilog DPI测试台:

HDLSimulator =“ModelSim”%支金宝app持的模拟器选项= 'ModelSim', ' incve ', 'VCS', 'Vivado'
makehdltb (“hdlcoder_DPIC_testbench / PolyPhaseFilterBank”“TargetDirectory”workingdir,“GenerateSVDPITestBench”HDLSimulator,“GenerateHDLTestBench”“关闭”);

该命令在不运行Simulink仿真的情况下生成SystemVerilog测试台。金宝app该代码将Simulink系统导出为SystemVerilog组件中生成的C代码,而不是模拟。金宝app该测试台通过将输出数据与HDL设计的输出进行比较来验证输出数据。makehdltb函数还生成用于编译和模拟的特定于模拟器的脚本。

SystemVerilog DPI测试台可用于验证目标语言VHDL和Verilog的HDL设计。

或者,您可以在配置参数中的“HDL代码生成>测试台”窗格中设置SystemVerilog DPI测试台选项。

生成SystemVerilog DPI测试台工件

当您请求SystemVerilog DPI测试台架时,编码器会生成以下工件:

一个)。PolyPhaseFilterBank_dpi_tb。sv -这是用于验证HDL代码的SystemVerilog测试平台。

b。)PolyPhaseFilterBank_dpi_tb。这是Mentor Graphics ModelSim®用于编译HDL代码和运行测试台架模拟的宏文件。

基于所选择的模拟器,编码器生成一个不同的文件用于编译和测试台架模拟。例如,如果您选择“Incisive”,编码器将生成“polyphasefilterbank_dpi_tbb .sh”用于Cadence Incisive®上的编译和模拟。

(可选)生成HDL代码覆盖率报告和数据库

要使HDL模拟器生成HDL代码覆盖率报告和数据库,可以:

一个)。在“HDL代码生成>测试台”窗格中,选择标记为“HDL代码覆盖”的复选框。

b。)当你调用'makehdltb'时,将'HDLCodeCoverage'设置为'on'。例如:

makehdltb (“hdlcoder_DPIC_testbench / PolyPhaseFilterBank”“TargetDirectory”workingdir,“GenerateSVDPITestBench”HDLSimulator,“GenerateHDLTestBench”“关闭”“HDLCodeCoverage”“上”);

在模拟测试台架之后,在源目录中生成HDL代码覆盖率工件。

HDL测试台与SystemVerilog DPI测试台生成时间的比较

模型的模拟时间在预加载回调中设置(模型属性> Callbacks > PreLoadFcn)

simTime = 1000;

采样频率为2e+ 6hz,这意味着生成HDL测试台的模拟采集了2e+9个样本。

对于某些应用,多相滤波器需要更多的采样才能获得合适的频率。所需simTime的增加也会增加生成HDL测试平台所需的时间。

这种应用程序的解决方案是使用SystemVerilog DPI测试台。无论您的测试场景需要多少样本,测试台架的生成时间都是相同的。

你可以通过改变“simTime”变量来增加模拟时间。例如,为2e+12样本生成HDL测试台,设置:

simTime = 1000000;

下表显示了在增加样本数量(从2e+9到2e+15)时,生成HDL测试台和SystemVerilog DPI测试台所花费的时间(秒)的比较:

列= {“NumberOfSamples”“GenerationTimeHDLTestBench”“GenerationTimeSystemVerilogDPITestbench”};numSamples = [2e9;2e10;2e11;2e12;2e13;2e14;HDLTBtime =(10、12、59;504;4994;52200;505506);DPICTBtime =[47, 47岁,47岁,47个;47,47岁,47);CompareTestBenchTimes = table(numSamples,HDLTBtime,DPICTBtime,“VariableNames”、列);disp (CompareTestBenchTimes);
NumberOfSamples GenerationTimeHDLTestBench GenerationTimeSystemVerilogDPITestbench  _______________ __________________________ _______________________________________ 47 2 e 2 e + 09年10 + 10 12 47 2 e + 11 59 47 504 47 2 e e + 12 + 13 4994 47 52200 47 2 e e + 14 + 15 5.0551 e + 05年47岁

这两种测试台架类型的生成时间相对于样本数量的对数图显示,随着样本数量的增加,HDL测试台架需要更多的生成时间,而SystemVerilog DPI测试台架的生成时间与样本数量无关。

重对数(numSamples HDLTBtime,“这”numSamples DPICTBtime,“r-o”);xlim ([2 e09 e15]);传奇(‘HDL测试台’SystemVerilog DPI测试台“位置”“西北”);包含(“样本数量”);ylabel (生成时间(以秒为单位));close_system (modelname 0);

结论

虽然HDL测试台对于少量样本非常有效,但如果您的测试场景需要大量样本,HDL Verifier™SystemVerilog DPI测试台可提供更快的测试台生成。