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

VL27 不重叠序列检测

这里最大的问题是:
always @(*) always @(posedge clk or negedge rst_n)的区别
always @(*) 在当前时钟内会变化
always @(posedge clk or negedge rst_n)由时钟驱动,所以会在下一个时钟才发生变化

代码

module sequence_detect(input clk,input rst_n,input data,output reg match,output reg not_match);parameter zero=0,one=1,two=2,three=3,four=4,five=5,six=6,fail=7;reg [2:0] current_stage,next_stage;reg [2:0] cnt;always @(posedge clk or negedge rst_n) beginif(~rst_n)begincnt <= 3'b0 ;endelse begin cnt <= (cnt == 3'd6) ? 3'b1: cnt+ 3'b1 ;endendalways @(posedge clk or negedge rst_n) beginif(~rst_n)begincurrent_stage <= zero;endelse begincurrent_stage <= next_stage;endendalways @(*) beginif(~rst_n)beginnext_stage <= zero;endelse begincase(current_stage)zero  : next_stage = data==1'b0 ? one  : fail;one   : next_stage = data==1'b1 ? two  : fail;two   : next_stage = data==1'b1 ? three: fail;three : next_stage = data==1'b1 ? four : fail;four  : next_stage = data==1'b0 ? five : fail;five  : next_stage = data==1'b0 ? six  : fail;six   : next_stage = data==1'b0 ? one  : fail;fail : next_stage = (cnt == 6 && data == 1'b0) ? one : fail ;default : next_stage = zero;     endcaseendendalways @(*) beginif(~rst_n)beginmatch <= 1'b0 ;not_match <= 1'b0;endelse beginmatch <= (cnt == 6 && current_stage == six) ;not_match <= (cnt == 6 && current_stage == fail);endendendmodule

testbench

  
module testbench_sequence_detect;  reg clk, rst_n, data;  wire match, not_match;  // Instantiate the Unit Under Test (UUT)  sequence_detect uut (  .clk(clk),   .rst_n(rst_n),   .data(data),   .match(match),   .not_match(not_match)  );  // Clock generation  initial begin  clk = 1;  forever #(5) clk = ~clk;  // Generate a 10ns period clock signal  end  // Test stimulus  initial begin   rst_n = 0;  
//        data = 0;  #10;  // Reset the module  rst_n = 1;data = 0;  #10;  // Send a sequence that does not match the expected pattern  
//        data = 1'b0; #10;  data = 1'b1; #10;  data = 1'b1; #10;  data = 1'b1; #10;  data = 1'b0; #10;  data = 1'b0; #10;  data = 1'b0; #10; // Check if not_match is asserted  if (not_match) begin  $display("Sequence did not match at time %t", $time);  end else begin  $display("Test failed: not_match was not asserted when expected");  
//            $finish;  end  //        // Reset the state  
//        #10;  
//        rst_n = 0;  
//        #10;  
//        rst_n = 1;  // Send the correct sequence  data = 1'b0; #10;  data = 1'b1; #10;  data = 1'b1; #10;  data = 1'b1; #10;  data = 1'b0; #10;  data = 1'b0; #10;  data = 1'b0; #10;  // Check if match is asserted  if (match) begin  $display("Sequence matched at time %t", $time);  end else begin  $display("Test failed: match was not asserted when expected");  
//            $finish;  end  // Finish the simulation  $finish;  end  endmodule

相关文章:

  • harbor -- docker私有仓库安装配置
  • 基于SpringBoot+Vue二手家电管理平台设计和实现(源码+LW+调试文档+讲解等)
  • 【再探】Java—Java 沙箱机制与类加载器
  • STM32远程更新
  • Docker的部署与基本使用
  • $nextTick的使用场景介绍
  • Python使用rosbag使用getattr只能获取一层的数据,不能直接获取多层数据例如 a.b.c.d。使用for range写一个递归用来获取多层数据
  • SmartEDA:革新电路设计,体验前所未有的创新乐趣!
  • CVE-2022-4230
  • 【TB作品】MSP430F149 单片机 音乐喷泉
  • Spring Cloud工程添加子模块打包后文件为war包而非jar包
  • C语言小例程6/100
  • 【Linux】线程控制
  • MongoDB CRUD操作:地理位置查询
  • 操作系统教材第6版——个人笔记6
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android优雅地处理按钮重复点击
  • angular学习第一篇-----环境搭建
  • FastReport在线报表设计器工作原理
  • k8s如何管理Pod
  • Linux CTF 逆向入门
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL-事务管理(基础)
  • ng6--错误信息小结(持续更新)
  • node.js
  • SOFAMosn配置模型
  • Wamp集成环境 添加PHP的新版本
  • 对超线程几个不同角度的解释
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 基于Android乐音识别(2)
  • 深度学习在携程攻略社区的应用
  • 再谈express与koa的对比
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)STL算法之元素计数
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)springcloud实战之config配置中心
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (三)模仿学习-Action数据的模仿
  • (一)认识微服务
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET 5种线程安全集合
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net core 6 redis操作类
  • .NET Core引入性能分析引导优化
  • .NET delegate 委托 、 Event 事件
  • .NET/C# 使用反射注册事件
  • .Net6 Api Swagger配置