在VHDL中,什么是" if((' 0'& next_a)= 15)然后"

时间:2016-01-17 08:56:40

标签: vhdl

在VHDL中,什么是" if((' 0'& next_a)= 15)然后"

next_a是vecotr长度4(next_a:std_logic_vector(3 downto 0))

谢谢!

1 个答案:

答案 0 :(得分:2)

这意味着作者不明白他在做什么。

作者显然意识到(或在调试会话中发现)15不能表示为带符号的4位值,尽管他可能不知道它可以表示为无符号的4位值。

他可能正在使用其中一个非标准Synopsys库,默认使用非数字数据(如std_logic_vector)的签名解释。

因此,他没有向编译器明确表示他希望进行无符号比较,而是通过在next_a前加上符号扩展'0'来生成5位有符号表示。

如果他首先对设计有了更清晰的认识,那么他就会使用numeric_std库并将next_a声明为unsigned(3 downto 0)甚至是natural range 0 to 15。并写了

if next_a = 15 then

如果出于某种原因他被迫使用std_logic_vector,那么

if unsigned(next_a) = 15 then

会使操作同样清晰。

如果你在书中读到这本书,那就烧掉这本书(负责任地:避免森林大火!)。并从你自己的代码中删除这样的构造,以及你可以合理地使用那些非标准库。