0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

m序列的verilog实现以及使能信号解决跨时终域问题

冬至子 来源:Bug记录 作者:woodfan 2023-06-16 15:12 次阅读

根据《通信原理》一书可知,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。

图片

从书上拍下的图 图1

图片

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

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

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

m序列的实现大致如下:

图片

图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端,实现起来方便;

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

设计内容如下:

图片

图3

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

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

最后的VCS仿真图如下:

图片

图4 仿真图

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

总结:

  1. m序列实现原理较为简单,看图2的框图,通过这个框图实现verilog,进而实现相关的数字电路
  2. 为了避免跨时钟域问题,在高速时钟下想要低速运行时,可以使用使能信号降低电路的运行频率,避免跨时钟域问题,好处可以参见上面的内容;
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    428

    浏览量

    26480
  • 移位寄存器
    +关注

    关注

    2

    文章

    258

    浏览量

    22227
  • BPSK
    +关注

    关注

    0

    文章

    34

    浏览量

    22915
  • PLL电路
    +关注

    关注

    0

    文章

    92

    浏览量

    6395
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8211
收藏 人收藏

    评论

    相关推荐

    时钟控制信号传输设计方案

    clk2的时钟。当clk1比clk2的频率高时,则称模块1(相对于模块2)为快时钟,而模块2位为慢时钟。根据clk1和clk2是不是同步时钟,可以将上面的时钟
    发表于 10-16 15:47 1136次阅读
    <b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>控制<b class='flag-5'>信号</b>传输设计方案

    关于时钟信号的处理方法

    我在知乎看到了多bit信号时钟的问题,于是整理了一下自己对于时钟信号的处理方法。
    的头像 发表于 10-09 10:44 5969次阅读

    quartus仿真双口RAM 实现时钟通信

    双口RAM如何实现时钟通信啊?怎么在quartus ii仿真???
    发表于 05-02 21:51

    ajax如何克服

    如何克服ajax
    发表于 04-30 13:25

    怎么实现m序列信号发生器的设计?

    m序列信号发生器由那几部分组成?怎么实现m序列信号
    发表于 05-10 06:09

    FPGA时钟处理简介

    (10)FPGA时钟处理1.1 目录1)目录2)FPGA简介3)Verilog HDL简介4)FPGA时钟处理5)结语1.2 FPG
    发表于 02-23 07:47

    看看Stream信号里是如何做时钟握手的

    popArea里stream.m2sPipe,这个版本效率相较于前者,略低一些:StreamFifoCC这个就没有什么好说的了,通过fifo来实现stream信号时钟
    发表于 07-07 17:25

    FPGA电路实现m序列及应用

    ; 根据本原多项式,确定C0至Cn的取值,在图4找到对应的所有反馈支路; 根据反馈支路写出针对最高位的反馈表达式。 例如,在构建一个级数n=8的m序列时: m序列
    发表于 11-06 17:03

    时钟信号的几种同步方法研究

    时钟信号的同步方法应根据源时钟与目标时钟的相位关系、该信号的时间宽度和多个时钟
    发表于 05-09 15:21 63次下载
    <b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b><b class='flag-5'>信号</b>的几种同步方法研究

    使用Matlab和Verilog实现fibonacci序列包括源代码和testbench

    使用Matlab和Verilog实现fibonacci序列包括源代码和testbench(电源技术论坛app)-使用Matlab和Verilog实现
    发表于 09-16 14:41 13次下载
    使用Matlab和<b class='flag-5'>Verilog</b><b class='flag-5'>实现</b>fibonacci<b class='flag-5'>序列</b>包括源代码和testbench

    基于FPGA的时钟信号处理——MCU

    问题,不过请注意,今后的这些关于异步信号处理的文 章里将会重点从工程实践的角度出发,以一些特权同学遇到过的典型案例的设计为依托,从代码的角度来剖析一些特权同学认为经典的时钟信号处理
    发表于 11-01 16:24 11次下载
    基于FPGA的<b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b><b class='flag-5'>信号</b>处理——MCU

    单位宽信号如何时钟

    单位宽(Single bit)信号即该信号的位宽为1,通常控制信号居多。对于此类信号,如需时钟
    的头像 发表于 04-13 09:11 1280次阅读

    时钟电路设计:多位宽数据通过FIFO时钟

    FIFO是实现多位宽数据的异步时钟操作的常用方法,相比于握手方式,FIFO一方面允许发送端在每个时钟周期都发送数据,另一方面还可以对数据进行缓存。需要注意的是对FIFO控制信号的管
    的头像 发表于 05-11 14:01 2927次阅读
    <b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>电路设计:多位宽数据通过FIFO<b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>

    时钟电路设计总结

    时钟操作包括同步时钟操作和异步时钟操作。
    的头像 发表于 05-18 09:18 704次阅读
    <b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>电路设计总结

    时钟电路设计:单位宽信号如何时钟

    单位宽(Single bit)信号即该信号的位宽为1,通常控制信号居多。对于此类信号,如需时钟
    的头像 发表于 08-16 09:53 1216次阅读
    <b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>电路设计:单位宽<b class='flag-5'>信号</b>如何<b class='flag-5'>跨</b>时钟<b class='flag-5'>域</b>