前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一道有趣的笔试题(四)、序列检测

一道有趣的笔试题(四)、序列检测

作者头像
根究FPGA
发布2020-06-29 15:33:14
4120
发布2020-06-29 15:33:14
举报
文章被收录于专栏:根究FPGA

看到了一些interesting的题,和大家分享一下,如果大家有什么额外的见解欢迎大家公众号后台留言!

题目:

画出可以检测10010串的状态图

这类题一般有两种做法,状态机和移位寄存器。

一、状态机实现

状态机:

代码:

代码语言:javascript
复制
module det(
input clk,
input rst_n,
input d,  //数据输入
output reg y   //检测结果输出
);
/*
 检测101101
*/
//状态编码
parameter idle=3'b000; //空闲状态
parameter s1=3'b001;   //检测到1
parameter s2=3'b010;   //检测到10
parameter s3=3'b011;   //检测到101
parameter s4=3'b100;   //检测到1011
parameter s5=3'b101;   //检测到10110
parameter s6=3'b110;   //检测到101101

reg[2:0]cur_state,nxt_state;
always@(posedge clk or negedge rst_n)
if(!rst_n)
 cur_state<=idle;
else 
 cur_state<=nxt_state;

always@(cur_state,d)
begin
case(cur_state)
idle:
begin
 if(d==1'b1)
  nxt_state<=s1;
 else 
  nxt_state<=idle;
end 
s1:
begin
 if(d==1'b0)
  nxt_state<=s2;
 else 
  nxt_state<=idle;
end 
s2:
begin
 if(d==1'b1)
  nxt_state<=s3;
 else 
  nxt_state<=idle;
end 
s3:
begin
 if(d==1'b1)
  nxt_state<=s4;
 else 
  nxt_state<=idle;
end 
s4:
begin
 if(d==1'b0)
  nxt_state<=s5;
 else 
  nxt_state<=idle;
end 
s5:
begin
 if(d==1'b1)
  nxt_state<=s6;
 else 
  nxt_state<=idle;
end 
s6:
begin
 if(d==1'b1)
  nxt_state<=s1;
 else 
  nxt_state<=idle;
end 
default:;
endcase  
end 
always@(posedge clk or negedge rst_n)
if(~rst_n)
 y<=1'b0;
else if(nxt_state==s6)
 y<=1'b1;
else 
 y<=1'b0;
endmodule

二、移位寄存器实现

这种方式通过流水线操作,感觉简单粗暴而且有用,其核心为:

代码语言:javascript
复制
//移位寄存器实现特定序列检测 101101
always @(posedge clk or negedge rst_n)
  if(!rst_n)
    data <= 0;
  else
    data <= {data[4:0],din};

祝大家520快乐,也不知道是什么节也没对象也没问,反正快乐就完了!到了学校一堆事要做,可能以后不能天天更新了,请理解~~~~

~~~~感谢阅读~~~~谢谢!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 根究FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 画出可以检测10010串的状态图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档