gpt4 book ai didi

floating-point - Verilog 中的复杂浮点时序逻辑

转载 作者:行者123 更新时间:2023-12-04 06:37:20 28 4
gpt4 key购买 nike

我正在尝试用 Verilog/SystemVerilog 编写一个可合成的 3D 光栅器。现在的光栅化器并不是真正的 3D 光栅化器:它只接收六个用于顶点位置的 32 位 float (vertA_pos_x、vertA_pos_y、vertB_pos_x、vertB_pos_y、vertC_pos_x、vertC_pos_y)和九个用于顶点着色的 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代表屏幕底部/右侧。

栅格工作首先是计算需要多少条栅格线。假设帧缓冲区高度为 240 像素,顶点 A 是顶部顶点,B 是左下角,C 是右下角,X 是最底部顶点(B 或 C;这需要计算),栅格线的数量由 (vertX_pos_y - vertA_pos_y)/240 给出。

光栅化过程的这一部分非常复杂,足以暴露我的疑虑,所以我将不再解释我将如何进行这里。

现在我想知道的是如何在 Verilog 中实现这种“复杂”的逻辑(它之所以“复杂”是因为它是顺序的并且需要一个以上的时钟周期,这并不是设计起来最令人愉快的事情使用硬件描述语言)。

我正在使用 Altera 的 Quartus,所以我主要对 Altera 解决方案感兴趣。

Quartus 附带的浮点运算宏功能都需要一个以上的时钟周期才能完成,因此,要实现像 (vertX_pos_y - vertA_pos_y)/240 这样的“简单”计算,我是假设需要一个相当无聊且容易出错的状态机。我最大的期望是有人会告诉我我不需要那个,但如果不是这样,我仍然想知道人们通常如何设计这样的东西。

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

最佳答案

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

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

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

关于floating-point - Verilog 中的复杂浮点时序逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180415/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com