【问题标题】:QuartusII Synthesis: Enumerated type to State signals (encoding)QuartusII 综合:枚举类型到状态信号(编码)
【发布时间】:2015-06-01 05:49:18
【问题描述】:

我正在 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 会占用大量内存;但如果我可以把cs 的8 位值写下来,我就有足够的空间来做其他事情了。

我不知道如何让 Quartus 不对 FSM 使用 1-hot 编码。我尝试将设置(设置->编译器设置->高级设置(合成...)->状态机处理)更改为最小位、用户编码和顺序,以及为一些状态添加值:

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 编码)

【问题讨论】:

  • 尝试使用13-66 页上的here 给出的SM 编码指南。可能是合成器没有正确推断状态机。
  • 特别是它说“。如果您没有将枚举类型指定为 int unsigned,则默认使用有符号的 int 类型。在这种情况下,Quartus II 集成综合综合了设计,但不会不要将逻辑推断或优化为状态机。”
  • @EugeneSh。它肯定确定这是一个 FSM(它在“状态机”报告下有它)。我希望尝试更改类型以查看其内容。我刚刚注意到一个警告,告诉我“不能使用最少的位数来编码状态机”,所以这可能是其中的一部分。虽然当我查看相关 FSM 的状态机报告时,我得到了我期望的编码(6 位,顺序)。但我在 SignalTap 中找不到这个 :(
  • @EugeneSh。我尝试将类型更改为 int unsigned 但 Quartus 的行为相同;我很确定它正确地识别状态机,甚至可能根据报告在内部正确地表示 FSM;但是 SignalTap 似乎无法访问编码的 cs 行......这就是我需要的......
  • 声明您的案例陈述的情况如何? case(cs)unique case(cs) priority case(cs)case(1'b1) 变体? case(1'b1) 变体对于 1-hot 非常常见。 unqiue 强制使用 parallel_case full_case 指令。

标签: enums verilog system-verilog fsm quartus


【解决方案1】:

您可以使用综合 pragma 来指导 Quartus 对状态变量使用特定的编码方案。 page 详细介绍了如何使用“顺序”编码对状态机进行编码,从而避免使用默认的 one-hot 编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2020-07-08
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多