我有一个使用inout端口的程序,方法如下:
port : inout unsigned(9 downto 0);
...
if port > 10 then
port <= port + 1
end if;我使用inout端口,以便读取输出(以实现反馈)。
要么我和我的老师之间有分歧,要么我的老师强烈反对使用inout端口。
我已经习惯了高级编程,所以写这样的代码对我来说并不奇怪。我知道FPGA上的inout端口没有太多的电路,但我并不经常使用它,这与我将inout端口拆分为输入和输出的感觉背道而驰,只是为了获得我想要的功能,采用不同的方式。
我很高兴您的对使用inout端口的第二个意见。
发布于 2012-12-12 22:42:49
如果您正在实现双向端口,那么当然使用inout是正确的!
BUt用于读取输出到端口的值,您的老师是对的,这是非常糟糕的实践。(如果其他东西也在驱动该端口,您将看到已解析的值,而不是所需的值)。
这就是“缓冲区”端口的用途。
不幸的是,对于缓冲区端口存在着许多奇怪的偏见,一些工具在使用它们时发出不必要的警告(尽管它们通常实现得很好!)还有一些不必要的奇怪规则将缓冲区端口连接到外部模块中的端口。
我不记得确切的细节,但我相信缓冲区端口不能直接连接到下一个级别的输出端口--尽管VHDL-2002和更新版本删除了这条规则。尽管“缓冲区”端口现在更容易使用,但仍然有些不愿使用它们。
因此,最常见的解决方案是使用内部信号(例如可以读取的port_int )和一个简单的赋值语句将其复制到实际端口。
因此,VHDL-2008取消了禁止读取被驱动到"out“端口的值的限制,使得"out”端口与“缓冲器”端口无法区分。
我的偏好是:使用缓冲端口。
如果有某种原因阻止这一点(例如代码风格指南或当地主流意见),那么(a)如果您的工具支持VHDL-2008或(b)使用内部信号,则使用"out“端口。
https://stackoverflow.com/questions/13849725
复制相似问题