目录

前言

无重叠序列产生

移位寄存器实现

状态机实现

有重叠序列产生

移位寄存器方式实现

状态机方式实现

博文推荐


前言

序列检测与序列产生是一对对称的设计,就像有微分就有积分一样。

序列检测分为有重叠检测和无重叠检测;

例如检测序列1101011,我们给出输入:110101101011,如果是无重叠检测,则只能检测到一个序列:1101011_01011;

如果是有重叠检测,则可以检测到两个这样的序列:11010_11_01011。

同理,序列产生也可以分为有重叠序列的产生方法和无重叠序列的产生方法,序列产生的办法也可以用移位寄存器产生,也可以用状态机的方式来产生;这两种方法后面都是提到。

由于序列检测我们之前写的太多了,所以这篇博文的重点不是序列检测而是序列产生。


无重叠序列产生

移位寄存器实现

以产生序列1101011为例,我们产生产生的序列要是这个样子的1101011_1101011..............

所以我们需要使用7位的移位寄存器,每次对序列1101011左移,同时输出最高位;7位的移位寄存器固然需要消耗7个触发器,这也是一个考点。

设计也极其简单,如下:

module seq_gen7(input clk,input reset,output out);reg [6:0] seq_mid;always@(posedge clk or posedge reset) beginif(reset) seq_mid <= 7'b1101011;else seq_mid <= {seq_mid[5:0], seq_mid[6]};endassign out = seq_mid[6];endmodule

仿真波形:

局部放大:

RTL原理图:

可见用了7个触发器。


状态机实现

移位寄存器实现方式,用了7个触发器构成一个7位的移位寄存器来实现上述无重叠序列产生,那如果我们用状态机实现的话, 我们只需要用3个触发器就可以实现,因为我们的状态变量只需要用3位即可,每一个状态产生一个输出,7个状态即可产生这样的一个序列。

设计也很简单,直接用二段式状态机:

module seq_gen7(input clk,input reset,output reg out
);parameter s0 = 3'd0, s1 = 3'd1, s2 = 3'd2, s3 = 3'd3, s4 = 3'd4, s5 = 3'd5, s6 = 3'd6;reg [2:0] cur_state, nxt_state;always@(posedge clk or posedge reset) beginif(reset) cur_state <= s0;else cur_state <= nxt_state;endalways@(*) beginnxt_state = s0;case(cur_state)s0: beginnxt_state = s1;out = 1;ends1: beginnxt_state = s2;out = 1;ends2: beginnxt_state = s3;out = 0;ends3: beginnxt_state = s4;out = 1;ends4: beginnxt_state = s5;out = 0;ends5: beginnxt_state = s6;out = 1;ends6: beginnxt_state = s0;out = 1;enddefault: beginnxt_state = s0;out = 1;endendcaseendendmodule

仿真波形如下图:

RTL原理图:

可见用了多少个触发器,只需要看时序逻辑部分,也就是状态机的跳转部分,状态变量用了几位就是几个触发器。


有重叠序列产生

移位寄存器方式实现

仍然以产生序列1101011为例,当然这里变成了有重叠序列,也就是产生的序列可以是如下样子:

110101101011...

这个序列中有两个1101011,二者共用11;

因此我们产生这样的序列只需要一个5位的移位寄存器即可:

设计也十分简单,如下:

//有重叠序列的移位寄存器实现
module seq_gen5(input clk,input reset,output out
);reg [4:0] seq_mid;always@(posedge clk or posedge reset) beginif(reset) seq_mid <= 5'b11010;else seq_mid <= {seq_mid[3:0], seq_mid[4]};endassign out = seq_mid[4];endmodule

行为仿真图如下:

对应的RTL原理图如下:

有了用了5位的移位寄存器,所以需要5个触发器即可实现。

状态机方式实现

设计文件:

//有重叠序列的状态机实现
module seq_gen5(input clk,input reset,output reg out
);parameter s0 = 3'd0, s1 = 3'd1, s2 = 3'd2, s3 = 3'd3, s4 = 3'd4;reg [2:0] cur_state, nxt_state;always@(posedge clk or posedge reset) beginif(reset) cur_state <= s0;else cur_state <= nxt_state;endalways@(*) beginnxt_state = s0;case(cur_state)s0: beginnxt_state = s1;out = 1;ends1: beginnxt_state = s2;out = 1;ends2: beginnxt_state = s3;out = 0;ends3: beginnxt_state = s4;out = 1;ends4: beginnxt_state = s0;out = 0;enddefault: beginnxt_state = s0;out = 1;endendcaseendendmodule

行为仿真图:

RTL原理图如下:

状态变量是3bit的,所以用3个触发器可以实现。


博文推荐

与本博文有关的其他博文列表如下:

序列检测:

序列检测器的Moore状态机实现

序列检测器的Mealy状态机实现

IC/FPGA校招笔试题分析(四)再看Moore状态机实现序列检测器

【Verilog HDL 训练】第 05 天(序列检测)


序列产生

序列信号产生器的verilog HDL 设计


最后的最后,如果让产生一个序列,并没有说是有重叠还是无重叠的,问你至少需要多少个触发器实现,那样的话,如果能设计成有重叠的就设计成有重叠的,那样的话就可以节省触发器数量。

有重叠与无重叠序列之序列检测与序列产生相关推荐

  1. Leetcode 435.无重叠区间 (每日一题 20210708 同类型题)

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠.注意:可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互重叠 ...

  2. 435. 无重叠区间(贪心算法)

    给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触",但没有相互 ...

  3. 通俗易懂:贪心算法(二):区间问题 (力扣435无重叠区间)

    看完本文,可以顺便解决leetcode以下题目: 435.无重叠区间(中等) 一.通俗易懂的 贪心算法 |思想 (重复一次~~~) 贪心算法就是采用贪心的策略,保证每一次的操作都是局部最优的,从而使得 ...

  4. Leetcode-435:无重叠区间

    题目链接 Leetcode-435:无重叠区间 题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2 ...

  5. 无重叠区间及用最少的箭射爆气球

    无重叠区间及用最少的箭射爆气球 文章目录 无重叠区间及用最少的箭射爆气球 **一:开胃菜** **二.无重叠区间** **三.用最少的箭射爆气球** 一:开胃菜 在开始所无重叠区间前先做一道简单的提来 ...

  6. 435. 无重叠区间(贪心经典题+思路+详解)

    一:题目: 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触" ...

  7. LeetCode 435. 无重叠区间(贪心/动态规划)

    文章目录 1. 题目 2. 解题 2.1 贪心 2.2 动态规划 1. 题目 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 ...

  8. LeetCode 435. 无重叠区间(贪婪算法)

    题目描述 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触", ...

  9. 贪心算法无重叠区间c语言,贪心算法之区间问题.md

    --- title: 贪心算法之区间问题 tags: - Leetcode categories: - Leetcode author: 四叶草 top: false abbrlink: 26230 ...

最新文章

  1. 《如何阅读一本书》之 阅读的层次
  2. Spring注解@Import详细使用说明
  3. Apache Camel 2.14中的更多指标
  4. 另一种声音:容器是不是未来?
  5. 2018麦考林杂志计算机科学,最新出炉|2018年麦考林杂志加拿大大学排名!
  6. [分享] Flask 网络开发经典书籍: Flask Web Development
  7. 使用ps工具进行图片分析
  8. python函数进阶小结_python函数的进阶
  9. 防抖(debounce) 和 节流(throttling)的封装使用-最终发布npm
  10. 什么是公考、联考、国考、省考、选调生?
  11. 少年不惧岁月长,彼方尚有荣光在
  12. weblogic漏洞总结复现
  13. c语言中gets 、getchar 、fgets 、scanf的用法
  14. Nodejs 中运行 JS 代码
  15. java 非侵入式_Java非侵入式API接口文档工具apigcc用法详解
  16. 小程序+阿里矢量图标图iconfont
  17. 百度地图定位和IP地址定位
  18. \left 和 \right 后面加一个“.” 表示什么意思?
  19. 小米android7.0,小米安卓7.0
  20. php开发如何一键群发几十个群,快手、头条、抖音群发软件,一键操控几十个账号的工具...

热门文章

  1. 高性能云计算展望(中)
  2. userinits.exe, wupcltr.exe的分析及解决办法
  3. matlab 文件名分离_MATLAB偏微分方程
  4. linux 内核调试 booting the kernel.,Uncompressing Linux...done, booting the kernel解决办法
  5. gsonformat插件_IntelliJ IDEA18个常用插件,动图演示,让你效率翻倍!
  6. java 老年代回收_Java垃圾回收之老年代垃圾收集器
  7. join为什么每个字符都分割了 js_js的join()与 split() (转)
  8. rocketmq新扩容的broker没有tps_RocketMQ吐血总结
  9. switchyomega规则列表备份_求人不如求己,自己动手写一个CSDN博客备份小工具?...
  10. 2021年春季学期-信号与系统-第十二次作业参考答案