基于FPGA的均匀白噪声的产生

这篇具有很好参考价值的文章主要介绍了基于FPGA的均匀白噪声的产生。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 设计流程

均匀白噪声的产生我们使用m序列来生成并且把数据导出到matlab中观察其直方图。

2 FPGA实现14位的m序列

我们使用6个本原多项式,从而扩展14阶m序列的重复周期,原来是2^14-1,现在在原来的基础上周期扩大6倍。

2.1 产生14位的移位寄存器

//这次,我尝试使用6个本原多项式来扩展其周期
module ms14_generate
(   data_1,
	clk, 
	rst_n, 
	en, 
	ms14, 
	r14
);
	//parameter INIT = 14'b0000_0000_0000_0001;
	//data_1为m序列的初始值,从外部输入的,一般就设置为1
	input wire [13:0]data_1;
	input clk, rst_n;
	input en;
	output wire ms14;
	output reg [13:0] r14;

	// ms8 赋值为 r8信号的最地位
	assign ms14 = r14[13];
    reg  r14_temp;
    parameter cnt_MAX= 14'd16383;
	reg [2:0]state;
	reg  [13:0] cnt0;	
	reg cnt0_flag;
	wire clk_2;
	always @ (posedge clk or negedge rst_n)begin
	if(!rst_n)
		r14 <= data_1;
	else if(en) begin
		r14[0] <= r14[1];
		r14[1] <= r14[2];
		r14[2] <= r14[3];
		r14[3] <= r14[4];
		r14[4] <= r14[5];
		r14[5] <= r14[6];
		r14[6] <= r14[7];
	    r14[7] <= r14[8];
		r14[8] <= r14[9];
		r14[9] <= r14[10];
		r14[10] <= r14[11];
		r14[11] <= r14[12];
		r14[12] <= r14[13];
		r14[13] <= r14_temp;

	end
	else	
		r14 <= r14;	
	end
    

2.2 切换不同的本原多项式

//由于14阶的m序列周期为16384,所以每隔16384个计数值,
//状态变一次,对应m序列的第14位赋不同的值。
	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			cnt0 <=14'd0;
		else 
			cnt0 <= cnt0+1'b1;
		
	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			state <=3'd0;
		else if(state == 3'd5 && cnt0 ==cnt_MAX-1)
		     state <=3'd0;
		else if(cnt0 ==cnt_MAX-1)	
			state <= state+1'b1;
//这里是在matlab命令行里面输入一个函数,就可以显示14阶的所有本原多项式
//具体函数可以百度
//下面的规律就是r14[x]里面的x要和D^y中y,两者加起来为14
//你可以在'd0那几行验证一下。	
	/*	
	D^14+D^13+D^10+D^4+D^2+D^1+1
    D^14+D^13+D^12+D^10+D^4+D^1+1
    D^14+D^13+D^10+D^6+D^2+D^1+1
    D^14+D^13+D^12+D^8+D^4+D^1+1
    D^14+D^12+D^10+D^1+1
    D^14+D^13+D^4+D^2+1	
   */
	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			r14_temp<=1'b0;
	    else case(state)
		'd0:   r14_temp <=  r14[0]^r14[1]^r14[4]^r14[10]^r14[12]^r14[13];
		'd1:   r14_temp <=  r14[0]^r14[1]^r14[2]^r14[4]^r14[10]^r14[13];
		'd2:   r14_temp <=  r14[0]^r14[2]^r14[4]^r14[13];
		'd3:   r14_temp <=  r14[0]^r14[1]^r14[4]^r14[8]^r14[12]^r14[13];
		'd4:   r14_temp <=  r14[0]^r14[1]^r14[10]^r14[12];
		'd5:   r14_temp <=  r14[0]^r14[1]^r14[2]^r14[6]^r14[10]^r14[13];
		default:r14_temp <=  r14[0]^r14[1]^r14[4]^r14[10]^r14[12]^r14[13];
        endcase


endmodule

3 modelism仿真,并把数据写入到TXT文件

3.1 verilog代码

`timescale 1ns/1ns

module ms14_generate_tb ();
  reg clk, rst_n;
  reg     [31:0] seed_val;
  integer fd;
  wire [7:0]  r14;
  wire  ms14;
  reg reseed;	
  
ms14_generate ms14_generate
(
	.clk(clk), 
	.rst_n(rst_n),
	.en(1),
	.ms14(ms14),
	.r14(r14)
);

initial begin
       clk = 0;
	   rst_n =0;
	   #20
	   rst_n =1;	   
   end

always #10 clk <=~clk;

initial begin 
    #1000
    //延迟一段时间,再写入txt文件里面
	reseed = 0;
    seed_val = 32'd1234;
    //上面两个我也不知道啥意思,直接用就好了
    fd  = $fopen ( "random.txt" , "w" ) ; 
    #10 reseed = 1;
    #10 reseed = 0;
    
    #10000000 ;
    $fclose ( fd ) ;

    $stop;
end
reg delay;
initial begin
    delay = 0;
    #400
    delay = 1;
end
always @(posedge clk_10M) begin
    if(delay)
       $fwrite (fd,"%d\n",$signed(r14)); 
	   //$fwrite (fd,"%d\n",(r14)); 
end
endmodule //tb_gauss_noise

3.2仿真结果

fpga产生白噪声,fpga开发
好,均匀噪声就生成了,不过我们最好还是导入到matlab中看看其结果

3.3噪声直方图

fpga产生白噪声,fpga开发
好!设计实现了!!!文章来源地址https://www.toymoban.com/news/detail-671438.html

到了这里,关于基于FPGA的均匀白噪声的产生的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA的DDS原理信号发生器设计 quartusII 9.1平台 Verilog HDL语言编程 可产生正弦波

    基于FPGA的DDS原理信号发生器设计 quartusII 9.1平台 Verilog HDL语言编程  可产生正弦波、方波、锯齿波以及三角波   频率幅度可调节   代码+原理图 在现代电子技术领域,针对各种应用的信号发生器是一种非常核心的设备,而基于现场可编程逻辑门阵列(FPGA)的直接数字合成(

    2024年04月27日
    浏览(62)
  • 基于FPGA的LFSR16位伪随机数产生算法实现,可以配置不同的随机数种子和改生成多项式,包含testbench

    目录 1.算法仿真效果 2.算法涉及理论知识概要 3.Verilog核心程序 4.完整算法代码文件 vivado2019.2仿真结果如下:           LFSR(线性反馈移位寄存器)提供了一种在微控制器上快速生成非序列数字列表的简单方法。生成伪随机数只需要右移操作和 XOR 操作。LFSR 完全由其多项式

    2024年02月11日
    浏览(44)
  • FPGA外部触发信号毛刺产生及滤波

    1、背景         最近在某个项目中,遇到输入给FPGA管脚的外部触发信号因为有毛刺产生,导致FPGA接收到的外部触发信号数量多于实际值。比如:用某个信号源产生1000个外部触发信号(上升沿触发方式)给到FPGA输入IO,实际上FPGA内部逻辑判定接收到的触发信号数量大于100

    2024年02月13日
    浏览(84)
  • 【FPGA时序异常原因分析】——详细解析FPGA时序异常产生的原因及处理方法

    【FPGA时序异常原因分析】——详细解析FPGA时序异常产生的原因及处理方法 FPGA是可编程逻辑器件,应用广泛。在使用FPGA时,偶尔会出现时序异常的情况,导致设计的功能无法正确实现。这对于任何工程师来说都是非常头疼的问题。本文将详细解析FPGA时序异常的原因,以及如

    2024年02月08日
    浏览(49)
  • FPGA设计中锁存器产生、避免与消除

      锁存器的产生主要有以下两种情况:(1)组合逻辑中使用保持状态;(2)组合逻辑中的if-else语句或case语句未列出所有可能性;   对于组合逻辑中,如果使用if-else语句,未补全else语句,则默认在其他条件下,数据均保持为原来的状态,那么也会产生锁存器。   而

    2024年02月03日
    浏览(41)
  • FPGA学习(2)m序列和gold序列的产生

           m序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移存器产生的周期最长的序列。一般来说,一个n级线性反馈移存器可能产生的最长周期等于。         m序列是一种典型的伪随机序列。在通信领域有着广泛的应用,如扩频通信、卫星通信的码分

    2024年02月11日
    浏览(39)
  • FPGA驱动RGB888屏幕——基于正点原子达芬奇FPGA开发板

    RGB888简介 一个像素点由三种颜色控制,每个颜色8bit,共24bit,三个字节,这就是RGB888。同样的还有RGB565等。 LCD屏幕介绍 1、HSYNC(水平同步信号、行同步信号):产生此信号,说明开始显示新的一行。 2、VSYNC(垂直同步信号、帧同步信号):当产生此信号的话就表示开始显示

    2024年02月04日
    浏览(47)
  • 【FPGA零基础学习之旅#5】产生非等占空比信号

    🎉欢迎来到FPGA专栏~产生非等占空比信号 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 我们通过LED的亮灭来展现等占空

    2024年02月05日
    浏览(53)
  • 孩子都能学会的FPGA:第十二课——利用内存产生正弦波

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月03日
    浏览(42)
  • 通信感知一体化之OCDM产生(MATLAB与FPGA实现)(一)

            OCDM信号是正交线性调频波分复用(Orthogonal Chirp Division Multiplexing)(可以去IEEE 官网上搜其原文,原文名字就是Orthogonal Chirp Division Multiplexing),OCDM 信号由Ouyang 于2016 年首次提出。由一组在时域与频域上重叠的啁啾(chirp)信号组成,且每一个啁啾信号在啁啾维度相互正交

    2024年02月03日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包