最全官方HDLCoder教程.docx
《最全官方HDLCoder教程.docx》由会员分享,可在线阅读,更多相关《最全官方HDLCoder教程.docx(24页珍藏版)》请在冰豆网上搜索。
最全官方HDLCoder教程
最全官方HDL-Coder教程
生成代码前准备工作
在从模型生成HDL代码前,你应该作如下工作:
∙在生成代码前,用hdlsetup功能(详见 InitializingModelParameterswithhdlsetup)来对你要生成HDL代码的模型进行设置。
∙用hdllib功能来创建目前支持HDL代码生成的模块库(详见 ShowBlocksSupportedforHDLCodeGeneration)通过用这个库里的模块来构建模型,你的模型就会兼容HDL。
支持的模块集合在今后的版本会改变,所以你每次安装新版本的本产品时应该重建支持的模块库。
∙用 RunCompatibilityChecker选项(详见 SelectingandCheckingaSubsystemforHDLCompatibility)来检查你模型或者DUT的HDL兼容性并生成HDLCodeCheckReport。
你也可以调用chekhdl函数(见checkhdl)来运行兼容性检查器。
练习简介
HDLCoder支持生成代码,用户可以选择以下环境:
1.MATLAB命令窗口支持用makehdl,makehdltb和其他函数生成代码
2.SimulinkGUI(配置参数对话框和/或模型浏览器)提供模型仿真参数/代码生成参数和函数的集成视图
这个实践练习通过在以上两种环境使用中相同的模型,介绍HDL代码的生成和仿真机制。
在这一系列步骤中,你将:
1.构建一个简单模型用于生成代码
2.从模型中的子系统生成代码
3.生成适用于MentorGraphicsModelSim仿真器的VHDL测试台来实现模型的仿真
4.在仿真器中编译和执行模型和测试台
5.用同样的模型生成并仿真Verilog代码
6.检查模型和HDLCoder的兼容性
stir_fixed模型
这些练习用sfir_fixed模型作为HDL代码生成源。
该模型模拟一对称有限脉冲响应滤波器算法,通过定点数计算实现。
该模型里的模块支持HDL代码生成,并且模型参数已进行配置以适于代码生成。
想了解更多关于模型准备以进行代码生成,参考PrepareSimulinkModelForHDLCodeGeneration.
下图为模型的顶层级别描述。
该模型采用了任务分解,有助于HDL设计:
∙用于执行滤波算法的symmetric_fir子系统是被测器件。
一个HDL实体将从这个子系统被创建、测试,最终综合。
∙驱动该子系统的顶层模型元件是测试台。
顶层模型生成symmetric_fir子系统的16位定点输入信号。
SignalFromWorkspace模块生成一个用于滤波器的测试输入(激励)信号。
四个常数模块提供滤波器系数。
Scope模块仅用来仿真,这些虚拟的模块不会生成HDL代码。
下图描述了symmetric_fir子系统。
定点数数据类型在子系统里传递。
输入继承了被送过来的信号的数据类型。
在需要的地方,给定输入的数据类型并采取操作后,模块的内部规则决定了输出的数据类型。
滤波器在y_out管脚输出一个定点数结果,并在delayed_x_out复制其输入(在经过若干个延迟阶段后)。
在接下来的例程里,你将会生成将symmetric_fir当成一个实体实现的VHDL代码。
然后你会从顶层级别模型生成一个测试台。
这个测试台用从SignalFromWorkspace产生的激励数据驱动生成的实体完成指定的时钟步数。
用HDLWorkflowAdvisor生成代码(该法不能生成测试台代码)
这个例程展示了如何用HDLWorkflowAdvisor从Simulink模型生成HDL代码。
本例程中的模型,stir_fixed已经被准备好用于代码生成。
本例程采用XilinxISE综合工具,我们假设你的工具路径已设置好。
你也可以用AlteraQuartusII来进行本例程。
∙创建工作文件夹并复制模型
∙用HDLWorkflowAdvisor生成代码
∙执行FPGA综合和分析
创建工作文件夹并复制模型
1.启动MATLAB
2.创建一名为sl_hdlcoder_work的文件夹。
比如:
sl_hdlcoder_work文件夹将被用于保存例程中模型的拷贝和HDLCoder生成的文件夹及代码。
这个文件夹的位置不重要,但是不能在MATLAB的文件夹树下。
3.将sl_hdlcoder_work文件夹设置为工作文件夹。
比如:
4.打开sfir_fixed模型。
5.将sfir_fixed复制到sl_hdlcoder_work文件夹下。
用HDLWorkflowAdvisor生成代码
1.右键点击symmetric_fir子系统,选择HDLCode>HDLWorkflowAdvisor。
2.在步骤SetTarget>SetTargetDeviceandSynthesisTool,在Synthesistool选择XilinxISE并点击RunThisTask。
3.右键点击PrepareModelForHDLCodeGeneration并选择RunAll,HDLWorkflowAdvisor检查模型的代码生成兼容性。
4.在步骤HDLCodeGeneration>SetCodeGenerationOptions>SetBasicOptions,选择如下选项,然后点击Apply:
•在Language,选择Verilog.
•使能Generatetraceabilityreport.
•使能Generateresourceutilizationreport.
5.浏览Optimization和Codingstyle标签下的可用选项。
这些选项可以用来修改所生成代码的实现和格式。
6.右键点击HDLCodeGeneration>GenerateRTLCodeandTestbenchstep,选择RuntoSelectedTask。
代码生成报告自动被打开,它包括资源使用和可追溯性报告。
资源使用报告描述你的设计对硬件资源的使用情况。
可追溯性报告允许你在模型和生成的代码之间操作。
执行FPGA综合和分析
1.在FPGASynthesisandAnalysis>PerformSynthesisandP/R>PerformPlaceandRoute任务下,取消对Skipthistask的勾选并点击Apply。
2.右键点击AnnotateModelwithSynthesisResult并选择RuntoSelectedTask。
3.观察模型中被注释的关键步骤。
关键步骤以青色显示。
用命令行生成代码
∙概览
∙创建一文件夹和本地模型文件
∙用hdlsetup初始化模型参数
∙从子系统生成VHDL实体(VHDLEntity)
∙生成VHDL测试台代码(TestBenchCode)
∙检验生成的代码
∙生成一个VerilogModule和测试台
概览
这一例程提供代码和测试台生成指令、其参数和代码生成器创建的文件的详细步骤介绍。
该例程假设读者已经熟悉了例程模型(参见Thesfir_fixedModel)。
创建一文件夹和本地模型文件
创建案例模型的一本地拷贝并将其保存在工作文件夹下,如下所示:
1.启动MATLAB。
2.创建一名为sl_hdlcoder_work的文件夹。
比如:
mkdirC:
\work\sl_hdlcoder_work
sl_hdlcoder_work文件夹将被用于保存例程中模型的拷贝和HDLCoder生成的文件夹及代码。
这个文件夹的位置不重要,但是不能在MATLAB的文件夹树下。
3.将sl_hdlcoder_work文件夹设置为工作文件夹。
比如:
cdC:
\work\sl_hdlcoder_work
4.打开例程模型,在MATLAB命令行下输入如下指令:
sfir_fixed
5.在Simulink中,选择File>SaveAs,将sfir_fixed模型另存一本地拷贝到工作文件夹中。
6.保持sfir_fixed打开,继续下面的进程。
用hdlsetup初始化模型参数
在生成代码前,模型必须进行配置。
你可以使用hdlsetup指令从而避免手动配置模型。
Hdlsetup指令使用set_param函数来配置模型以快速并可靠地生成HDL代码。
配置模型以进行代码生成:
1.在MATLAB命令行,输入:
hdlsetup('sfir_fixed')
2.在File菜单下选择Save,从而保存模型及其新的设置。
在继续进行代码生成前,考虑hdlsetup在模型中应用的设置。
Hdlsetup配置HDLCoder推荐或要求的求解器(Solver)选项,它们是:
∙类型(Type):
固定步长(Fixed-step)。
(HDLCoder目前支持特定条件下的可变步长求解器。
参见hdlsetup)
∙求解器(Solver):
离散(Discrete,无连续状态)。
也可以选择其他的固定步长求解器,但用于仿真离散系统这一选项通常是最佳的。
∙任务模式(Taskingmode):
单任务(SingleTasking)。
HDLCoder目前不支持执行多任务的模型。
不要将Taskingmode设置为Auto。
Hdlsetup也配置模型开始和结束时间以及固定步长,如下所示:
∙开始时间(StartTime):
0.0s
∙结束时间(StopTime):
10s
∙固定步长(Fixedstepsize)(基本采样周期时间):
auto
如果Fixedstepsize被设置为自动(auto),步长大小就根据模型中指定的采样时间被自动选择。
在示例模型中,只有SignalFromWorkspace模块指定了明确的采样时间(1s);其余模块继承这一采样时间。
模型的开始和结束时间决定了测试台仿真总时长。
这也进一步决定了产生的用于为生成的测试台提供激励和输出数据的数据阵列的大小。
对于例程模型,10秒的测试数据计算不会花费很多时间。
更加复杂的模型的采样值的计算可能很费时间。
在这种情况下,就需要考虑减少仿真时间。
经hdlsetup配置的其余参数控制错误严重性级别,数据纪录和模型显示选项。
如果想查阅与hdlsetup有关的完整模型参数集合,在MATLABEditor中打开hdlsetup.m。
由hdlsetup提供的模型参数默认值是有用的,但对用户的模型来说并不一定是最优的。
比如,hdlsetup设置的Simulationstoptime默认值为10s。
对例程模型sfir_fixed的测试来说,1000s的仿真时间会更加现实。
如果想修改仿真时间,在Simulink窗口中Simulationstoptime区域输入目标值。
模型参数概要请参照Smulink资料中ModelandBlockParameters区域的ModelParameters表格。
从子系统生成VHDL实体(VHDLEntity)
在这一部分,你将使用makehdl函数从例程模型的symmetric_fir子系统生成VHDL实体的代码。
makehdl也生成用于第三方HDL仿真和综合工具的脚本文件。
makehdl允许你指定多种特征用以控制生成的代码的各种特性。
在这一例程中,你将使用makehdl默认的特征参数。
在生成代码前,请确定已完成了创建一文件夹和本地模型文件及用hdlsetup初始化模型参数的步骤。
生成代码:
1.在MATLAB窗口下的桌面菜单选择CurrentFolder。
这样会显示Matlab的CurrentFolderbrowser,使你能快速打开工作文件夹和将要在其中生成的文件。
2.在Matlab命令行,输入指令:
makehdl('sfir_fixed/symmetric_fir')
这条指令命令HDLCoder从sfir_fixed模型下的symmetric_fir子系统用默认参数生成代码。
3.在代码生成时,HDLCoder显示进程消息。
这个进程应该以下面的信息结束:
###HDLCodeGenerationComplete.
观察到进程消息中生成的文件的名字被超链接。
在代码生成完成时,你可以点击这些超链接来查看MATLABEditor里的文件。
Makehdl在代码生成前编译模型。
代码生成后模型的外观可能发生改变,这取决于模型的显示选项(比如端口数据类型等)。
4.Makehdl默认生成VHDL代码。
代码文件和脚本被写入目标文件夹。
默认的目标文件夹是工作文件夹下的子文件夹,名称为hdlsrc。
在CurrentFolderbrowser中可以看到一个hdlsrc文件的文件夹图标。
要看生成的代码和脚本文件,双击这个hdlsrc文件夹图标。
5.Makehdl在hdlsrc文件夹下生成的文件有:
∙symmetric_fir.vhd:
VHDL代码。
该文件包含一个entity定义和一个用于执行symmetric_fir滤波器的RTL架构。
∙symmetric_fir_compile.do:
MentorGraphicsModelSim编译脚本(vcomcommand)用于编译生成的VHDL代码。
∙symmetric_fir_synplify.tcl:
Synplify综合脚本。
∙symmetric_fir_map.txt:
映射文件。
这个报告文件将生成的实体(或模块)映射到用于生成它们的子系统(参照 TraceCodeUsingtheMappingFile)。
6.要在MatlabEditor中查看生成的VHDL代码,在CurrentFolderbrowser中双击symmetric_fir.vhd文件夹图标。
7.在进行下一步之前,关闭在编辑器中打开的文件。
然后,点击CurrentFolderbrowser中的GoUpOneLevel按钮来将当前文件夹重新设置为sl_hdlcoder_work文件夹。
8.保持sfir_fixedmodel处于打开状态,进行下面的步骤。
生成VHDL测试台代码
在这一部分,你使用测试台生成函数makehdltb来生成VHDL测试台代码。
这个测试台的目的是驱动和验证上一部分生成的symmetric_fir实体的运行。
生成的测试台包括:
∙由信号源产生的连接到被测entity源激励数据。
∙由被测entity生成的输出数据。
当测试台运行时,该数据与VHDL模型比较来实现验证目的。
∙用于驱动被测entity的时钟,复位和信号使能。
∙一个被测entity的部件例示
∙用于驱动被测entity和比较其输出与期望输出的代码
另外,makehdltb生成MentorGraphicsModelSim脚本来编译和执行测试台。
这个练习假设你的工作文件夹和上一部分使用的相同。
这个文件夹现在包含一个之前生成的代码的文件夹hdlsrc。
生成测试台:
1.在Matlab命令行输入指令:
makehdltb('sfir_fixed/symmetric_fir')
这个指令生成一个测试台,该测试台用来连接并验证从symmetric_fir(或从有着相同功能接口接口的子系统)生成的代码。
默认地,VHDL测试台代码和脚本一样是在hdlsrs目标文件夹里被生成。
2.在测试台的生成进行时,HDLCoder显示进程信息。
这一进程应以下面的信息结束:
###HDLTestBenchGenerationComplete.
3.要查看生成的测试台和脚本文件,在CurrentFolderbrowser双击hdlsrc文件夹。
作为另外一种选择,你也可以点击codetestbenchgenerationprogressmessages下的被超链接的生成的文件名。
这些被makehdltb生成的文件是:
∙symmetric_fir_tb.vhd:
VHDL测试台代码和生成的测试和输出数据。
∙symmetric_fir_tb_compile.do:
MentorGraphicsModelSim编译脚本(vcom指令)。
这个脚本编译并加载要测试的entity(symmetric_fir.vhd)和测试台代码(symmetric_fir_tb.vhd)。
∙symmetric_fir_tb_sim.do:
MentorGraphicsModelSim脚本,用于初始化仿真器,设置波形窗口信号显示和运行仿真。
4.如果你想要在MatlabEditor中查看生成的测试台代码,双击CurrentFolderbrowser中的symmetric_fir_tb.vhd文件图标。
你在查阅makehdltb参考文件(referencedocumentation)时可能想了解代码,这个参考文件介绍了测试台生成器的默认操作。
5.在进行下一步以前,关闭你在editor中打开的文件。
然后,点击CurrentFolderbrowser中的GoUpOneLevel按钮来将当前文件夹重新设置为sl_hdlcoder_work文件夹。
验证生成的代码
你现在可以将之前生成的代码和测试台放到一个HDL仿真来进行仿真并验证结果。
参考 SimulatingandVerifyingGeneratedHDLCode(即下文部分)来查看一个怎么在MentorGraphicsModelSim仿真器中用生成的测试台代码和脚本文件的例子。
生成一个Verilog模块和测试台
生成Verilog的步骤和生成VHDL的步骤仅有轻微差别。
这一部分提供了指令语法和生成的文件的概述。
生成一个Verilog模块。
默认地,makehdl生成VHDL代码。
要修改默认值并生成Verilog代码,你必须向makehdl传递一特性/数值对,从而将TargetLanguage特性设置成verilog,如下例所示。
makehdl('sfir_fixed/symmetric_fir','TargetLanguage','verilog')
这条指令在默认目标文件夹hdlsrc下生成Verilog源代码和用于仿真及综合工具的脚本。
生成的这些文件是:
∙symmetric_fir.v:
Verilog代码。
这个文件包括一个Verilog模块用于执行symmetric_fir子系统。
∙symmetric_fir_compile.do:
MentorGraphicsModelSim编译脚本(vlogcommand)用于编译生成的Verilog代码。
∙symmetric_fir_synplify.tcl:
Synplify综合脚本。
∙symmetric_fir_map.txt:
这个报告文件将生成的实体(或模块)映射到用于生成它们的子系统(参照 TraceCodeUsingtheMappingFile)。
生成和执行一个Verilog测试台。
用于修改目标语言的makehdltb句法和makehdl完全一样。
下面这个例子在默认目标文件夹下生成Verilog测试台代码来驱动Verilog模块symmetric_fir。
makehdltb('sfir_fixed/symmetric_fir','TargetLanguage','verilog')
这些生成的文件是:
∙symmetric_fir_tb.v:
Verilog测试台代码和生成的测试和输出数据。
∙symmetric_fir_tb_compile.do:
MentorGraphicsModelSim编译脚本(vlog指令)。
这个脚本编译并加载要测试的entity(symmetric_fir.v)和测试台代码(symmetric_fir_tb.v)。
∙symmetric_fir_tb_sim.do:
MentorGraphicsModelSim脚本,用于初始化仿真器,设置波形窗口信号显示和运行仿真。
Thefollowinglistingshowsthecommandsandresponsesfromatestbenchsessionusingthegeneratedscripts:
ModelSim>dosymmetric_fir_tb_compile.do
#ModelTechnologyModelSimSEvlog6.0Compiler2004.08Aug192004
#--Compilingmodulesymmetric_fir
#
#Toplevelmodules:
#symmetric_fir
#ModelTechnologyModelSimSEvlog6.0Compiler2004.08Aug192004
#--Compilingmodulesymmetric_fir_tb
#
#Toplevelmodules:
#symmetric_fir_tb
ModelSim>dosymmetric_fir_tb_sim.do
#vsimwork.symmetric_fir_tb
#Loadingwork.symmetric_fir_tb
#Loadingwork.symmetric_fir
#****TestComplete.****
#Breakat
C:
/work/sl_hdlcoder_work/vlog_code/symmetric_fir_tb.vline142
#SimulationBreakpoint:
Breakat
C:
/work/sl_hdlcoder_work/vlog_code/symmetric_fir_tb.vline142
#MACRO./symmetric_fir_tb_sim.doPAUSEDatline14
用配置参数对话框生成HDL代码
HDLCoderGUI概述
你可以在配置参数对话框或在模型浏览器(ModelExplorer)中编辑影响HDL代码生成的选项和参数。
下面的图展示了配置参数对话框中的第一级HDLCodeGeneration面板。
下面的图展示了模型浏览器(ModelExplorer)中第一级HDLCodeGeneration选项。
在下面的代码生成练习中,你使用配制参数对话框来查看和设置HDLCoder选项和控制。
这个练习在基本代码生成和验证步骤使用sfir_fixed模型。
创建一个文件夹和本地模型文件
在这部分中你将设置文件夹和例程模型的本地拷贝。
创建一个文件夹。
首先设置工作文件夹。
1.启动Matlab。
2.创建一个名为sl_hdlcoder_work的文件夹,如:
mkdirC:
\work\sl_hdlco