如何实现一个特殊的选择器

时间:2014-03-20 22:04:31

标签: verilog

是否可以编写一个带有3条线a,b,c的模块,它将输出:

  1. z(断开连接)如果a = b = c = z
  2. a if a =(0或1)且b = c = z
  3. b如果b =(0或1)且a = c = z
  4. c如果c =(0或1)且a = b = z
  5. x(不关心)否则
  6. 在verilog?

2 个答案:

答案 0 :(得分:0)

如果您有三个网都驱动相同的线,那么这将在模拟中得到您想要的东西:

module three_drive(
  input a,
  input b,
  input c,
  output d);

  assign d=a;
  assign d=b;
  assign d=c;

endmodule 

然而,我不知道合成会对此有何影响。

听起来我真正想要的是将这三个信号一起放在FPGA的输入上并将它们缩短在一起。

答案 1 :(得分:0)

如果你不关心如果没有人驾驶它会导致什么结果,那么nguthrie有正确的答案。如果它不是x,如果它不被驱动,那么你可以这样做:

module three_drive(
  input a,
  input b,
  input c,
  output d);

  wire temp;
  assign temp=a;
  assign temp=b;
  assign temp=c;
  assign d = (temp === 1'bz) ? 1'bx : temp;

endmodule

以上不是可综合的,但它会得到您正在寻找的模拟行为。