主要内容

从维特比译码器系统HDL代码生成对象

这个例子展示了如何检查,生成和验证HDL代码从MATLAB®代码实例化一个对象™维特比译码器系统。

MATLAB设计

MATLAB代码中使用这个例子是一个维特比解码器用于艰难的决定卷积解码,实现为一个系统对象。这个示例还展示了一个MATLAB试验台,测试的解码器。

design_name =“mlhdlc_sysobj_viterbi”;testbench_name =“mlhdlc_sysobj_viterbi_tb”;

看看MATLAB设计。

类型(design_name);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % MATLAB设计:维特比译码器% %关键设计模式在这个例子:%(1)使用通讯系统工具箱ViterbiDecoder %(2)对象只能称为一次每设计迭代% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 2011 - 2015版权MathWorks, inc .)函数decodedBits = mlhdlc_sysobj_viterbi (inputSymbol)持久hVitDec;如果isempty (hVitDec) hVitDec = comm.ViterbiDecoder (‘InputFormat’,‘硬’,‘OutputDataType’,‘逻辑’);结束decodedBits = hVitDec (inputSymbol);
类型(testbench_name);
% Viterbi_tb——testbench Viterbi_dut % 2011 - 2015版权MathWorks, inc . numErrors = 0;%兰德流original_rs = RandStream.getGlobalStream;rs = RandStream。创建(“mrg32k3a”、“种子”,25);% RandStream.getGlobalStream (rs);rs.reset;%卷积编码器hConvEnc = comm.ConvolutionalEncoder;%的误码率hb = comm.ErrorRate;hb。ReceiveDelay = 34; reset(hBER); % clear persistent variables in the design between runs of the testbench clear mlhdlc_msysobj_viterbi; for numSymbols = 1:10000 % generate a random bit inputBit = logical(randi([0 1], 1, 1)); % encode it with the Convolutional Encoder - rate 1/2 encodedSymbol = hConvEnc(inputBit); % optional - add noise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % call Viterbi Decoder DUT to decode the symbol %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% vitdecOut = mlhdlc_sysobj_viterbi(encodedSymbol); ber = hBER(inputBit, vitdecOut); end fprintf('%s\n', repmat('%', 1, 38)); fprintf('%%%%%%%%%%%%%% %s %%%%%%%%%%%%%%\n', 'Viterbi Decoder Output'); fprintf('%s\n', repmat('%', 1, 38)); fprintf('Number of bits %d, BER %g\n', numSymbols, ber(1)); fprintf('%s\n', repmat('%', 1, 38)); % EOF

模拟设计

模拟设计与代码生成前testbench确保没有运行时错误。

mlhdlc_sysobj_viterbi_tb
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %维特比译码器输出% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 10000的比特数,数量0% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %

维特比译码算法的硬件实现

有三个主要组件的维特比译码算法。他们是分支度量计算(BMC), add-compare-select (ACS)和回溯解码。下面的图表说明了维特比译码算法的三个单位。

重整化方法

维特比译码器防止溢出状态指标的ACS组件状态指标的减去最小值在每个时间步,如下图所示。

获取所有的状态度量元素的最小值在一个时钟周期的结果在一个贫穷的电路的时钟频率。电路的性能可以改善通过添加流水线寄存器。然而,只是减去最小值延迟的流水线寄存器状态指标仍可能导致溢出。

硬件架构修改重整化方法,避免了状态度量溢出在三个步骤。首先,建筑计算的阈值和步骤参数,基于格子部分结构和软的数量决定。第二,延迟最小值与阈值。最后,如果最小值大于或等于阈值,实现价值减去步骤从国家标准;否则不进行调整。下图说明了修改后的重整化方法。

创建一个新的HDL编码项目

创建一个新项目,输入以下命令:

编码器-hdlcoder不管是新mlhdlc_viterbi

接下来,添加文件mlhdlc_sysobj_viterbi.m项目的MATLAB函数mlhdlc_sysobj_viterbi_tb.mMATLAB试验台。

为一个更完整的教程创建并填充MATLAB HDL编码项目,明白了开始使用MATLAB对高密度脂蛋白的工作流

定点运行转换和HDL代码生成

启动工作流顾问。在工作流顾问,右键单击代码生成一步,选择的选项选择任务运行从一开始的所有步骤运行通过HDL代码生成。

检查生成的HDL代码在日志窗口中通过单击链接。

金宝app支持系统对象

为一个系统对象列表支持HDL代码生成,明白了金宝app预定义的系统对象支持HDL代码生成金宝app