在 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 库。
在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 库。