Systemverilog中的双向分配

时间:2018-06-25 13:03:35

标签: verilog system-verilog assign

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

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

我想做什么:

alias net_out = (config) ? net1 : net2;

我创建了一个示例on edaplayground

预先感谢, 帕特里克

1 个答案:

答案 0 :(得分:2)

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

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

如果您希望在硬件中执行此操作,则必须由您的技术支持。大多数FPGA不支持此功能。

但是,如果此config信号是参数而不是变量,则可以将alias语句与generate-if一起使用

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