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

项目二:m序列的设计与实现(FPGA)

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

实验目的:产生m序列(长度为2^(15)-1,码元速率为 1 Mb/s)

目录

一、项目原理

二、实现步骤

(1)新建文件夹m_sequence

(2)创建工程

(3)编译

(4)仿真测试

        基于Quartus 自身工具模块的仿真

三、板载测试准备工作

1、引脚配置

2、下载.sof格式文件

3、转为为.jic文件下载到FPGA

四、板载测试


一、项目原理

伪随机噪声既具有类似于随机噪声的一些统计特性,又便于重复产生与处理,它具有随机噪声的优点又避免了随机噪声不可复制的缺点,得到了广泛的应用。目前,伪随机噪声由数字电路产生的周期序列得到,这种序列称为伪随机序列

伪随机序列的应用包括误码测试、时延测量、扩频通信、保密通信、卫星通信、北斗定位系统、数字信号源设计等,伪随机序列通常用反馈移位寄存器产生,分为线性反馈移位寄存器和非线性反馈移位寄存器两类。由线性反馈移位寄存器产生的周期最长的二进制数字序列称为最大长度线性反馈移位寄存器序列,简称为m序列

m序列具有以下特性:

(1)均衡性

        在m序列的一个周期中,0与1的数目基本相等,准确讲1的个数比0的个数多 1。

(2)游程特性

        一个序列中取值相同的、连在一起的元素称为一个“游程”。游程中元素的个数称为游程长度。m序列中,长度为1的游程占游程总数的12,长度为2的游程占游程总数的 1/4,…,长度为k的游程占游程总数的2^(-k),其中1≤k≤n-1。

(3)移位相加特性

        一个m序列 m1,与其经任意次延时移位产生的另一个不同序列m2模二加,得到的序列仍然是这个m序列的某个移位序列。

(4)相关特性

(5)随机特性

m序列可通过本原多项式产生。

本项目要求产生长度为2^(15)-1,码元速率为 1 Mb/s 的m序列,由上表图知其本原多项式为

得其实现原理图:

二、实现步骤

(1)新建文件夹m_sequence

        路径:D:\Verilog\txhFPGA\m_sequence

        注:文件夹名不能包含中文

(2)创建工程

输入程序,将其保存为m_sequence.v文件

//伪随机序列m_sequence.v
//m_out为m序列输出,速率为1MHz,长度为2^(15)-1,frame_out为帧同步信号,clk2为1MHz时钟,rst为复位信号,高电平复位,gclk为50MHz时钟

module m_sequence(input rst,gclk,output m_out,frame_out,clk2);
	clk_1M U1(.rst(rst), .gclk(gclk), .clk(clk2));
	m_sequence1 U2(.clr(rst), .clk2(clk2), .m_out(m_out), .frame_out(frame_out));
endmodule

创建工程:

将该代码存为clk_1M.v 

//clk_1M.v 程序
//功能:将系统时钟gclk进行50分频,产生1MHz时钟

module clk_1M(rst,gclk,clk);
	input rst;
	input gclk;
	output clk;
	wire 	rst,gclk;
	reg	clk=1'b0;
	reg[4:0]	count=5'b00000;
	always @(posedge gclk)
		begin
			count = count + 5'd1;
			if(count == 5'd25)
				begin
					clk = ~clk;
					count = 5'd0;
				end
		end
endmodule	

将该代码存为m_sequence1.v

//m_sequence1.v程序
//m_out为m序列,frame_out为帧同步信号,clk2为1MHz时钟

module m_sequence1(input clr,clk2,output reg m_out, frame_out);
	reg[14:0] shift_reg;
	always @(posedge clk2)
		begin
			if(clr)
				begin
					shift_reg <= 15'b1;
				end
			else
				begin
					shift_reg[0] <= shift_reg[13]^shift_reg[14];
					shift_reg[14:1] <= shift_reg[13:0];
					m_out <= shift_reg[14];
					frame_out <= (shift_reg[0] & shift_reg[1] & shift_reg[2] & shift_reg[3] & shift_reg[4] & shift_reg[5] & shift_reg[6] & shift_reg[7] & shift_reg[8] & shift_reg[9] & shift_reg[10] & shift_reg[11] & shift_reg[12] & shift_reg[13] & shift_reg[14]);
				end
		end
endmodule

再将这两个代码文件加入到工程中

(3)编译

添加后,对 m_sequence.v 文件进行编译

(4)仿真测试

        基于Quartus 自身工具模块的仿真

第一行为复位信号,第二行为50MHz时钟信号(由晶体振荡器产生)

第三行为1MHz时钟,第四行为m序列,第五行为同步信号(周期为2^(-15) -1 个码元)

设置rst前5us为高电平,gclk为50MHz的时钟频率,clk2为1MHz的时钟频率

运行仿真

结果显示

三、板载测试准备工作

1、引脚配置

对CRD500开发板进行引脚配置时,rst与复位键(P14位置)相连,晶体振荡器1提供50MHz时钟(M1位置),1MHz时钟信号、m序列以及同步信号由40针扩展接口输出(本项目分别配置为P3、P2、P1位置)。

注:引脚锁定后,需再次编译程序将引脚信息编译进下载文件中!

2、下载.sof格式文件

在“Tool”菜单中选择“Programmer”,进入Hardware Setup,查看是否检查到接口设备。

按下“start”开始下载,当右侧的“Process”栏显示为100%,则表示下载成功。

3、转为为.jic文件下载到FPGA

编译生成的.sof文件尽管可直接下载到FPGA中运行并进行性能测试,但断电后,由于FPGA的存储器为SRAM,而使得FPGA中的程序不复存在。要实现程序的脱机运行,还必须将程序下载到CRD500的FLASH芯片M25P16(与EPCS16兼容)中

由于.sof格式的文件还不能直接下载到FPGA,因此,需先进行格式转换,转化成适合下载到FPGA中的格式文件,即.jic文件

 进入”Convert Programming Files“,选择文件格式、设备以及输出的文件名

选中”Flash Loader“,再点击”Add Device“添加目标器件EP4CE15

选中”SOF Data“,单击”Add File“,在对话框中选择生成好的.sof文件 

完成以上操作后,单击”Generate“可生成.jic文件

然后就是下载,与.sof文件的下载方式一样

四、板载测试

示波器测试输出信号 1MHz时钟信号同步信号m序列的波形依次如下:

​​​​​​​


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

相关文章:

  • Jupyter Notebook的安装和配置提示功能
  • 【自动化Selenium】Python 网页自动化测试脚本(上)
  • 【PX4_Autopolite飞控源码】中飞控板初始化过程中的引脚IO控制(拉低/拉高)
  • R和Julia免疫细胞映射到组织切片
  • redis数据类型详解
  • [M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)
  • C++ 中的多继承
  • 【044】基于51单片机数码管时钟【Proteus仿真+Keil程序+报告+原理图】
  • PyQt5控件QWebEngineView(WebView)
  • yolov11剪枝
  • Hive-定时清理无用的临时表
  • Ajax局部刷新,异步请求
  • Java Map
  • 使用ElementUI中的el-table制作可编辑的表格
  • 做好技术文档的几大要素(按过往经验整理)
  • 二,[ACTF2020 新生赛]Include1感谢 Y1ng 师傅供题。
  • webrtc支持h265
  • OpenCV从入门到精通实战(七)——探索图像处理:自定义滤波与OpenCV卷积核
  • 【eNSP】ISIS动态路由协议实验
  • 0分享到机器人扩张工业时代大洗牌Profinet从转ModbusTCP协议网关已收藏
  • 图像处理里的傅里叶变换:原理与代码实现
  • 初阶数据结构之队列的实现
  • 力扣第 67 题 “二进制求和”
  • 零基础3分钟快速掌握 ——Linux【终端操作】及【常用指令】Ubuntu
  • 数据结构之栈:从原理到实现
  • 深入解析 ArrayList 源码:从动态扩容到高效存取的秘密