微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 10010序列码检测器所用的最少状态数是几个

10010序列码检测器所用的最少状态数是几个

时间:10-02 整理:3721RD 点击:
感觉网上的和夏宇文书上的有点多,用了IDLE ,  A , B , C , D , E , F,G
我认为没必要用F,G
笔试是不敢用自己的想法,大家的看法呢?

是不是应该分单一检测还是重复检测阿
如果10010010算俩的话,我觉得后两个状态就不用了,不知道对不对。

这种笔试题都是可以覆盖的
难道单一的用这个方法,研究研究,
印象中夏宇文用这个方法检测覆盖的
网上的
练练手,用verilog实现序列检测,对输入的数码流中找到10010的子序列。
设x为串行输入的某一位,z为输出。当连续五位输入分别满足10010的时
候,z就为1,否则z为0。时间序列以2nm为周期。
源代码为:
module seqdet(x,z,clk,rst);
input x,clk,rst;
output z;
reg[2:0] state;
wire z;
parameter IDLE = 3'd0,
                                  A = 3'd1,
                                  B = 3'd2,
                                  C = 3'd3,
                                  D = 3'd4,
                                  E = 3'd5,
                                  F = 3'd6,
                                  G = 3'd7;

assign z = (state == D && x == 0)? 1:0;
always @(posedge clk or negedge rst)
               if(!rst)
                                  begin
                                          state<= IDLE;
                                  end
               else
                                  casex(state)
                                  IDLE: if(x==1)
                                               state<= A;
                                          else state<=IDLE;
                                  A:    if(x==0)
                                               state<= B;
                                         else state<=A;
                                 B:     if(x==0)
                                               state<= C;
                                         else state<=F;
                                 C:    if(x==1)
                                               state<= D;
                                         else state<=G;
                                 D:    if(x==0)
                                               state<= E;
                                         else state<=A;
                                 E:    if(x==0)
                                               state<= C;
                                         else state<=A;
                                 F:    if(x==1)
                                               state<= A;
                                         else state<=B;
                                 G:    if(x==1)
                                               state<= F;
                                         else state<=G;
                                 default: state<=IDLE;
                                 endcase
endmodule

后面两个状态可以省的。

画画状态图
画画卡诺图
可以合并的合并
then
you'll get what you want

其实试试就知道了
其实不要弄得像考试,只有一个标准答案
实现就好,况且就算是多两个状态,也不会增加硬件资源,寄存器不还是3个

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top