【问题标题】:Bidirectional assignment in SystemverilogSystemverilog 中的双向分配
【发布时间】:2018-06-25 13:03:34
【问题描述】:

我需要创建与 inout 引脚配合使用的多路复用块。 我的模块有 n 个输入和 n 个输出,我希望能够切换 在不同的输出之间。

我目前遇到的问题是我需要这样做 输入引脚。所以如果我的输出引脚被拉低,输入引脚 mux 会看到这一点。这不适用于常见的分配语句,因为 它只会写一个方向。我尝试了一个别名语句,它 像双向分配一样工作,但我不能将它与多路复用器的 if 语句结合使用。

我想做什么:

alias net_out = (config) ? net1 : net2;

我已经创建了一个示例on edaplayground

提前致谢, 帕特里克

【问题讨论】:

  • 根据我的口味,您的问题和示例都没有清楚地解释您试图解决的问题。这是否意味着“输入”引脚外壳看到了?如何?在您的示例中,您可以使用 'out2' 驱动 'in1' 以在 tb 代码中获取 'x'。为什么你没有这样做?能详细点吗?
  • x 仅在输出引脚可见,在输入引脚不可见。如果是双向连接,x 也应该在输入引脚上可见。示例中的代码是单向的,您在输入引脚上看不到 x。
  • 这里是双向总线的post

标签: verilog system-verilog assign


【解决方案1】:

您可以使用双向tran 原语,这正是在 MOS 硬件中实现此功能的方式。

tranif1(net_out, net1, config);
tranif0(net_out, net2, config);

如果您希望在硬件中做到这一点,这必须是您的技术支持的东西。大多数 FPGA 不支持这一点。

但是,如果此 config 信号是参数而不是变量,则可以使用带有 generate-if 的 alias 语句

if(config)
  alias net_out = net1;
else
  alias net_out = net2;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多