有关用HDL Coder生成Verilog的资料实在太少,且大多是由Simulink搭建模块生成。笔者经过初步探索,将MATLAB代码直接通过HDL Coder生成Verilog代码的过程总结于此。
以一个最大值为15可加减计数器为例
在MATLAB上方的APP里找到HDL Coder,HDL Coder需要MATLAB Function和MATLAB Testbench两个文件,第一个即纯粹的函数or算法,第二个需要对其进行调用并保证能现在MATLAB上成功运行。
这里已经将两个文件添加了进去,添加完毕后再Workflow Advisor里设置生成的代码为Verilog,再运行即可。里面还可以设置仿真工具并生成testbench,但笔者尝试用生成的testbench进行仿真,并不能成功运行,且代码本身就杂乱非常。
这里给出counter.m和counter_tb.m两段代码
function [count] = counter(clk, rst)
persistent state
if isempty(state) || ~rst
state = 0;
elseif clk
state = state + 1;
if state == 16
state = 1;
end
end
count = state;
end
function counter_tb
% 创建时间和输入信号
time = 0:19;
clk = [0, ones(1, 9), 0, ones(1, 9)]; % 50% 占空比,10个时钟周期
rst = [0, ones(1, 19)]; % 第一个周期的复位信号高
% 初始化用于存储输出的数组
count_out = zeros(size(time));
% 模拟计数器
for i = 1:length(time)
count_out(i) = counter(clk(i), rst(i))
end
end
在Workflow Advisor中运行后会生成.v文件,保存的路径可以在左侧选HDL Code Generation下查看,这里给出生成的verilog代码,可以发现可读性比较差,自己在分析时加了些中文注释。
// -------------------------------------------------------------
// Generated by MATLAB 9.7, MATLAB Coder 4.3 and HDL Coder 3.15