怎么提高自己网站的知名度,百度图像搜索,重庆中环建设有限公司网站,如何看一个站点是不是有wordpress数字系统有两大类有限状态机#xff08;Finite State Machine#xff0c;FSM#xff09;#xff1a;Moore状态机和Mealy状态机。 Moore状态机 其最大特点是输出只由当前状态确定#xff0c;与输入无关。Moore状态机的状态图中的每一个状态都包含一个输出信号。这是一个典型…数字系统有两大类有限状态机Finite State MachineFSMMoore状态机和Mealy状态机。 Moore状态机 其最大特点是输出只由当前状态确定与输入无关。Moore状态机的状态图中的每一个状态都包含一个输出信号。这是一个典型的Moore状态机的状态跳转图x、y、z是输入a、b、c是输出。 Mealy状态机 它的输出不仅与当前状态有关系而且与它的输入也有关系因而在状态图中每条转移边需要包含输入和输出的信息。 状态编码 数字逻辑系统状态机设计中常见的编码方式有二进制码Binary码、格雷码Gray码、独热码One-hot码以及二一十进制码BCD码。 格雷码的特点相邻的两个码组之间仅有一位不同。 普通二进制码与格雷码之间可以相互转换。 二进制码转换为格雷码从最右边一位起一次与左边一位“异或”作为对应格雷码该位的值最左边的一位不变相当于最左边是0。 格雷码转换为二进制码从左边第二位起将每一位与左边一位解码后的值“异或”作为该解码后的值最左边的一位依然不变。 独热码又分为独热1码和独热0码是一种特殊的二进制编码方式。当任何一种状态有且仅有一个1时就是独热1码相反任何一种状态有且仅有一个0时就是独热0码。 状态机的描述 状态机有三种描述方式一段式状态机、两段式状态机、三段式状态机。下面就用一个小例子来看看三种方式是如何实现的。 各种图片各种坑爹啊 - - 一段式状态机 当把整个状态机卸载一个always模块中并且这个模块既包含状态转移又含有组合逻辑输入/输出时称为一段式状态机。不推荐采用这种状态机因为从代码风格方面来讲一般都会要求把组合逻辑和时序逻辑分开从代码维护和升级来说组合逻辑和书序逻辑混合在一起不利于代码维护和修改也不利于约束。 1 //一段式状态机来实现在异步复位信号的控制下一段式状态机进入IDLE 2 //状态q_sig4被复位一旦sig1或者sig2有效状态机进入WAIT状态如果 3 //sig1和sig2同时有效那么状态机进入DONE状态 4 //如果sig4还有效那么q_sig4置位同时状态机进入IDLE状态。 5 6 module one_seg_fsm(clk,reset,sig1,sig2,sig3,q_sig4,q_sm_state); 7 //数据声明部分 8 input clk,reset,sig1,sig2,sig3; 9 10 output reg q_sig4;11 output reg [1:0] q_sm_state;12 13 //参数声明14 parameter IDLE 2b00;15 parameter WAIT 2b01;16 parameter DONE 2b10;17 18 //状态跳转逻辑程序设计19 always (posedge clk or posedge reset)20 begin21 if(reset)22 begin23 q_sig4 0;24 q_sm_state IDLE;25 end26 else 27 begin28 case(q_sm_state) 29 IDLE: begin30 if(sig1 || sig2)31 begin32 q_sm_state WAIT;33 q_sig4 1b0;34 end35 else36 begin37 q_sm_state IDLE;38 q_sig4 1b0;39 end40 end41 WAIT: begin42 if(sig2 sig3)43 begin44 q_sm_state DONE;45 q_sig4 1b0;46 end47 else48 begin49 q_sm_state WAIT;50 q_sig4 1b0;51 end52 end 53 54 DONE:begin55 if(sig3)56 begin57 q_sm_state IDLE;58 q_sig4 1b1;59 end60 else61 begin62 q_sm_state DONE;63 q_sig4 1b0;64 end65 end66 67 default: begin68 q_sm_state IDLE;69 q_sig4 0;70 end71 endcase 72 end73 end74 endmodule 两段式状态机 所谓的两段式状态机就是采用一个always语句来实现时序逻辑另外一个always语句来实现组合逻辑提高了代码的可读性易于维护。不同于一段式状态机的是它需要定义两个状态----现态和次态然后通过现态和次态的转换来实现时序逻辑。 1 //本例主要采用两段式状态机在异步复位信号的控制下一段式状态机进入IDLE 2 //状态q_sig4被复位一旦sig1或者sig2有效状态机进入WAIT状态如果sig1和sig2同时有效那么 3 //状态机进入DONE状态如果sig4还有效那么q_sig4置位同时状态机进入IDLE状态。 4 5 module two_seg_fsm(clk,reset,sig1,sig2,sig3,q_sig4); 6 //数据声明部分 7 input clk,reset,sig1,sig2,sig3; 8 9 output reg q_sig4;10 11 reg [1:0] current_state, next_state;12 13 //参数声明14 parameter IDLE 2b00;15 parameter WAIT 2b01;16 parameter DONE 2b10;17 18 //状态跳转程序设计19 always (posedge clk or posedge reset)20 if(reset)21 current_state IDLE;22 else23 current_state next_state;24 25 //状态逻辑输出26 always (current_state or sig1 or sig2 or sig3)27 begin28 case(current_state)29 IDLE: begin30 if(sig1 || sig2)31 begin32 next_state WAIT;33 q_sig4 1b0;34 end35 else36 begin37 next_state IDLE;38 q_sig4 1b0;39 end40 end41 WAIT: begin42 if(sig2 sig3)43 begin44 next_state DONE;45 q_sig4 1b0;46 end47 else48 begin49 next_state WAIT;50 q_sig4 1b0;51 end52 end 53 54 DONE:begin55 if(sig3)56 begin57 next_state IDLE;58 q_sig4 1b1;59 end60 else61 begin62 next_state DONE;63 q_sig4 1b0;64 end65 end66 67 default: begin68 next_state IDLE;69 q_sig4 0;70 end71 endcase 72 73 end74 endmodule 三段式状态机 三段式状态机与两段式状态机的区别两段式直接采用组合逻辑输出而三段式则通过在组合逻辑后再增加一级寄存器来实现时序逻辑输出。这样做的好处是可以有效地滤去租个逻辑输出的毛刺同时可以有效地进行时序计算与约束另外对于总线形式的输出信号来说容易使总线数据对其从而减小总线数据间的偏移减小接收端数据采样出错的频率。 三段式状态机的基本格式是第一个always语句实现同步状态跳转第二个always语句实现组合逻辑第三个always语句实现同步输出。 1 //本例主要采用三段式状态机在异步复位信号的控制下一段式状态机进入IDLE 2 //状态q_sig4被复位一旦sig1或者sig2有效状态机进入WAIT状态如果sig1和sig2同时有效那么 3 //状态机进入DONE状态如果sig4还有效那么q_sig4置位同时状态机进入IDLE状态。 4 5 module three_seg_fsm(clk,reset,sig1,sig2,sig3,q_sig4); 6 //数据声明部分 7 input clk,reset,sig1,sig2,sig3; 8 9 output reg q_sig4;10 11 reg [1:0] current_state, next_state;12 13 //参数声明14 parameter IDLE 2b00;15 parameter WAIT 2b01;16 parameter DONE 2b10;17 18 //状态跳转程序设计19 always (posedge clk or posedge reset)20 if(reset)21 current_state IDLE;22 else23 current_state next_state;24 25 //状态跳转输出26 always (current_state or sig1 or sig2 or sig3)27 begin28 case(current_state)29 IDLE: begin30 if(sig1 || sig2)31 begin32 next_state WAIT; 33 end34 else35 begin36 next_state IDLE; 37 end38 end39 WAIT: begin40 if(sig2 sig3)41 begin42 next_state DONE; 43 end44 else45 begin46 next_state WAIT; 47 end48 end 49 50 DONE:begin51 if(sig3)52 begin53 next_state IDLE; 54 end55 else56 begin57 next_state DONE; 58 end59 end60 61 default: begin62 next_state IDLE; 63 end64 endcase 65 end66 67 //逻辑输出68 always (posedge clk or posedge reset)69 if(reset)70 q_sig4 1b0;71 else72 begin73 case(next_state)74 IDLE,75 WAIT: q_sig4 1b0;76 DONE: q_sig4 1b1;77 default: q_sig4 1b0;78 endcase79 end80 81 endmodule 转载于:https://www.cnblogs.com/lifan3a/articles/4582785.html