小舍YZ 发表于 2017-7-5 11:20:08

编译MATLAB设计生成FPGA代码

编译MATLAB设计生成FPGA代码

Xilinx公司提供了两种方法将MATLAB设计.m文件转化为HDL设计,一种就是利用AccelDSP综合器;另一种就是直接利用MCode模块。前者多应用于复杂或高速设计中,常用来完成高层次的IP核开发;而后者使用方便,支持MATLAB语言的有限子集,对实现算术运算、有限状态机和逻辑控制是非常有用的。本节内容以介绍MCode模块为主。

MCode模块实现的是装载在里面的.m函数的功能。此外,还能够使用Xilinx的定点类型数对.m函数进行评估。该模块使用回归状态变量以保证内部状态稳定不变,其输入、输出端口都由.m函数确定。

要使用MCode模块,必须实现编写.m函数,且代码文件必须和System Generator模型文件放在同一个文件夹中,或者处于MATLAB路径上的文件夹中。下面用两个实例来说明如何使用MCode模块。

例8-3 使用MATLAB编写一个简单的移位寄存器完成对输入数据乘8以及除以4的操作,并使用MCode将其编译成System Generator直接可用的定点模块。

1.相关的.m函数代码为:
function = xlsimpleshift(din)
% = xlsimpleshift(din) does a left shift 3 bits and a
% right shift 2 bits. The shift operation is accomplished by
% multiplication and division of power of two constant.
lsh3 = din * 8;
rsh2 = din / 4;
2.将.m函数添加到下列三个位置之一:
•        模型文件存放的位置;
•        模型目录下名字为private的子文件夹;
•        MATLAB路径下。
然后,新建一个System Generator设计,添加MCode模块,双击模块,在弹出页面中,通过Browse按键将.m函数和模型设计关联起来,如图7-18所示。

图7-18 MCode模块关联界面示意图

小舍YZ 发表于 2017-7-5 11:20:58

3.添加边界模块、Sytem Generator模块、正弦波测试激励以及示波器模块构成完整的设计,如图7-19所示。

图7-19 简单移位模块设计示意图

小舍YZ 发表于 2017-7-5 11:21:45

4.运行仿真,得到的结果如图7-20所示,从中可以看出,设计是正确的,正确实现了.m文件的功能。左图将信号放大了8倍,右图将信号缩小了4倍。

图7-20 简单移位模块仿真结果示意图

小舍YZ 发表于 2017-7-5 11:22:01

5.自动生成代码,得到的Verilog文件如下所列。

module myshift (
din,
dout1,
dout2
);

input din;
output dout1;
output dout2;

wire din_net;
wire dout1_net;
wire dout2_net;

assign din_net = din;
assign dout1 = dout1_net;
assign dout2 = dout2_net;

mcode_6b96190926 mcode (   
          .e(1'b0),
          .lk(1'b0),
          .lr(1'b0),
          .in(din_net),
          .sh3(dout1_net),
          .sh2(dout2_net)
);
endmodule

d643189658 发表于 2017-8-11 18:49:41

谢谢楼主的分享
页: [1]
查看完整版本: 编译MATLAB设计生成FPGA代码