主要内容

复杂数据类型支持金宝app

宣布复杂的信号

以下的MATLAB®代码声明了几个局部复杂变量。xy由复常数赋值声明;z是使用复杂的()函数。

函数[x, y, z] = fcn%创建8位复杂常量X = uint8(1 + 2i);Y = uint8(3 + 4j);Z = uint8(complex(5, 6));

下面的代码示例显示了VHDL®从前面的MATLAB代码生成的代码。

ENTITY complex_decl IS PORT (clk: IN std_logic;clk_enable: IN std_logic;reset: IN std_logic;x_re: OUT std_logic_vector(7 DOWNTO 0);x_im: OUT std_logic_vector(7 DOWNTO 0);y_re: OUT std_logic_vector(7 DOWNTO 0);y_im: OUT std_logic_vector(7 DOWNTO 0);z_re: OUT std_logic_vector(7 DOWNTO 0);z_im: OUT std_logic_vector(7 DOWNTO 0));complex_decl结束; ARCHITECTURE fsm_SFHDL OF complex_decl IS BEGIN x_re <= std_logic_vector(to_unsigned(1, 8)); x_im <= std_logic_vector(to_unsigned(2, 8)); y_re <= std_logic_vector(to_unsigned(3, 8)); y_im <= std_logic_vector(to_unsigned(4, 8)); z_re <= std_logic_vector(to_unsigned(5, 8)); z_im <= std_logic_vector(to_unsigned(6, 8)); END fsm_SFHDL;

如示例所示,在MATLAB代码中声明的复杂输入、输出和局部变量可扩展为实信号和虚信号。这些派生信号的命名约定是:

  • 实分量具有与原始复信号相同的名称,并以默认字符串作为后缀“_re”(例如,x_re)。若要指定不同的后缀,请设置复数实部后缀选项(或相应的ComplexRealPostfixCLI属性)。

  • 虚分量具有与原始复信号相同的名称,并以字符串作为后缀“_im”(例如,x_im)。若要指定不同的后缀,请设置复虚部后缀选项(或相应的ComplexImagPostfixCLI属性)。

在MATLAB代码中声明的复杂变量在整个程序过程中仍然是复杂的。

复信号和实信号之间的转换

MATLAB代码提供访问的领域的一个复杂的信号通过真正的()图像放大()函数,如下面的代码所示。

函数[Re_part, Im_part] = fcn (c)%输出复数输入信号的实部和虚部Re_part =实际(c);Im_part =图像放大(c);

HDL Coder™支金宝app持这些结构,在生成的HDL代码中访问相应的实信号和虚信号成分。在下面的Verilog中®代码示例,MATLAB复信号变量c是平化为信号吗c_rec_im。每个信号都被赋值给输出变量Re_partIm_part,分别。

模块Complex_To_Real_Imag (clk, clk_enable, reset, c_re, c_im, Re_part, Im_part);输入时钟;输入clk_enable;输入重置;输入(握)c_re;输入(握)c_im;输出(握)Re_part;输出(握)Im_part;//复输入信号的输出实部和虚部赋值Re_part = c_re;赋值给Im_part = c_im;

金宝app复数向量的支持

你可以为复数向量生成HDL代码。与标量复数一样,复数的向量在生成的HDL代码中被简化为实部和虚部的向量。

例如在下面的脚本中t是基类型的复向量变量吗ufix4和大小[1,2]

函数Y = fcn(u1, u2) t = [u1 u2];y = t + 1;

在生成的HDL代码中变量t用相同的二元数组分解为实部和虚部。。

变量t_re: vector_of_unsigned4(0到3);变量t_im: vector_of_unsigned4(0到3);

复数的实部和虚部具有相同的向量类型ufix4,如下面的代码所示。

TYPE vector_of_unsigned4 IS ARRAY (NATURAL RANGE <>) OF unsigned(3 DOWNTO 0); / /无符号数组

基于复数矢量的运算(+,-,*等等,)同样被分解成实部和虚部的向量。对这些向量的元素进行独立的运算,遵循复数向量的MATLAB语义。

在VHDL和Verilog代码从MATLAB代码生成,复杂的矢量端口总是扁平化。如果在输入和输出上出现复向量变量,实向量和虚向量分量将进一步平化为标量。

在下面的代码中,u1u2标量是复数和吗y是一个复数向量。

函数Y = fcn(u1, u2) t = [u1 u2];y = t + 1;

这将在VHDL实体定义中生成以下端口声明。

实体_MATLAB_Function IS PORT (clk: IN std_logic;clk_enable: IN std_logic;reset: IN std_logic;u1_re: IN vector_of_std_logic_vector4(0 TO 1);u1_im: IN vector_of_std_logic_vector4(0 TO 1);u2_re: IN vector_of_std_logic_vector4(0 TO 1);u2_im: IN vector_of_std_logic_vector4(0 TO 1);y_re: OUT vector_of_std_logic_vector32(0 TO 3);y_im: OUT vector_of_std_logic_vector32(0 TO 3);_MATLAB_Function结束;

另请参阅

|

相关的话题