您现在的位置是:主页 > news > web如何做网站/seo推广软件怎样
web如何做网站/seo推广软件怎样
admin2025/6/15 16:23:16【news】
简介web如何做网站,seo推广软件怎样,网站怎么做,川畅咨询 做网站多少钱1. 什么是状态机 状态机由状态寄存器、组合逻辑电路、时序逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM,主要分为2大类:第一类,状…
web如何做网站,seo推广软件怎样,网站怎么做,川畅咨询 做网站多少钱1. 什么是状态机
状态机由状态寄存器、组合逻辑电路、时序逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM,主要分为2大类:第一类,状…
1. 什么是状态机
- 状态机由状态寄存器、组合逻辑电路、时序逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。
- 有限状态机简写为FSM,主要分为2大类:第一类,状态机的输出与输入及当前状态有关,则为mealy状态机。其输出是在输入变化后立即发生的,不依赖于时钟同步。第二类,Moore状态机的输出仅为当前状态的函数,这类状态机在输入变化时,还必须等待时钟信号到来才会输出数据(看看这次数据输入对状态跳变的影响),因此比mealy状态机多等一个时钟周期。
- 一段式状态机:在一个always块状态机中既写了状态迁移,又写了数据输出。后期维护不方便。
- 两段式状态机:一段描述状态迁移(只有一个state变量),一段描述变量或者说数据输出。
- 三段式状态机:一段用组合逻辑描述状态迁移,一段时序逻辑进行现态和次态的转换,其他部分时序逻辑进行数据处理。
- 在设计状态机的时候大多是mealy状态机,采用三段式的方式来写。一段时序逻辑描述CS和NS的转换,一段组合逻辑来进行状态迁移,一段时序逻辑来进行数据处理。
2.状态机编码
- 在FPGA设计中通常是使用独热码状态编码,特点为每一个状态均有自己的触发器,所以若有N个状态就也存在有N个触发器,虽然花费了较多的寄存器,但是大大简化了状态译码逻辑。比如有5个状态,用顺序编码需要使用3bit比较器来进行状态判断,而独热码只需要1bit比较器。组合逻辑消耗较少。这对组合逻辑资源宝贵的FPGA是比较合适的,并且由于简化了状态译码,使用独热码的状态机更适用于高速处理(独热码、二进制码post-fit图中,中间状态虽然都是一级LUT,但是二进制码的是4输入,独热码是2输入,很显然独热码处理速度更快)。
- 在Advanced Analysis& Syntheisis Settings中设置状态机编码格式,默认为自动。quartus会自动转为独热码设计。为说明这一问题,在这里把auto改为User-encoded.
- 以11101的序列检测器为例来看这个问题
//11101
module mealy(input wire clk,input wire rst_n,input wire A,output reg K
);// parameter S1= 6'b00_0001;
// parameter S2= 6'b00_0010;
// parameter S3= 6'b00_0100;
// parameter S4= 6'b00_1000;
// parameter S5= 6'b01_0000;
// parameter S6= 6'b10_0000;
// reg [5:0] cs; //one-hot codeparameter S1= 3'b000;
parameter S2= 3'b001;
parameter S3= 3'b010;
parameter S4= 3'b011;
parameter S5= 3'b100;
parameter S6= 3'b101;reg [2:0] cs; //bin codealways@(posedge clk or negedge rst_n)if (rst_n == 1'b0)cs <= S1;else case (cs)S1: if (A == 1'b1)cs <= S2;S2: if (A == 1'b1)cs <= S3;elsecs <= S1;S3: if (A == 1'b1)cs <= S4;elsecs <= S1;S4: if (A == 1'b0)cs <= S5;elsecs <= S1;S5: if (A == 1'b1)cs <= S6;elsecs <= S1;S6: cs <= S1;default:cs <= S1;endcasealways@(posedge clk or negedge rst_n)if (rst_n == 1'b0)K <= 1'b0;else if (cs == S5 && A == 1'b1) //这样可以确保在跳转到S6的同时输出,若用cs=s6则会延时一个周期输出K <= 1'b1;else K <= 1'b0;
endmodule
- 独热码序列检测器post-fit图(7LUT/6REG):
中间状态跳转组合逻辑,只有一级门结构:
- 二进制码序列检测器post-fit图(4LUT/4REG):
中间状态跳转组合逻辑,有最长路径有三级门级联,最短有只有一级,易产生竞争冒险,因而不适用于高速状态机:
3.安全状态机
- 使状态迁移形成闭环
在状态机设计时,在末尾加上 when others => NS = S0;或者default:NS = S0; - 设计模块实现安全状态机
在TDC中,为了防止意外情况比如解码状态机卡死,有一个signal control的模块,有一个计数器,当计数值大于一定数值后若还没有完成解码则认为解码状态机卡死,将会强制解码模块状态机复位。 - 状态编码检测
当采用独热码设计时,比如有5个状态,那么对应有2^5种潜在状态,正常情况下状态机所有寄存器之和为1,当不为1则进入非法状态强制复位。 - 借助软件实现安全状态机:
若设计的状态机的状态跳转信号是跨时钟域的,那么有必要对一般的状态机进行“安全化”,具体措施为:Assignments > Settings > Compiler Settings > Advanced Settings (Synthesis).来使能Safe State Machine。告诉编译器,增加一部分额外的逻辑,使得当状态机进入非法状态时,可以自动恢复到复位状态。也可以在状态机外部手动打两拍来同步。
在代码上也要做以下额外的添加,告诉编译器,状态机是安全状态机:
若想指定状态机的编码方式,可以在双引号中用逗号分隔safe和编码方式,如: “safe, one-hot” or “safe, gray”.
- 独热码的安全状态机,使能设置之后,在RTL图中没有任何变化但是耗费了更多资源,见post-fit图(7LUT/11REG):
值得注意的是在最左边出现的两个REG之间出现了3级4输入的LUT级联,因此安全状态机的使用可能会导致时序恶化,只有在状态跳转为异步信号,不得不用的情况下再用。