我在SystemVerilog的一个设计为FSM通过的QuartusII(14.1)工具合成穿上Altera FPGA中。 我使用的是枚举声明使代码更合理:
typedef enum logic [7:0] { CMD_INIT,
CMD_WAIT,
CMD_DECODE,
CMD_ILLEGAL,
CMD_CMD0,
... } cmd_st;
...
cmd_st cs, ncs;
...
每当的Quartus合成该状态机,它似乎创建尽管一个热编码logic [7:0]
的类型的一部分。 如,当我到了美国加入的SignalTap,我得到的所有状态作为信号1位变量( cs.CMD_INIT
, cs.CMD_WAIT
等)。 虽然这通常是非常有用的,因为我需要看到一堆这些国家的有些过值一次,我跑出来的片上存储器来包含所有这些状态(有超过他们的8;就像50 +)。 所以将他们全部的SignalTap借此内存ALOT; 但如果我可以放下的8位值cs
,我有足够的空间用于其他东西。
我无法弄清楚如何获得的Quartus不使用的FSM 1热编码。 我试图改变的设置(设置 - >编译器设置 - >高级设置(合成...) - >状态机处理),以Minial位,用户编码和顺序,以及几个州的附加价值:
typedef enum logic [7:0] { CMD_INIT = 8'd0,
CMD_WAIT = 8'd1,
CMD_DECODE = 8'd2,
CMD_ILLEGAL = 8'd3,
CMD_CMD0,
(请注意,不是所有的人,因为有一堆我可能会在中间更添加)
林不知道还能做什么,这样的SignalTap看到了状态只有8位(这可能要追溯到得到的Quartus合成这种FSM为顺序,而不是1hot编码)