【问题标题】:TDF file conversion to VHDLTDF 文件转换为 VHDL
【发布时间】:2015-05-20 20:23:23
【问题描述】:

我正在尝试将一大段代码从 tdf(文本设计文件)转换为 vhdl。 在这个 tdf 文件中实现了一个状态机。

Y <= state0 # state1 # state2 # state3   // start at state 0 and stop at state 3

假设我已经定义了所有状态,我该如何用 VHDL 编写上述语句。 有什么想法吗?

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    Text Design File (.tdf)

    用 Altera 硬件描述语言 (AHDL) 编写的 ASCII 文本文件(扩展名为 .tdf)。

    AHDL 是叠加在大多数 ABEL 语言语法(更类似于 Verilog/C)上的 VHDL 语法子集。

    从 ABEL-HDL 参考手册ABEL-HDL Reference Manual,运算符、表达式和方程式第 24 页和表 1-3 逻辑运算符第 25 页我们看到 # 是 OR 运算符。

    有一个 AHDL 手册参见Altera AHDL Language Reference,参见表 3-1。 AHDL Symbols (Part 3 of 3) 文档第 96 页(PDF 第 117 页),其中我们还发现 # 是 OR 运算符(也由 OR 保留字表示,请参见表 3-3。算术运算符和在算术表达式中使用的比较器(第 2 部分,共 2 部分),文档第 104 页(PDF 第 125 页)。

    另见表 3.4。布尔表达式中使用的逻辑运算符,文档第 107 页(PDF 第 128 页)。

    还请注意您的问题“

    转换此赋值语句取决于Ystate0 是否为同一类型。

    如果它们是同一类型:

    Y <= state0 or state1 or state2 or state3;
    

    如果可能的话,您可以信任综合工具进行优化。

    如果它们属于不同的类型,则声明是必要的。 (从历史上看,信号的 ABEL 标识符是相同的匿名类型,问题是您是否已将这些类型声明为不同的类型)。

    AHDL 不支持用户定义类型,但允许枚举状态名称。

    这意味着状态类型类似于

    type state is (state0, state1, state2, state3, state4,...);
    signal sm:  state;
    

    并且需要条件赋值或 case 语句。

    Y <= '1' when sm = state0 or sm = state1 or sm = state2 or 
                  sm = state3 else
         '0';
    

    在适合顺序陈述的地方:

    case sm is
        when state0 | state1 | state2 | state2 =>
            Y <= '1';
        when others =>
            Y <= '0';
    end case;
    

    or and if 语句放在适合顺序语句的地方:

    if sm = state0 or sm = state1 or sm = state2 or sm = state3 then  
        Y <= '1';
    else
        Y <= '0';
    end if;  
    

    另见VHDL Reference Manual,附录 C. ABEL-HDL Designer 的 VHDL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      相关资源
      最近更新 更多