主要内容

自定义HDL代码集成到MATLAB设计

hdl.BlackBox提供了一种包括自定义HDL代码,如遗留或手写的HDL代码,在MATLAB®设计用于HDL代码生成。

当您创建一个用户定义的系统对象继承自™hdl.BlackBox,您指定一个端口相匹配的接口和仿真行为定制HDL代码。

高密度脂蛋白编码器™在MATLAB模拟设计系统中使用定义的行为对象。在代码生成,模拟生成代码的行为,而不是编码实例化一个模块的端口接口指定系统中的对象。

使用生成的HDL代码在一个更大的系统中,包括定制的HDL与其他源文件生成的代码。

定义hdl.BlackBox系统对象

  1. 继承自创建一个用户定义的系统对象hdl.BlackBox

  2. 配置黑盒接口匹配端口界面定制HDL代码通过设置hdl.BlackBox系统对象的属性。

  3. 定义一步方法,它模拟行为匹配的自定义HDL代码。

    另外,您定义的系统对象可以继承hdl.BlackBox类,您可以定义输出更新方法自定义HDL代码模拟行为相匹配。

示例代码

例如,下面的代码定义了一个系统对象,CounterBbox,继承自hdl.BlackBox和代表定制HDL代码一个计数器增量,直到达到一个阈值。的CounterBbox重置一步方法模型自定义HDL代码的行为。

classdef CounterBbox <高密度脂蛋白。黑箱%来自高密度脂蛋白。黑盒类%计数器:数到一个阈值。% %,这是一个离散时间系统对象的例子与国家%变量。% (Nontunable)阈值= 1结束属性(DiscreteState) %定义离散时间状态。计数方法结束函数obj = CounterBbox(变长度输入宗量)%支持名称-值对参数找(obj,输入参数个数,金宝app变长度输入宗量{:});obj。NumInputs = 1;%定义输入obj。NumOutputs = 1;%定义的输入结束结束(访问=保护)%定义仿真方法的行为。%为代码生成,编码器使用定制HDL代码。 function resetImpl(obj) % Specify initial values for DiscreteState properties obj.Count = 0; end function myout = stepImpl(obj, myin) % Implement algorithm. Calculate y as a function of % input u and state. if (myin > obj.Threshold) obj.Count = obj.Count + 1; end myout = obj.Count; end end end

使用系统对象MATLAB设计功能

定义您的系统对象后,使用它在MATLAB设计函数通过创建一个实例并调用它一步方法。

来生成代码,您还需要创建一个试验台功能练习顶层设计功能。

示例代码

下面的示例代码显示了一个顶级设计的函数创建了一个实例CounterBbox并调用它的一步方法。

函数(y1, y2) = topLevelDesign (u)持久mybboxObj myramObj如果isempty (mybboxObj) mybboxObj = CounterBbox;%实例化黑盒myramObj =高密度脂蛋白。RAM (“RAMType”、“双港”);日元=结束步骤(mybboxObj u);%调用系统对象的步骤方法[~,y2] =步骤(myramObj, uint8 (10), uint8(0),真的,uint8 (20);

下面的示例代码显示了一个试验台的功能topLevelDesign函数。

明确topLevelDesign日元= 0 (1200);y2 = 0 (1200);2 = 1:200 (y1 (ii), y2 (ii)] = topLevelDesign (ii);最后情节([1:200],y2)

生成HDL代码

生成HDL代码使用设计函数和试验台的代码。

当你使用生成的HDL代码,包括定制高密度脂蛋白HDL代码与生成的文件。

示例代码

在以下硬件描述语言(VHDL)生成的®代码CounterBbox示例中,您可以看到CounterBbox实例的MATLAB代码映射到一个高密度脂蛋白组件定义和实例化,但HDL代码不是生成的一步方法。

图书馆IEEE;使用IEEE.std_logic_1164.ALL;使用IEEE.numeric_std.ALL;实体foo端口(std_logic clk:;重置:std_logic;在std_logic clk_enable:;u: std_logic_vector(7报纸0);——uint8 ce_out: std_logic;日元:真正的;——双重y2: std_logic_vector(7报纸0)——uint8); END foo; ARCHITECTURE rtl OF foo IS -- Component Declarations COMPONENT CounterBbox PORT( clk : IN std_logic; clk_enable : IN std_logic; reset : IN std_logic; myin : IN std_logic_vector(7 DOWNTO 0); -- uint8 myout : OUT real -- double ); END COMPONENT; COMPONENT DualPortRAM_Inst0 PORT( clk : IN std_logic; enb : IN std_logic; wr_din : IN std_logic_vector(7 DOWNTO 0); -- uint8 wr_addr : IN std_logic_vector(7 DOWNTO 0); -- uint8 wr_en : IN std_logic; rd_addr : IN std_logic_vector(7 DOWNTO 0); -- uint8 wr_dout : OUT std_logic_vector(7 DOWNTO 0); -- uint8 rd_dout : OUT std_logic_vector(7 DOWNTO 0) -- uint8 ); END COMPONENT; -- Component Configuration Statements FOR ALL : CounterBbox USE ENTITY work.CounterBbox(rtl); FOR ALL : DualPortRAM_Inst0 USE ENTITY work.DualPortRAM_Inst0(rtl); -- Signals SIGNAL enb : std_logic; SIGNAL varargout_1 : real := 0.0; -- double SIGNAL tmp : unsigned(7 DOWNTO 0); -- uint8 SIGNAL tmp_1 : unsigned(7 DOWNTO 0); -- uint8 SIGNAL tmp_2 : std_logic; SIGNAL tmp_3 : unsigned(7 DOWNTO 0); -- uint8 SIGNAL varargout_1_1 : std_logic_vector(7 DOWNTO 0); -- ufix8 SIGNAL varargout_2 : std_logic_vector(7 DOWNTO 0); -- ufix8 BEGIN u_CounterBbox : CounterBbox PORT MAP( clk => clk, clk_enable => enb, reset => reset, myin => u, -- uint8 myout => varargout_1 -- double ); u_DualPortRAM_Inst0 : DualPortRAM_Inst0 PORT MAP( clk => clk, enb => enb, wr_din => std_logic_vector(tmp), -- uint8 wr_addr => std_logic_vector(tmp_1), -- uint8 wr_en => tmp_2, rd_addr => std_logic_vector(tmp_3), -- uint8 wr_dout => varargout_1_1, -- uint8 rd_dout => varargout_2 -- uint8 ); enb <= clk_enable; y1 <= varargout_1; --y2 = u; tmp <= to_unsigned(2#00001010#, 8); tmp_1 <= to_unsigned(2#00000000#, 8); tmp_2 <= '1'; tmp_3 <= to_unsigned(2#00010100#, 8); ce_out <= clk_enable; y2 <= varargout_2; END rtl;

限制hdl.BlackBox

你不能使用hdl.BlackBox赋值到硬件描述语言(VHDL)通用的或Verilog®参数在定制HDL代码。

另请参阅

相关的话题