我是靠谱客的博主 阔达大象,最近开发中收集的这篇文章主要介绍三态门有一个信号控制端en_(实现BPSK学习Verilog)2. m序列的verilog实现以及使能信号解决跨时钟域问题...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

9a730d1fabdaf63476d946e22bbe16ac.png

BPSK的Simulink仿真实现简单介绍了BPSK信号产生的整体流程,现在开始进行对应模块的verilog实现讲解。

本文主要介绍m序列的基础知识,m序列的verilog实现以及使能信号的使用问题。

m序列等verilog代码公开在这:

m序列​github.com
8c57a9bb121c9fe82bc5d5da65c8c866.png

根据《通信原理》一书可知,m序列是最长线性反馈移位寄存器的简称,它产生的伪随机序列的周期与其反馈移存器级数有关;

m序列的属性有很多,比如:

  1. 周期性,它的周期与它的反馈寄存器的级数有关,周期为2的级数N次方-1,比如级数为4,则周期为2^4-1,即15;
  2. 均衡性,一个周期内'1'的个数比'0'多一个;

假设一个4级m序列的初始状态为(a3,a2,a1,a0) = (1,0,0,0),特征多项式为23;

移位一次,a3与a0模2相加产生新的输入a4=1^0 = 1,则新的状态为(a3,a2,a1,a0) = (1,1,0,0),输出为0;

依次移位15次后又回到初始状态(1,0,0,0)。所以4级反馈移存器的周期为15。

cf026a601de499318948de97757330fa.png
从书上拍下的图 图1

d27018e1345da11f09ce086fffd16145.png
从书上拍下的m序列框架图 图2

从图2可以清晰的看出m序列的框架原理,只需要N位寄存器,并整体左移/右移,不断地做异或运算,产生新的值,;

以图1为例,使用特征多项式23,也就是'010 011',原始状态为'1000';参照图2的框照图,可以知道n = 4, c1 = c0 = c4 = 1, c2 = c3 = 0;

m序列的实现大致如下:

b02a2fd6b196c055acc08d27ffb0f0e1.png
图3 m序列产生always块

可以看到,当en为高的时候,data_count会更新相应的值,同时data_out会产生新的输出值;

en信号在这里作为一个使能信号,它的作用是为了解决高速时钟下低速运行的问题;

以m序列的产生为例,假设需要产生符号速率1Mbps的伪随机序列,而FPGA的晶振为50MHz,而初学者为了在50MHz下按照1MHz的频率运行,通常会用两种方法:

1. 使用各种分频的方法将50MHz分频出1MHz;

2. 使用PLL等IP核将50MHz输入之后锁定输出1MHz;

而这两种方法都会产生两种时钟域(1MHz,50MHz),两个时钟域之间的数据通信通常又会牵扯到跨时钟域同步,亚稳态等问题;

那么有没有一种方法能够在50MHz下按照1MHz的频率运行?有,使用使能信号控制频率运行。

使能信号的作用就相当于一个定时器闹钟,定时会拉高一次,提醒电路该运行一次了,然后电路进入空闲状态等待下一次使能信号拉高;

这么做的好处有以下几点:

  1. 减少了其他的时钟,FPGA设计需要遵循尽可能少的时钟域原则;异步时钟域之间的信号同步,亚稳态问题都可以避免;
  2. 降低了设计难度,不需要使用IP核,不需要考虑跨时钟域的处理;
  3. 便于FPGA实现,因为FPGA内部的寄存器本来就有使能en端,实现起来方便;

使能信号的产生原理也很简单,使用计数器不断地计数,同时使能信号保持低电平;当计数到固定值时,使能信号拉高,计数器归零;

设计内容如下:

dc82bb508db9497ff309afaf098c95ca.png
图3

这里INTERVAL是一个常量,可以在实例化的时候修改这个常量值;

其实这个常量值可以设为输入端口,这样可以在运行的过程中在线修改使能信号的周期,更为方便;

最后的VCS仿真图如下:

e2218ce01067a3e93b5f8d5fe2e70c23.png
图4 仿真图

得出来的数字与图1完全对应,仿真成功!

总结:

  1. m序列实现原理较为简单,看图2的框图,通过这个框图实现verilog,进而实现相关的数字电路;
  2. 为了避免跨时钟域问题,在高速时钟下想要低速运行时,可以使用使能信号降低电路的运行频率,避免跨时钟域问题,更多好处可以参见上面的内容;

欢迎查看相关的verilog代码,关注BUG记录公众号回复101获取本文的相关文件

6c9770d121be6a00f4804156ec0c36e3.png
微信号:bugrec

如果对于代码优化有更好的建议也可以提出来一起讨论,欢迎关注点赞收藏!


万物皆可卷积:(实现BPSK学习Verilog)1. Simulink仿真实现​zhuanlan.zhihu.com
2e9212fd2e7fcace901cfa8aa18a46cb.png
万物皆可卷积:(LVDS差分信号简单处理)5. 使用OSERDES发送高速串行数据​zhuanlan.zhihu.com
b14551d6caeb746135f91dd0ecb52e8b.png
万物皆可卷积:SPI发送协议的STM单片机实现- 利用CubeMx控制WS2812灯带​zhuanlan.zhihu.com
76ddc1712293e57d44d4921b948ddeb2.png

最后

以上就是阔达大象为你收集整理的三态门有一个信号控制端en_(实现BPSK学习Verilog)2. m序列的verilog实现以及使能信号解决跨时钟域问题...的全部内容,希望文章能够帮你解决三态门有一个信号控制端en_(实现BPSK学习Verilog)2. m序列的verilog实现以及使能信号解决跨时钟域问题...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部