一定要文采斐然嘛,我磕磕绊绊,叙意不清的语句,也是我一个字一个字敲出来的呀!记录一下,不然我自己都忘了。
先来个预备操作
先在Matlab中做些准备,好在Simulink中通过From Workspace直接引用数据,方便后续的仿真啊、tb文件啥的。
%% time duration
N = 1;
%% list entries
x1 = 1;
x2 = 2;
x1_in(:,1) = 1:N;
x1_in(:,2) = x1;
x2_in(:,1) = 1:N;
x2_in(:,2) = x2;
因为Simulink中输入需要加上时间序列,由1开始算起,这里只是两个数进行相加,所以只需要1个时间长度就好。记得运行一下,不然工作区没有值是没法正常运行的。
Simulink中的可视化
1、进入到Simulink找到Library Browser,点击打开会出现很多图形框框。只需要拖动到空白区域即可。
这里主要是需要Xilinx blockset的方块,其中这个红色logoSystem Generator是必须拖入空白区域的,用作文件生成的。
2、在Simulink的选项下找到,From Workspace和To Workspace用作工作区数据的应用以及结果在工作区进行显示。Data改为工作区中的序列名即可。
3、那就把数字加起来即可,如果对位数和有无符号有要求的就逐个将各模块的位数和有无符号进行修改,个人采用8位无符号位。直接运行。
4、查看仿真结果
前面写的是1+2,那现在y=3,那仿真便是成功的。
5、仿真成功那就可以生成IP核了。双击红色logoSystem Generator
Compilation中选择 IP Catalog,语言就选择Verilog,地址处尤为注意,英文不能带空格,当初查问题查了大半天。
在Vivado中复现一下
1、先添加一下IP核
2、再写个文件引用一下
module ADD_8(
input [7:0]x1,
input [7:0]x2,
input clk,
output [7:0]y
);
one_0 t_one_0 (
.x1(x1), // input wire [7 : 0] x1
.x2(x2), // input wire [7 : 0] x2
.clk(clk), // input wire clk
.y(y) // output wire [7 : 0] y
);
endmodule
可以看到产生的结果会产生一个延迟,这个Simulink中,加法产生的一个延迟是一样的。,也算是制作成功。
小结一下
虽然这个8位数加法有跟没有一样,不过以此基础或者说记得怎么做也是不错的使用。