TDF文件转换为VHDL

时间:2015-05-19 20:05:44

标签: vhdl

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

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

如果我定义了所有状态,我如何在VHDL中编写上述语句。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Text Design File (.tdf)

  

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

AHDL是一种VHDL语法子集,叠加在大多数ABEL语言语法上(更像是Verilog / C)。

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

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

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

另请注意,您的问题“&lt; =”不是AHDL或ABEL中的赋值运算符。 (VHDL没有赋值运算符,赋值是一个基本操作,运算符可以重载,基本操作不能)。

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

如果它们属于同一类型:

Y <= state0 or state1 or state2 or state3;

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

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

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

这意味着

的状态类型
type state is (state0, state1, state2, state3, state4,...);
signal sm:  state;

并要求条件转让或个案陈述。

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;

或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。