当前位置: 首页 > article >正文

项目三:信号源的FPGA实现

本文以Altera公司生产的Cyclone IV系列的EP4CE15F17C8为主芯片的CRD500开发板作为项目的硬件实现平台,并以Quarter 18.1和ModelSim为开发工具和仿真工具。

目录

一、项目要求

二、设计实现步骤

三、实现

1、matlab下模拟信号源数据的产生

2、matlab下模拟信号源数据的量化

 3、信号源的FPGA实现

(1)IP核参数设置

(2)时钟信号 

(3)信号源 

(4)编译下载


 

一、项目要求

项目名称:MLS测角信号的FPGA实现

项目要求:采用FPGA+D/A的方式,产生MLS的测角信号。具体要求为:测角信号由往、返扫描脉冲与噪声组成,信噪比为+3dB,往、返扫描脉冲为宽度是200us的钟形脉冲(用频率为5KHz的余弦波形表示),两个脉冲间的间隔为1800us,采用matlab生成信号源数据时,采样频率为6.25MHz。

二、设计实现步骤

        采用matlab辅助设计模拟信号源

        1、在matlab下产生模拟信号源的数据

        2、对模拟信号源数据进行量化

        3、利用量化后的、满足单口ROM格式要求的数据(必须是无符号二进制数据)生成.mif文件

        4、基于.mif文件与单口ROM IP核,在quartus下产生时钟、地址等信号,实时读取数据,送到D/A转换器

        5、在时钟作用下完成D/A转换,得到模拟信号

三、实现

1、matlab下模拟信号源数据的产生

% MLS_signal.m

clc;clear;close all;
N=12;                % 数据量化位数
fs=6.25*10^6;        % 采样率
delta=0.16*10^-6;    % 采样间隔    
for n=1:1000
    s(n)=0;
end
for n=1001:2251
    s(n)=cos(2*pi*(n-1001)*5*10^3*delta+pi)+1;
end
for n=2252:12251
    s(n)=0;
end
for n=12252:13502
    s(n)=cos(2*pi*(n-12252)*5*10^3*delta+pi)+1;
end
for n=13503:14503
    s(n)=0;
end
snr=3;                % 信噪比
randn('state',sum(100*clock));
noise=randn(size(s));
noise=noise-mean(noise);
signal_power=1/length(s)*sum(s.*s);            % 计算信号平均功率
noise_variance=signal_power/(10^(snr/10));     % 计算噪声方差(功率)
noise=sqrt(noise_variance)/std(noise)*noise;   % 计算噪声幅度
x=s+noise;
long=0.16*10^-6:(0.16*10^-6):(14503*0.16*10^-6);
plot(long,s);
xlabel('时间/s');ylabel('幅度/v');
figure;
plot(long,x);
xlabel('时间/s');ylabel('幅度/v');

2、matlab下模拟信号源数据的量化

% Q_MLS_signal.m 
% 对产生的信号进行量化,量化结果存入.mif文件,以用于生成信号源
x1 = (x/max(abs(x))+1)/2;    % 归一化正数(0~1)
Q_x = round(x1*(2^N-1));     % 12位量化
figure;
plot(long,Q_x);
xlabel('时间/s');ylabel('幅度/v');
fid=fopen('D:\Verilog\txhFPGA\signal_produce(iir)\signal_rom.mif','w');
fprintf(fid,'WIDTH=12;\r\n');
fprintf(fid,'DEPTH=14503;\r\n\r\n');
fprintf(fid,'ADDRESS_RADIX=UNS;\r\n');
fprintf(fid,'DATA_RADIX=UNS;\r\n');
fprintf(fid,'CONTENT BEGIN\r\n');
for nn=0:length(Q_x)-1
    fprintf(fid,'%d:%d;\r\n',nn,Q_x(nn+1));
end
fprintf(fid,'END;\r\n');
fclose(fid);

量化后生成的12位无符号二进制数据存储在signal_rom.mif文件中

matlab产生的模拟信号源波形和经量化后的波形分别如下所示

 3、信号源的FPGA实现

(1)IP核参数设置

在IP Catalog中输入 ROM ,再双击”ROM:1-PORT“,进入创建IP核界面

上图中的”signal_rom.mif“文件是用matlab产生的

 单击”Finish“按钮,完成IP核的设计

在设置的文件夹中可查看生成的IP核,打开”signal_produce_IP.v“,可查看该IP核的输入、输出端口信号等详细信息。

(2)时钟信号 

// clk_produce.v 程序
// 功能:产生6.25MHz的时钟频率,作为单口ROM读取数据的时钟以及D/A转换(D/A时钟与A/D时钟应一致)
module clk_produce(rst,gclk,clk);
	input rst;    // 复位信号,高电平有效
	input gclk;   // 板载信号,50MHz
	output clk;   // 8分频时钟
	wire rst,gclk;
	reg clk=1'b0;
	reg[2:0] count = 3'b000;
	always @(posedge gclk)
		begin
			count=count+3'd1;
			if(count==3'd4)
				begin
					clk=~clk;
					count=3'd0;
				end
		end
endmodule

(3)信号源 

// 信号源signal_produce.v 程序
// 功能:产生循环读取单口ROM数据的地址,并将数据的高八位送到外部D/A转换器(存储的数据为12位无符号二进制数,外部D/A转换器要求输入数据位8位无符号二进制数)
module signal_produce(rst,gclk2,clk2,da2_data);
	input rst;
	input gclk2;            // 板载时钟为50MHz
	output clk2;            // 8分频时钟,6.25MHz
	output [7:0] da2_data;  // 送给DA2的8位无符号二进制整数
	wire unsigned[11:0] signal;
	reg[13:0] address = 14'b00000000000000;
	always @(posedge clk2)    // 循环产生ROM存储单元的地址
		begin
			address=address+14'b00000000000001;
			if(address==14'b11100000000000)
				begin
					address=14'b00000000000000;
				end
		end
clk_produce u1(.rst(rst),.gclk(gclk2),.clk(clk2));
signal_produce_IP u2(.address(address),.clock(clk2),.q(signal));
assign da2_data=signal[11:4];    // 高8位数据作为外部D/A转换器的输入
endmodule

(4)编译下载

将 signal_produce.v 作为顶层设计,创建项目,开始编译

编译无误后,绑定引脚(根据FPGA器件上D/A转换器引脚对应关系绑定)

        引脚绑定后,再次编译,将编译后生成的.sof程序下载到FPGA中运行,采用示波器观测的D/A转换器输出波形。

        该图片与matlab生成的模拟信号源波形一致,验证项目成功


http://www.kler.cn/a/455263.html

相关文章:

  • 机器学习详解(11):分类任务的模型评估标准
  • STM32高级物联网通信之以太网通讯
  • sql group by 多个字段例子
  • 解决VMware的ubuntu22虚拟机没有网络
  • 15、【OS】【Nuttx】OS裁剪,运行指定程序,周期打印当前任务
  • PHP 数组
  • 蓝牙链路控制(Link Control)命令概览
  • 【音视频工具系列】streamEye 工具分析 H264 码流详细教程
  • Scala的统计
  • 转运机器人推动制造业智能化转型升级
  • Vue3响应式数据: 深入分析Ref与Reactive
  • 系统压力测试助手——stress-ng
  • 阿里云新用户服务器配置
  • 多技术栈时代的利器:自动化协作流水线全面实践
  • c#多线程之生产者-消费者模型
  • 深度学习中的并行策略概述:2 Data Parallelism
  • YOLO模型格式转换:pt -> onnx -> rknn
  • 使用Python实现量子电路模拟:走进量子计算的世界
  • 咨询团队如何通过轻量型工具优化项目管理和提高团队协作效率?
  • #渗透测试#漏洞利用#红蓝攻防#信息泄露漏洞#Tomcat信息泄露漏洞的利用
  • 计算机毕设-基于springboot的游戏创意工坊与推广平台的设计与实现(附源码+lw+ppt+开题报告)
  • Jenkins安全部署规范及安全基线
  • 微信小程序UI自动化测试实践 !
  • Browser Use:AI智能体自动化操作浏览器的开源工具
  • 机器学习DAY3续:逻辑回归、极大似然、梯度下降 (逻辑回归完)
  • UE--如何用 Python 调用 C++ 及蓝图函数