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