【问题标题】:Complex floating-point sequential logic in VerilogVerilog 中的复杂浮点时序逻辑
【发布时间】:2010-07-05 14:50:47
【问题描述】:

我试图写了Verilog / SystemVerilog的可综合三维光栅化。光栅化器现在是不是一个真正的三维光栅化:它只是接收6个32位的float顶点位置(vertA_pos_x,vertA_pos_y,vertB_pos_x,vertB_pos_y,vertC_pos_x,vertC_pos_y)和9个顶点8位整数着色(vertA_color_r,vertA_color_g,vertA_color_b ,vertB_color_r,vertB_color_g,vertB_color_b,vertC_color_r,vertC_color_g,vertC_color_b)。

位置的范围是0.0F〜1.0F,0.0F表示屏幕的顶部/左侧,0.5F它的中间和1.0F底/右侧。 P>

在光栅工作将是,首先,计数需要多少光栅线。鉴于帧缓冲高度是240个像素,顶点A是顶端顶点,B是左下一个,C是右下一个和X是最底部顶点(或者B或C,这必须被计算),的栅格线的数量是由(vertX_pos_y - vertA_pos_y) / 240给出

栅格化处理的这部分是复杂的,足以暴露我的怀疑,所以我会停下来解释我怎么会在这里进行。 P>

现在我想知道的是如何用Verilog实现这种“复杂”的逻辑(它是“复杂的”,因为它是连续的,时间超过一个时钟周期,这是不完全的最愉快之类的话来设计用硬件描述语言)。

我使用Altera的Quartus等我感兴趣的主要是Altera的解决方案。 P>

这是附带的Quartus浮点操作宏功能都需要多于一个时钟周期到结束,所以,要实现像@ 987654322“简单”计算@,我假设一个相当无聊到写和无差错易发生状态机是必要的。我最大的期望是,会有人告诉我,我不需要这个,但如果不是这样,我还是想知道的人一般如何设计这样的事情。 P>

另请注意,我很新的Verilog和硬件设计一般,所以我很抱歉,如果我说了一些愚蠢的。想法?

【问题讨论】:

    标签: floating-point verilog intel-fpga


    【解决方案1】:

    您听说过流水线吗?这就是通常构建数据路径的方式。

    举个例子,假设你想做(a*b) + c,其中x*y 需要3 个时钟周期,x+y 需要1 个时钟周期。流水线只是意味着插入寄存器组来排列延迟。在示例中,输入 c 被延迟以匹配乘法的延迟。所以总的来说,这个操作会有 3 + 1 = 4 个时钟周期的延迟。

    现在,如果您需要进行大量计算,可以将流水线延迟“拼凑”在一起,这样您就不需要状态机逻辑来安排数学运算了。这意味着您必须等待几个周期才能得到答案(即延迟)——这在同步设计中确实是不可避免的。

    【讨论】:

    • 我最近(昨天?)确实听说过流水线。我对您所说的“乐高”管道延迟的含义非常感兴趣,以避免状态机逻辑。我真的不喜欢为此处理状态机。
    • 通过乐高,我只是意味着我喜欢将管道中的每种类型的数学运算视为不同颜色的砖块(例如,红色=mult,白色=延迟,蓝色=添加),并且乐高积木上的每个碰撞都作为延迟的时钟周期。然后,当我从块中构建数据路径时,我会考虑间隙,并考虑是否可以以不同的方式将数据路径组合在一起,以并行执行更多部分的计算,而不是放入延迟寄存器中。
    • 我能理解你的思维方式,我在听说流水线的时候想到了一个类似的比喻。但我从未见过这样的例子。你可以给我一些链接或用你自己编辑你的答案吗?不胜感激,您的回答会更完整。
    猜你喜欢
    • 2015-08-31
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多