久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: Verilog狀態機實現序列檢測 [打印本頁]

作者: 51黑黑黑    時間: 2016-2-23 01:18
標題: Verilog狀態機實現序列檢測
經常在筆試的時候出現這樣的題:檢測序列為11001101,輸出為1,否則輸出為0。抽空寫了下代碼,僅供參考。

FSM1:一段式
module machine_test1(clk,rst,din,dout);
input clk,rst;
input din;
output dout;


//11001101
parameter idle=0,
    st0=1,
    st1=2,
    st2=3,
    st3=4,
    st4=5,
    st5=6,
    st6=7;


reg [3:0] next_state;
reg dout;



always @ (posedge clk or negedge rst)
begin
if(!rst)
begin
  next_state=idle;
  dout=0;
end
else
begin
  case(next_state)
  idle:
   if(din)
   begin
    next_state=st0;
    dout=0;
   end
   else
   begin
    next_state=idle;
    dout=0;
   end
  st0:
   if(din)
   begin
    next_state=st1;
    dout=0;
   end
   else
   begin
    next_state=idle;
    dout=0;
   end
  st1:
   if(!din)
   begin
    next_state=st2;
    dout=0;
   end
   else
   begin
    next_state=st1;
    dout=0;
   end
  st2:
   if(!din)
   begin
    next_state=st3;
    dout=0;
   end
   else
   begin
    next_state=st0;
    dout=0;
   end
  st3:
   if(din)
   begin
    next_state=st4;
    dout=0;
   end
   else
   begin
    next_state=idle;
    dout=0;
   end
  st4:
   if(din)
   begin
    next_state=st5;
    dout=0;
   end
   else
   begin
    next_state=idle;
    dout=0;
   end
  st5:
   if(!din)
   begin
    next_state=st6;
    dout=0;
   end
   else
   begin
    next_state=st1;
    dout=0;
   end
  st6:
   if(din)
   begin
    next_state=idle;
    dout=1;
   end
   else
   begin
    next_state=idle;
    dout=0;
   end
  default:
   begin
    next_state=idle;
    dout=0;
   end
  endcase
end
end  
  

endmodule


FSM2:兩段式
module machine_test(clk,rst,din,dout);
input clk,rst;
input din;
output dout;

//11001101
parameter idle=0,
    st0=1,
    st1=2,
    st2=3,
    st3=4,
    st4=5,
    st5=6,
    st6=7;

reg [3:0] current_state,next_state;
reg dout;


always @ (posedge clk or negedge rst)
begin
if(!rst)
  current_state<=idle;
else
  current_state<=next_state;
end

always @ (next_state or current_state or din or dout)
begin
case(current_state)
idle:
  if(din)
  begin
   next_state=st0;
   dout=0;
  end
  else
  begin
   next_state=idle;
   dout=0;
  end
st0:
  if(din)
  begin
   next_state=st1;
   dout=0;
  end
  else
  begin
   next_state=idle;
   dout=0;
  end
st1:
  if(!din)
  begin
   next_state=st2;
   dout=0;
  end
  else
  begin
   next_state=st1;
   dout=0;
  end
st2:
  if(!din)
  begin
   next_state=st3;
   dout=0;
  end
  else
  begin
   next_state=st0;
   dout=0;
  end
st3:
  if(din)
  begin
   next_state=st4;
   dout=0;
  end
  else
  begin
   next_state=idle;
   dout=0;
  end
st4:
  if(din)
  begin
   next_state=st5;
   dout=0;
  end
  else
  begin
   next_state=idle;
   dout=0;
  end
st5:
  if(!din)
  begin
   next_state=st6;
   dout=0;
  end
  else
  begin
   next_state=st1;
   dout=0;
  end
st6:
  if(din)
  begin
   next_state=idle;
   dout=1;
  end
  else
  begin
   next_state=idle;
   dout=0;
  end
default:
  begin
   next_state=idle;
   dout=0;
  end
endcase
end  

endmodule




FSM3:三段式
module machine_test2(clk,rst,din,dout);
input clk,rst;
input din;
output dout;

//11001101
parameter idle=0,
    st0=1,
    st1=2,
    st2=3,
    st3=4,
    st4=5,
    st5=6,
    st6=7,
    st7=8;

reg [3:0] current_state,next_state;
reg dout;


always @ (posedge clk or negedge rst)
begin
if(!rst)
  current_state<=idle;
else
  current_state<=next_state;
end

always @ (next_state or current_state or din or dout)
begin
case(current_state)
idle:
  if(din)
   next_state=st0;
  else
   next_state=idle;
st0:
  if(din)
   next_state=st1;
  else
   next_state=idle;
st1:
  if(!din)
   next_state=st2;
  else
   next_state=st1;
st2:
  if(!din)
   next_state=st3;
  else
   next_state=st0;
st3:
  if(din)
   next_state=st4;
  else
   next_state=idle;
st4:
  if(din)
   next_state=st5;
  else
   next_state=idle;
st5:
  if(!din)
   next_state=st6;
  else
   next_state=st1;
st6:
  if(din)
   next_state=st7;
  else
   next_state=idle;
st7:
  if(din)
   next_state=st1;
  else
   next_state=idle;
default:
  next_state=idle;
endcase
end  

always @ (posedge clk)
begin
if(next_state==st7)
  dout<=1'd1;
else
  dout<=1'd0;
end
   
endmodule

仿真結果:








作者: LIJIAPUA    時間: 2020-6-28 18:49
二段式具體的波形信號輸入的是多少呀




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一级免费视频 | 国产精品久久一区 | 久久天堂网 | 特黄aaaaaaaaa真人毛片 | 亚洲一区二区av | 国产精品久久久国产盗摄 | 亚洲午夜一区 | 久久久久国产视频 | 亚洲精品视频在线播放 | 日韩成人精品一区二区 | 91亚洲精品在线 | 国产做受入口竹菊 | 在线免费播放av | 欧美三级 欧美一级 | 日韩精品久久久久久久 | 黑人黄色一级片 | 中文字幕在线免费看 | 久久久夜夜夜 | 色妞网| 亚洲欧美日韩一区二区三区四区 | 日韩中文一区 | 国产精品久久久久久久久借妻 | 国产精品久久一区 | 午夜激情小视频 | 日韩欧美自拍 | 日韩成人免费视频 | 久久精品视频网 | 日韩欧美在线一区 | 风间由美一区二区三区 | 日韩av中文字幕在线播放 | 高清乱码男女免费观看 | 日本少妇视频 | 国产在线视频网站 | 麻豆成人91精品二区三区 | 美女张开腿 | 色哟哟精品观看 | 国产成人综合网 | 又大又黄又爽 | 成人免费公开视频 | 亚洲黄色小视频 | 日本高清在线观看 |