状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()
A、一段式寄存器输出,易产生毛刺,不利于时序约束;
B、二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C、三段式寄存器输出,不产生毛刺,有利于时序约束;
D、所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。
答案:C
解析:
(1)一段式:一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;
(2)二段式:两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;
(3)三段式:三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。
三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。
状态机编码:
二进制码Binary Code和格雷码Gray Code占用的位宽少,相应的使用的触发器资源少,但是状态对比时需要比较多个bit,消耗的组合逻辑比较多,适用于组合电路资源丰富的情况(CPLD);独热码One-Hot Code的状态比较时只比较1bit,节省逻辑资源,使用的触发器资源比较多,适用于触发器资源丰富的情况(FPGA);总体来讲,状态较少时(4-24个状态)用独热码效果好,状态多时格雷码(状态数大于24)效果好。
对四个状态编码:
二进制码:
S0 = 2’b00;
S1 = 2’b01;
S2 = 2’b10;
S3 = 2’b11;
格雷码相邻码元之间有且只有一位不同:
S0 = 2’b00;
S1 = 2’b01;
S2 = 2’b11;
S3 = 2’b10;
独热码只有一位是“1”:
S0 = 4’b0001;
S1 = 4’b0010;
S2 = 4’b0100;
S3 = 4’b1000;
有时候也是用连续编码,状态值连续:
S0 = 2’d0;
S1 = 2’d1;
S2 = 2’d2;
S3 = 2’d3;
FPGA、数字IC系列(2)——电子科大与北航部分Verilog题目与解析【FPGA探索者】
FPGA时序分析之关键路径(Critical Path)【华为静态时序分析资料】【FPGA探索者】【笔试面试】
FPGA/数字IC秋招笔试面试汇总帖(2022届)【FPGA探索者】