在QuartusII合成:枚举类型到状态信号(编码)(QuartusII Synthesis: En

2019-10-22 09:58发布

我在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_INITcs.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编码)

Answer 1:

您可以使用综合编译指示引导的Quartus使用特定的编码方案的状态变量。 此页面为您提供了有关如何使用“顺序”编码从而避免了默认的热码编码状态机的详细信息。



文章来源: QuartusII Synthesis: Enumerated type to State signals (encoding)