【问题标题】:VHDL: Concat inout std_logic into std_logic_vector signalVHDL:将输入输出 std_logic 连接到 std_logic_vector 信号
【发布时间】:2014-02-27 16:13:53
【问题描述】:

我的顶级端口声明中定义了几个三态(输入输出)std_logic 端口引脚。我有一个需要使用这些的专用内部组件,但它的端口被定义为具有 inout std_logic_vector (不是我的代码,我无法更改),我需要将我的 std_logic 连接到一个 std_logic_vector 以使其快乐。

问题是:我不知道该怎么做。

我认为 ALIAS 是正确的路线,但显然在定义别名时不能使用连接运算符。

然后我想我会使用 std_logic_vector 内部信号:

mySignal <= inOutBit2 & inOutBit1 & inOutBit0; --Input route

componentPort => mySignal, --Component use

inOutBit2 <= mySignal(2);
inOutBit1 <= mySignal(1);
inOutBit0 <= mySignal(0); --Output route

但这不会合成,因为它将 inOutBitn 视为具有多个驱动程序。

我能做些什么来合成它吗?我知道我可以将我的顶级 inout 端口声明为 std_logic_vector,但这是次优的,因为我们有一个明确定义的端口标签约定。

【问题讨论】:

  • 你不能用mySignal(0) &lt;= inOutBit0等代替第一行吗?
  • 对于标准的 VHDL 信号,分配向量的每个位或使用串联将整个向量分配在 1 行中没有区别。或者您是说在输入输出端口方面存在差异?
  • 我的错;你说得对。您能否添加更多代码(定义)和综合错误/错误结果?

标签: vhdl


【解决方案1】:

根据您的描述,我了解到顶级端口和组件端口都是模式inout

如果是这样,那么将组件端口直接连接到std_logic 级别的外部inout 端口可能会有所帮助,例如:

componentPort(0) => inOutBit0,  --Component use
componentPort(1) => inOutBit1,  --Component use
componentPort(2) => inOutBit2,  --Component use

然后不需要中间的mySignal

但是,描述中说综合报告了inOutBitn 的多个驱动程序,但我希望它在原始代码中报告了mySignal 的多个驱动程序。

【讨论】:

  • 很酷,谢谢!我完全没想到你可以用这种方式实例化组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
相关资源
最近更新 更多