如何估计某个功能是否会占用FPGA上过多的资源?

时间:2012-06-18 21:23:27

标签: hardware vhdl fpga

我开始使用我的第一个商业规模的应用程序,我经常发现自己正在设计,但是停止编码和实现它,因为它似乎是一种巨大的资源利用。当它位于外围设备上时(例如移位寄存器的输出抽头启用),尤其如此。当我考虑通用实现可以获得多大时(tk示例为4k位),情况会变得更糟。最干净的实现会有这些,但在我的脑海中它增加了大量的开销。

我是否可以使用任何一种规则来快速决定设计选项是否值得编码和评估?一般来说,我更少关注触发器的数量,而更多的是关于信号的宽度。这可能只是来自CS背景,其中所有应用程序边界应尽可能小,以防止开销。

2 个答案:

答案 0 :(得分:2)

要点1.我们通过玩耍来学习,所以玩!尝试几件事。看看这些工具做了什么。感受一下这个问题。你不会过去这是你不尝试的东西。通常问题不在于你认为的问题。

要点2.您需要为这些决策获取一些背景信息。与FPGA /您的设计的容量相比,为移位寄存器添加一个使能有多大?

要点3.需要考虑两种主要类型的“资源”: - 细胞和时间。

从广义上讲,细胞相对容易。多少次失败?可识别块中的逻辑多少(例如在ALU中:乘法器,加法器等)?通常这是由您尝试的设计定义的。如果没有寄存器,乘法器,加法器等,则无法构建ALU。

时间更加微妙,并且总是与细胞交换。你将尝试达到一些性能目标,并认识到那些难以实现的结构是从第1点开始经历的。

需要注意的事项包括:

  • 一个网络驱动大量的东西。大型扇出会对单个驱动器造成沉重负担,从而减慢其速度。然后该工具必须使用单元来缓冲该信号。经典时间与细胞权衡关系。
  • 寄存器阶段之间的深层逻辑。如果它接近边缘,该工具将不得不花费更多的单元来使逻辑满足时序。简单的逻辑快速而小巧。有时引入流水线阶段可以减小设计的大小,这使得逻辑任何一方都容易得多。

不要太担心大型总线,如果每个位都是低扇出并且您已为寄存器编制预算。大型总线通常是快速设计中固有的,因为您需要高带宽。它可以更宽广,而不是更高的时钟速度。另一方面,考虑宽总线的控制逻辑,因为它可能有很大的扇出。

不同的工具和目标设备具有不同的特征,因此您必须播放并学习设置规则。总有一个大小与速度(以及这些天与权力')的妥协。您需要了解在每个方向上沿着该曲线移动的因素。这带来了经验。

  

我是否可以使用任何一种规则来快速决定设计选项是否值得编码和评估?

我能想出的唯一规则是'我有时间吗?不是吗?'

如果有,我会探索。如果不是,我最好只使某事工作。

啊,在截止日期前完成设计的生活!

答案 1 :(得分:1)

这是经验带来的东西。这里有一些指示:

  • 添加数字相当便宜
  • 如果您对多路复用器有大量输入(每个输入的宽度也是次要问题),
  • 在它们之间进行选择(多路复用)会很快变大。
  • 如果您的芯片中有备用乘法器,则乘法是免费的,当您用完硬DSP时,它们会突然变得昂贵。
  • 内存也很便宜,直到你用完为止。例如,您的4Kbit移位寄存器可轻松放入单个Xilinx Block RAM中,如果您有备用的话,这很好。如果没有,它将需要大量的LUT(取决于器件 - 较旧的Spartan 3可以将17位装入LUT(包括in-CLB寄存器),因此需要~235 LUTS)。并非所有LUT都能 移位寄存器。如果您只担心启用寄存器,请不要。除非你推动设备的性能,否则将这种信号路由到几百个LUT不太可能导致重大的时序问题。