//模組功能:檢測到序列
"10010"
時立即輸出
1,這是個摩爾型電路
module seqdet(x,z,clk,rst);
input x,clk,rst;//x
為輸入序列
output z;
reg[2:0]state,nstate;//state
為當前狀態,
nstate
為下一狀態
parameteridle=3'd0,//
初始狀態
a=3'd1,//
狀態序列1
b=3'd2,//
狀態序列10
c=3'd3,//
狀態序列
100
d=3'd4,//
狀態序列
1001
e=3'd5;//
狀態序列
10010
always@(x,state)
case(state)
idle:if(x==1) nstate=a;
else
nstate=idle;
a:if(x==0) nstate=b;
else
nstate=a;
b:if(x==0) nstate=c;
else
nstate=a;
c:if(x==1) nstate=d;
else
nstate=idle;
d:if(x==0)nstate=e;
else
nstate=a;
e:if(x==0) nstate=c;
elsenstate=a;
default:
nstate<=idle;
endcase
///always@(posedge clk,negedge rst)
if(!rst)
state<=idle;
elsestate<=nstate; //
assign z=(state==e);//z
輸出為1
的條件,
z只和狀態有關,所以為摩爾型
/endmodule
//模組功能:檢測到序列"10010"時立即輸出1,這是個公尺利型電路
module seqdet(x,z,clk,rst);
input x,clk,rst; //x為輸入序列
output z;
reg[2:0]state,nstate; //state為當前狀態,nstate為下一狀態
parameter idle=3'd0, //初始狀態
a=3'd1, //狀態序列1
b=3'd2, //狀態序列10
c=3'd3, //狀態序列100
d=3'd4, //狀態序列1001
e=3'd5; //狀態序列10010
always@(x,state)
case(state)
idle:if(x==1) nstate=a;
else nstate=idle;
a: if(x==0) nstate=b;
else nstate=a;
b: if(x==0) nstate=c;
else nstate=a;
c: if(x==1) nstate=d;
else nstate=idle;
d: if(x==0) nstate=e;
else nstate=a;
e: if(x==0) nstate=c;
else nstate=a;
default: nstate<=idle;
endcase
///
always@(posedge clk,negedge rst)
if(!rst) state<=idle;
else state<=nstate; //
assign z=(state==d) && (x==0); // z既和狀態有關又和輸入有關,所以為公尺利型/
endmodule
序列檢測器
序列檢測器是在數字碼流中檢測特定序列,利用同步狀態機的方式可以較容易的實現。比如設計乙個檢測序列為10010的檢測器。st1 確定狀態機的狀態數亮 st2 確定每個狀態下的變數的值 st3 狀態之間切換的條件 st4 觸發狀態機的條件 module xulie x,z,clk,rst input x...
序列檢測器
用狀態機設計乙個二進位制序列檢測器,其功能是檢測乙個4位二進位制序列 1111 及輸入序列中如果有四個或四個以上連續的 1 出現,輸出為1,其他情況下,輸出為0。其輸入 輸出如下所示 輸入x 000 101 010 110 111 101 111 110 101 輸出z 000 000 000 00...
原創 Verilog編寫 「1101 序列檢測器
序列檢測器是時序數位電路中非常常見的設計之一。它的主要功能是將乙個指定的序列從數字碼流中識別出來。這裡給出乙個 1101 序列檢測器的verilog實現和testbench 設計目標 1101 序列檢測器 eda quartus 15.0 軟體 modelsim 10.1c 本序列檢測器共有4個bi...