⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statmch3.v

📁 多个Verilog和vhdl程序例子
💻 V
字号:
//
// Copyright (c) 1995 by Synplicity, Inc.
// You may distribute freely, as long as this header remains attached.
//
//Verilog created by Synplicity(tm), Inc.
//Created from KISS source .

module kiss_fsm(bbara_in,bbara_out,reset,clock);
output [1:0] bbara_out;
input [3:0] bbara_in;
input reset,clock;

// Clock signal is: clock
reg [1:0] outsigs;
wire [3:0] insigs;
assign insigs = bbara_in;
assign bbara_out = outsigs;

// Use parameters for state definitions, this lets you redefine the
// state values in the level of hierarchy above, if necessary.
parameter st0=4'd0, st1=4'd1, st4=4'd2, st2=4'd3, st3=4'd4, st7=4'd5, st5=4'd6,
                st6=4'd7, st8=4'd8, st9=4'd9;
//Width of state reg is: 4
reg [3:0] kiss_state;

        always @(posedge clock or posedge reset) begin: statereg
                if(reset)
                        // Always have a means to reset your state machine
                        kiss_state = st0;
                else begin: fsm
                        // The following casez statement is a case on a 4 bit value(kiss_state)
                        // thus there are 16 possible state values. See the comment
                        // preceding the "default" label in this casez statement
                        case (kiss_state)
                        st0:
                                // This inner casex statement does not require a default statement
                                // All  possible conditions are covered.
                                // There are 16 possible conditions for insigs
                                //  because insigs is 4 bits wide
                                // The first 3 labels cover12 of the 16
                                // The 4th covers 1, 
                                // The 5th covers 2.
                                // The 6th covers 1, for a total of 16/16
                                casex(insigs)
                                        4'b??01:        kiss_state=st0;         //1
                                        4'b??10:        kiss_state=st0; //2
                                        4'b??00:        kiss_state=st0; //3
                                        4'b0011:        kiss_state=st0; //4
                                        4'b?111:        kiss_state=st1; //5
                                        4'b1011:        kiss_state=st4; //6
                                endcase
                        st1:
                                // Why use a casex vs a case statement?
                                // This will make your behavioral simulation 
                                // behave more like the hardware.
                                // The inputs in hardware will take on
                                // either a 1 or a 0 value.
                                // In behavioral simulation, before the inputs
                                // are driven, they may be 1,0 or x. 
                                // In the first case label (4'b??01),  we
                                // really do not care what the values of the
                                // high orders insig bits are, just that the low
                                // order nibble is "01".
                                casex(insigs)
                                        4'b??01:        kiss_state=st1;
                                        4'b??10:        kiss_state=st1;
                                        4'b??00:        kiss_state=st1;
                                        4'b0011:        kiss_state=st0;
                                        4'b?111:        kiss_state=st2;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        st4:
                                casex(insigs)
                                        4'b??01:        kiss_state=st4;
                                        4'b??10:        kiss_state=st4;
                                        4'b??00:        kiss_state=st4;
                                        4'b0011:        kiss_state=st0;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st5;
                                endcase
                        st2:
                                casex(insigs)
                                        4'b??01:        kiss_state=st2;
                                        4'b??10:        kiss_state=st2;
                                        4'b??00:        kiss_state=st2;
                                        4'b0011:        kiss_state=st1;
                                        4'b?111:        kiss_state=st3;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        st3:
                                casex(insigs)
                                        4'b??01:        kiss_state=st3;
                                        4'b??10:        kiss_state=st3;
                                        4'b??00:        kiss_state=st3;
                                        4'b0011:        kiss_state=st7;
                                        4'b?111:        kiss_state=st3;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        st7:
                                casex(insigs)
                                        4'b??01:        kiss_state=st7;
                                        4'b??10:        kiss_state=st7;
                                        4'b??00:        kiss_state=st7;
                                        4'b0011:        kiss_state=st8;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        st5:
                                casex(insigs)
                                        4'b??01:        kiss_state=st5;
                                        4'b??10:        kiss_state=st5;
                                        4'b??00:        kiss_state=st5;
                                        4'b0011:        kiss_state=st4;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st6;
                                endcase
                        st6:
                                casex(insigs)
                                        4'b??01:        kiss_state=st6;
                                        4'b??10:        kiss_state=st6;
                                        4'b??00:        kiss_state=st6;
                                        4'b0011:        kiss_state=st7;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st6;
                                endcase
                        st8:
                                casex(insigs)
                                        4'b??01:        kiss_state=st8;
                                        4'b??10:        kiss_state=st8;
                                        4'b??00:        kiss_state=st8;
                                        4'b0011:        kiss_state=st9;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        st9:
                                casex(insigs)
                                        4'b??01:        kiss_state=st9;
                                        4'b??10:        kiss_state=st9;
                                        4'b??00:        kiss_state=st9;
                                        4'b0011:        kiss_state=st0;
                                        4'b?111:        kiss_state=st1;
                                        4'b1011:        kiss_state=st4;
                                endcase
                        // This default statement is desired.
                        // Only 10 of the possible 16 states have been enumerated.
                        // This helps to define the case as full, i.e. these are the  only legal 
                        // states, anything else is an error.
                        default:
                                kiss_state = 'bx;
                        endcase
                end //fsm

        end //statereg

        // Using labels ( in this case, the label is "outputs")
        // is helpful to match up begin-end statements
        // the matching end statement includes a comment
        // that references the label, see " end //outputs" below.
        always @(insigs or kiss_state) begin: outputs
                begin: fsmoutputs
                        casez (kiss_state)
                        st0:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st1:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st4:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st2:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st3:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b10;
                                        4'b??10:        outsigs = 'b10;
                                        4'b??00:        outsigs = 'b10;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b10;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st7:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st5:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st6:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b01;
                                        4'b??10:        outsigs = 'b01;
                                        4'b??00:        outsigs = 'b01;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b01;
                                endcase
                        st8:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        st9:
                                casex(insigs)
                                        4'b??01:        outsigs = 'b00;
                                        4'b??10:        outsigs = 'b00;
                                        4'b??00:        outsigs = 'b00;
                                        4'b0011:        outsigs = 'b00;
                                        4'b?111:        outsigs = 'b00;
                                        4'b1011:        outsigs = 'b00;
                                endcase
                        default:
                                outsigs = 'bx;
                        endcase
                end //fsmoutputs
        end //outputs

endmodule


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -