我有一个程序,我按照以下方式使用 inout 端口:
port : inout unsigned(9 downto 0);
...
if port > 10 then
port <= port + 1
end if;
我正在使用 inout 端口,这样我就可以读取输出 (实现反馈).
要么是我和老师之间有误会,要么是我的老师强烈反对使用输入输出端口.
我习惯了高级编程,所以编写这样的代码对我来说并不奇怪。我知道FPGA上带有输入输出端口的电路并不多,但我不经常使用它,将输入输出端口拆分为输入和输出,只是为了获得我想要的功能,这违背了我的感觉,不同的方式。
我会为你感到高兴关于使用输入输出端口的第二种意见.
如果您要实现双向端口,那么 inout 当然是正确的选择!
但是对于读取输出到端口的值,您的老师是对的;这是极其糟糕的做法。 (如果其他东西也在驱动该端口,您将看到解析值而不是您想要的值)。
这就是“缓冲”端口的用途。
不幸的是,对缓冲区端口存在很多奇怪的偏见,并且某些工具在使用它们时会发出不必要的警告(尽管它们通常很好地实现它们!)并且存在一些不必要的奇怪规则将缓冲区端口连接到外部模块中的端口。
我不记得确切的细节,但我相信缓冲端口不能直接连接到下一个级别的输出端口 - 尽管 VHDL-2002 和更新版本删除了这条规则。尽管“缓冲”端口现在更容易使用,但仍然有人不愿意使用它们。
因此,最常见的解决方案是使用内部信号,例如port_int
您可以阅读它,以及将其复制到实际端口的简单赋值语句。
因此,VHDL-2008 删除了禁止读取驱动到“输出”端口的值的限制,从而使“输出”端口与“缓冲”端口无法区分。
我的偏好:使用缓冲端口。
如果有某种原因阻止这种情况(比如代码风格指南,或当地流行的观点),那么
(a) 如果您的工具支持 VHDL-2008,请使用“输出”端口,或者
(b) 使用内部信号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)