使用嵌套的条件运算符会有任何性能损失吗?

时间:2017-05-12 03:01:53

标签: verilog

这是一个example,它使用嵌套的条件运算符将寄存器地址映射到它的值。

reg [4:0] mux;
reg [1:0] addr;
mux = (addr == 2'b00) ? i0 :
  ((addr == 2'b01) ? i1 :
  ((addr == 2'b10) ? i2 :
  ((addr == 2'b11) ? i3 :
  4'bz)));

在我的应用程序中,大约有一百个寄存器,因此嵌套级别非常深。如果表达式是由CPU执行的C语言,则会非常慢。

FPGA怎么样?

1 个答案:

答案 0 :(得分:0)

根据我的经验,这取决于合成器以及使用的选项。它可以使用您的代码作为功能指南来生成等效逻辑。或者它可以将其用作结构指南,在这种情况下,每个?:条件运算符都映射到2:1多路复用器。您可以使用合成器进行实验,以确定如何生成门等效物,并阅读手册中的合成选项。

一般情况下,当我故意想要2:1多路复用(或三态驱动程序)时,我会使用?:条件运算符。对于更复杂的条件复用,我更喜欢使用case语句或if-else语句。该策略通常满足时间和区域要求。

对于大型多路复用(您提到“大约一百个寄存器”),满足时序和面积要求可能很困难。有时合成器可以处理这个,有时它需要更多的指导。合成器指令(参考手册)和将多路复用器拆分成块是处理它的一种方法。您的FPGA可能具有专用逻辑的宏模块(RAM,复杂算术逻辑等),您可以实例化以替换代码的某些部分。