Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2006359
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类:

2009-10-28 21:50:37

module FSM1(nrst,clk,
   i1,i2, 
   o1,o2,err);
input i1,i2;
input clk,nrst;
output o1,o2,err;
reg o1,o2,err;
reg [2:0] NS,CS;
parameter IDLE=3'b000,
    S1=  3'b001,
    S2=  3'b010,
  ERROR= 3'b100;
always @(posedge clk or negedge nrst)
 if(!nrst)
  CS<=IDLE;
 else
  CS<=NS;
  
  
always @(nrst or CS or i1 or i2)
 begin
  NS=3'bx;
  case(CS)
   IDLE:
    begin
    if(~i1)   NS=IDLE;
    if(i1&&i2)  NS=S1;
    if(i1&&(~i2))  NS=ERROR;
    end
   S1:
    begin
    if(~i2)   NS=S1;
    if(i2&&i1)  NS=S2;
    if(i2&&(~i1))  NS=ERROR;
    end
   S2:
    begin
    if(i2)   NS=S2;
    if(~i2&&i1)  NS=IDLE;
    if(~i2&&(~i1)) NS=ERROR;
    end
   ERROR:
    begin
    if(i1)  NS=ERROR;
    if(i2)  NS=IDLE;
    end
  endcase
 end
 
always @(posedge clk or negedge nrst)
 if(!nrst)
  {o1,o2,err}<=3'b000;
 else
  begin
   case(NS)
    IDLE: {o1,o2,err}<=3'b000;
    S1:  {o1,o2,err}<=3'b001;
    S2:  {o1,o2,err}<=3'b010;
    ERROR: {o1,o2,err}<=3'b100;
   endcase
  end
endmodule
阅读(1485) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~