zoukankan      html  css  js  c++  java
  • FPGA之有限状态机

    独热码编程例:

    module fsm(clock,reset,a,f,g);
    input clock,reset;
    input a;
    output f,g;
    
    reg f,g;
    reg [3:0]state;
     
    parameter idle=4'b0000,
              start=4'b0010,
    			 stop=4'b0100,
    			 clear=4'b1000;
    
    always@(posedge clock)
    if(!reset) begin 
                 state=idle; 
                 f<=0;
    				 g<=0;
    			  end
    else case(state)
      idle: begin
            if(a) begin
    		          state<=1;
    					 g<=0;
    		          end
    		  else state<=idle;
    		  end
      start:begin
            if(!a) state<=stop;
    		  else  state<=start; 
            end
      stop: begin
            if(a) begin
    		        state<=clear;
    				  f<=1;
    		        end
    		  else  state<=stop;
            end
      clear:begin
            if(!a) begin
    		         state<=idle;
    					f<=0;
    					g<=1;
    		         end
    		  else   state<=clear;
    		  end
      default:     state<=idle;      
            endcase
    endmodule
    

    Other method to write this code:

    module fsm(clock,reset,a,f,g);
    inpout clock,reset,a;
    output f,g;
    reg [1:0] state;
    wire [1:0] nextstate;
    parameter 
       idle=2'b00, start=2'b01;
       stop=2'b10,clear=2'b11;
    always@(posedge clock)
      if(!reset) begin
                     state<=idle;
                     end
       else state<=nextstate;
       assign nextstate=
           (state==idle) ? (a ? start : idle) :
           (state==start) ? (!a ? stop : start):
           (state==stop) ? (a ? clear : stop) :
           (state==clear) ?(!a ? idle : clear) : idle;
      assign f=((state==stop)&&a);
      assign g=((state==clear)&&(!a || !reset))
    endmodule
    

    combine posedge always module with voltage always module

    wire nextstate;
    always@(posedge clock)
      if(!reset) begin
               state<=idle;
    			  f<=0;
    			  g<=0;
               end
      else state<=nextstate;
    always@(a or state)
      f=0;
      g=0;
      if(state==idle) 
         if(a)   nextstate=start;
    	  else    nextstate=idle;
      else if(state==start)
         if(!a)  nextstate=stop;
    	  else    nextstate=start;
      else if(state==stop)
         if(a)   begin
    	          nextstate=clear;
    				 f=1;
    				 end
    	  else    nextstate=stop;
      else if(state==clear)
         if(a)   nextstate=clear;
    	  else    begin
    	          nextstate=idle;
    				 f=0;
    				 g=1;
    				 end
      else default nextstate=idle;
    

    有限状态机一般步骤:

    1.逻辑关系转为状态转换图或者状态转换表;
    2.状态编码,Gary码,独热码之类;
    3.选定触发器的类型(电平出发还是上升沿或下降沿出触发),并求出状态方程,驱动方程,输出方程;
    4.按照方程得出逻辑图;

    Carry out a simple processor

    module sprocessor(instr, out);// instr 17,16bit choose mode;15-8,data one;7:0;data two;
    input [17:0]instr;
    output [8:0]out;
    reg [8:0]out;
    
    reg fun;
    reg [7:0]opr1;
    reg [7:0]opr2;
    
    
    function [16:0]mount;
    input [17:0]instr;
    reg [1:0]fun_how;
    reg [7:0]opr1;
    reg [7:0]opr2;
    reg ch;
    begin
    fun_how=instr[17:16];
    opr2=instr[7:0];
    case(fun_how)
      2'b00: begin
          ch=1;
    		opr1=instr[15:8];
          end
      2'b01: begin
          ch=0;
    		opr1=instr[15:8];
          end
      2'b10: begin
          ch=1;
    		opr1=1;
          end
      2'b11: begin
          ch=0;
    		opr1=1;
          end
    endcase
    mount={ch,opr1,opr2};
    end
    endfunction
    
    always@(instr)
    begin
    {fun,opr1,opr2}=mount(instr);
    if(fun==1) out=opr1+opr2;
    else    out=opr1-opr2;
    end
    endmodule
    
  • 相关阅读:
    Android基础知识
    使用Android Studio和Genymotion模拟器搭建Andriod开发环境
    【原】Java开发环境搭建
    【转】JavaScript顶级对象参考模型
    【转】在.Net中关于AOP的实现
    【转】各版本IIS下ASP.net请求处理过程区别
    【转】我们应该如何去了解JavaScript引擎的工作原理
    Linux系统编程(27)——线程控制
    Linux系统编程(26)——守护进程
    Linux系统编程(25)——终端
  • 原文地址:https://www.cnblogs.com/assassinn/p/7729407.html
Copyright © 2011-2022 走看看