序列检测一定要用状态机?
时间:2022-07-23
本文章向大家介绍序列检测一定要用状态机?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
那些年,你总是不停的说序列检测,每当有人谈到序列检测你便说自己会一、二、三段式moore、mealy型状态机,茴字有几种写法...
假设需要一个01101010比特流检测电路,并输出检测成果标志
当你开始考虑使用几个状态的时候,并好不容易写出以下代码的时候:
module detect2(
input clk,
input rst_n,
input din,
output reg flag
);
//reg [2:0]state=3'b000;
parameter IDLE=3'b000, //0
state1=3'd1, //1
state2=3'd2, //0
state3=3'd3, //1
state4=3'd4, //0
state5=3'd5, //1
state6=3'd6, //1
state7=3'd7; //0
reg [2:0]cur_state;
reg [2:0]nxt_state;
//第一个always块用于状态转移
always@(posedge clk or negedge rst_n)
if(~rst_n)
cur_state<=IDLE;
else
cur_state<=nxt_state;
/*
检测8'b01101010
*/
always@(*)
begin
case(cur_state)
IDLE:
begin
if(din==1'b0)
nxt_state=state1; //0
else
nxt_state=IDLE;
end
state1:
begin
if(1'b1==din)
nxt_state=state2; //10
else
nxt_state=IDLE;
end
state2:
begin
if(1'b0==din)
nxt_state=state3; //010
else
nxt_state=IDLE;
end
state3: //有三个正确的接收数字
begin
if(1'b1==din)
nxt_state<=state4; //1010
else
nxt_state=IDLE;
end
state4:
begin
if(1'b0==din)
nxt_state=state5; //01010
else
nxt_state=IDLE;
end
state5:
begin
if(1'b1==din)
nxt_state=state6; //101010
else
nxt_state=IDLE;
end
state6:
begin
if(1'b1==din)
nxt_state=state7; //110_1010
else
nxt_state<=state3; //010
end
state7:
begin
nxt_state=IDLE;
end
default:;
endcase
end
always@(posedge clk or negedge rst_n)
if(~rst_n)
flag<=1'b0;
else if(cur_state==state7&&(1'b0==din))
flag<=1'b1;
else
flag<=1'b0;
endmodule
答应我:下次试试移位寄存器可以吗?
module detect(
input clk,
input rst_n,
input din,
output flag
);
reg [7:0]bug;
always@(posedge clk or negedge rst_n)
if(~rst_n)
bug<=8'hff;
else
bug<={din,bug[7:1]};
assign flag=bug==8'b0110_1010;
endmodule
一样的:
- 利用Boost影响Lucene查询结果的排序
- linq to sql取出随机记录/多表查询/将查询出的结果生成xml
- [原创]Func〈T, TResult〉 泛型委托 以及演变历程(整理自MSDN)
- 上市企业4位数秒下的域名 如今9.9万元出售
- 黑客横行,全球安全系统集成市场将破百亿美元
- 有好东西融资2000万美金:官网启用四拼域名
- 全球首个农业全产业链智能工程“农业大脑”入选ECI
- 大数据说消费正从炫耀转向体验
- 这真是看脸的时代!刷脸购物!
- 苹果公司也瞄准了无人驾驶汽车行业
- 儿童智能手表存在安全漏洞而引发的思考
- 2017年度最弱鸡密码出炉:霸主仍旧无人能及
- 万达网科大裁员后将转型AI?谁将接下这颗“烫手山芋”
- 简普科技CEO叶大清:中国金融机构已开始AI变革
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- tomcat设置好环境变量,依然无法通过cmd startup命令启动
- python调用百度图片识别api
- [Go]GO语言实战-开源WEB客服GO-FLY-gorm下分页的实现
- [Go]GO语言实战-小程序或公众号接口gin框架验证微信服务器消息签名-开源WEB客服
- php一步一步实现mysql协议(一)——抓包本地mysql通信
- [MySQL] 利用explain查看sql语句中使用的哪个索引
- php一步一步实现mysql协议(二) ——握手初始化
- php一步一步实现mysql协议(三) ——登录认证密码加密
- php一步一步实现mysql协议(四)——执行命令
- EdgeX foundry树莓派搭建与MQTT通讯
- .NET Core使用NPOI将Excel中的数据批量导入到MySQL
- RTSP协议网络摄像头网页无插件直播平台EasyNVR的云端综合管理平台EasyNVS提交基础配置报错原因分析
- 10.深入k8s:调度的优先级及抢占机制源码分析
- redis
- synchronized底层是怎么实现的?