0

我最近开始研究 HDL ,同时通过右/左移位运算符,我在学校学习的是它们是连续的 D FlipFlop,可以逐位移动数据以产生输出。

我假设在 hdl 中合成它们时也会完成相同的操作,但我在 verilog 合成中看不到相同的硬件,它看起来就像 RTL_LSHIFT 中的简单串联操作。

有人可以解释一下这个 RTL_LSHIFT 内部的硬件实际上是如何的吗?如果是FF,那么为什么没有时钟输入到BLock。

我知道算术和逻辑移位的所有功能,我需要用 HDL 合成的硬件。

代码:

module doubt(
    input[5:0] a,
    input [5:0] b,
    input clk,
    output reg [9:0] c,
    output reg [9:0] d
    );
    reg s1,s2;
    always @ ( posedge clk)
   begin 
   
   c <= (a<<1);
   d<= (b<<4);
    end  
endmodule

在此处输入图像描述

4

3 回答 3

0

在硬件中,左/右移位器是一组简单的多路复用器,看看桶形移位器的设计。此外,这取决于 EDA 合成器如何推断和优化。

桶式移位器

于 2020-07-22T10:02:50.713 回答
0

真正的人字拖位于RTL_REG. 重新排列输入向量的RTL_LSHIFT位顺序。我不熟悉您用来生成此原理图的工具(我认为可能来自 Xilinx),所以我也不知道I0/ I1/到底是什么I2。此外,如果您的问题仅限于固定移位位置,例如左移恰好 2 位,我们希望使用这种连接形式out <= {in[3:0], 2'b0};(给定out并且in都是 6 位信号)。这使我们的代码更加精确,并减少了潜在的错误。抱歉,由于时间和我目前正在使用的计算机,我没有合适的工具来绘制示意图。

于 2020-07-27T09:18:47.127 回答
0

对于恒定的转变,使用电线。您只需将每个输入位连接到正确的输出位置。不需要其他部件。

在您的示例中,a[0] 连接到 c_reg[1] 的 d 输入,a[1] 连接到 c_reg[2] 的 d 输入,等等。未分配的位连接到 0。因为 c[ 7:9] 始终为 0,您的工具已将输出直接连接到 0,无需触发器。

在 FPGA 中,线路本身是由下载到 FPGA 的比特流编程的多路复用器,但从概念上讲,固定移位仍然是线路。

在其他实现技术和/或优化器中,我确信 c[0] 也将被连接到 0。

如果移位不是恒定的,则需要 m4j0rt0m 描述的桶形移位器。

于 2020-08-07T19:46:59.303 回答