10010序列码检测器所用的最少状态数是几个
我认为没必要用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个
