System Generator初步使用

System Generator初步使用_第1张图片
System Generator初步使用_第2张图片

  • Xilinx Blockset——Memory——ROM

System Generator初步使用_第3张图片
System Generator初步使用_第4张图片

  • Xilinx Blockset——Math- Counter

System Generator初步使用_第5张图片
demo.m

clc;clear all;close all;
%%系统参数
N=1024;
Fs=10000;
Ts=1/Fs;
%%输入信号参数
A=1;
t=(0:1024-1)*Ts;
f=50;
n=Fs/f;
x=A*sin(2*pi*f*t);

figure(1)
plot(t,x);
hold on;  %%绘制在一张图中保持图形

%%乘法、加法、延迟
C=2;
D=n/2; %%做相位偏移

%%y_0=C*x;(FPGA并行运算,要按时钟周期写入信号)
y_0=zeros(1,N);  %%设立矩阵
y_1=zeros(1,N);
y=zeros(1,N); 
for i=1:N
    y_0(i)=C*x(i);
    if(i>D)
        y_1(i)=y_0(i-D);  %%延迟时间写入D个时间前的数
    end   
    y(i)=y_0(i)+y_1(i);
end

figure(1)
plot(t,y);%%半个周期位移后,部分信号抵消,部分信号叠加
legend('Input signal','Output signal'); %%按顺序对信号进行定义

x_in(:,1)=1:N;
x_in(:,2)=x;  %%Simin模块从工作路径中输入函数,第一列为时间序列,第二列为数据,按F9运行选中部分代码

工作区各函数值,需要注意的是我们定义的x_in信号,第一列为时间序列,第二列为数据,用作From workspace(simin)【Simulink—Source】的输入;但当用ROM做输入时只需要调用x的数据即可。
System Generator初步使用_第6张图片
matlab代码仿真信号:
System Generator初步使用_第7张图片
关于波形设置:

  1. 右键数据,Waveform Style——Analog Settings
    System Generator初步使用_第8张图片
  2. Radix——Real Settings
    System Generator初步使用_第9张图片
    但ILA现实仿真中,信号结果与仿真不符合,是因为硬件时延导致,因此我们在simulink仿真中,设置2048个时间单位进行一次波形仿真,查看波形后可发现,ILA调试是正确的。
    System Generator初步使用_第10张图片
    System Generator初步使用_第11张图片
    关于ILA数据导出:右键,选择Export ILA Data,数据格式选择CSV格式(示波器导出的数据格式也为CSV),并将文件复制到matlab路径中。注意在导出前将数据格式改为定点数,本代码要改为有符号十进制(Signed Decima)。
    System Generator初步使用_第12张图片
    System Generator初步使用_第13张图片
    ila_read.m
// An highlighted block
clc;clear all;close all;
N = 1024; %深度
m = 32;   %位宽
%导入数据
row = 1;%对应CSV中的第2行
col_i = 3;%对应CSV中的第4行
col_o = 4;%对应CSV中的第5行
input_0 = csvread('iladata.csv',row,col_i,[row,col_i,row + N-1,col_i]);
output_0 = csvread('iladata.csv',row,col_o,[row,col_o,row + N-1,col_o]);
%导出数据
input_1 = abs(input_0);%提取符号位
output_1 = abs(output_0);%提取符号位
signed_i = input_0./input_1;%当input_0等于0时,除法会得到NaN
signed_i(find(isnan(signed_i)==1)) = 0;%NaN转化为0

signed_o = output_0./output_1;%当output_0等于0时,除法会得到NaN
signed_o(find(isnan(signed_o)==1)) = 0;%NaN转化为0

input_1_b = dec2bin(input_1);%十进制转换为2进制
output_1_b = dec2bin(output_1);%十进制转换为2进制

input_int = input_1_b(:,1);%此处整数位只有1
input_dec = input_1_b(:,2:17);%16位小数位

output_int = output_1_b(:,1);%此处整数位只有1
output_dec = output_1_b(:,2:17);%16位小数位

input_I = bin2dec(input_int);%整数位直接2进制转十进制
input_D = zeros(N,1);%小数位运算
for i = 1:N
	for j = 1:16
	input_D(i) = input_D(i) + 2^(-j)*str2num(input_dec(i,j));
	end
end
input = signed_i.*(input_I + input_D);%符号位*(整数+小数)
figure(1);
subplot(2,1,1);
plot(input);

output_I = bin2dec(output_int);
output_D = zeros(N,1);
for i = 1:N
	for j = 1:16
	output_D(i) = output_D(i) + 2^(-j)*str2num(output_dec(i,j));
	end
end
output = signed_o.*(output_I + output_D);
figure(1);
subplot(2,1,2);
plot(output);

在此感谢Bilibili UP的分享 link

你可能感兴趣的:(SG,Vivado,fpga开发)