在 VHDL 中 "if (('0' & next_a)=15) then" 是什么意思

In VHDL what is means of "if (('0' & next_a)=15) then"

在VHDL中"if (('0' & next_a)=15) then"

是什么意思

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

谢谢!

说明作者没看懂他在做什么

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

他可能正在使用 non-standard Synopsys 库中的一个,这些库默认对 non-numeric 数据进行签名解释,例如 std_logic_vector。

因此,他sign-extends 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

会让操作同样清晰。

如果您在书中读到此内容,请将其烧毁(负责任地:避免森林火灾!)。并在您自己的代码中合理地消除这样的构造,那些 non-standard 库。