您的位置:首页 > 职场人生

每日工作记录——状态机的编码选择

2017-09-05 17:13 204 查看
复习面试题中,复习到了状态机的码制选择这里,以前根本没有关注过这个,一看才知道原来东西还是很多的,因此做一些记录。

状态机常用码二进制、格雷码和独热码。

二进制码就不用细说了,就是正常的顺序编码,四个状态的话就是

s_0 = 2'b00;

s_1 = 2'b01;

s_2 = 2'b10;

s_3 = 2'b11;

格雷码特点是相邻码元之间只有一位是不同的,四个状态的话就是

s_0 = 2'b00;

s_1 = 2'b01;

s_2 = 2'b11;

s_3 = 2'b10;

独热码的特点是只有一位是“1”其余都是“0”,四个状态的话就是

s_0 = 2'b0001;

s_1 = 2'b0010;

s_2 = 2'b0100;

s_3 = 2'b1000;

观察这些状态机的编码可以发现,二进制和格雷码占用的触发器资源比较少(位宽小啊),不过进行对比和跳转时候消耗的组合逻辑会比较多;而独热码的触发器资源占用比较多,不过组合逻辑消耗比较少。简单点想,在case里我们要确定state==s_1?那么对于二进制和格雷码来说需要对比两位,而对于独热码来说只需要看state[1]==1?就可以了,因此在组合逻辑资源上会有所节省,速度也会比二进制和格雷码更快(组合逻辑简化导致的路径时序缩短)。

二进制码与格雷码对比的话,格雷码跳转时候只有一个状态位发生跳转,可以有效的消除多条信号线由于传输延时或门延时所产生的毛刺,也可以减低功耗。不过此处有疑问,因为不一定是1-2-3-4这样跳转,也有可能是1-3-2-4这样跳转,格雷码也会出现多位跳转的情况,需要进一步查看资料。

因为独热码消占用的触发器比较多,而LUT和DFF是FPGA里最不缺的资源(大量触发器闲置),因此在FPGA编程时用独热码效果比较好。CPLD中组合资源较多时序资源较少,因此用格雷码或二进制码较好。IC设计中需要综合考虑,如果时序满足的情况下面积与速度综合看用格雷码比较好,因为独热码的资源会大大增加面积。

还有一点就是,在状态较少时用独热码效果好,状态多时格雷码效果好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  verilog 面试题