在VHDL中,什么是" if((' 0'& next_a)= 15)然后"
next_a是vecotr长度4(next_a:std_logic_vector(3 downto 0))
谢谢!
答案 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
会使操作同样清晰。
如果你在书中读到这本书,那就烧掉这本书(负责任地:避免森林大火!)。并从你自己的代码中删除这样的构造,以及你可以合理地使用那些非标准库。