我最近开始研究HDL语言,同时通过右/左移位运算符,我在学校学习的是它们是连续的D FlipFlops,逐位移位数据以产生输出。
我假设在用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

发布于 2020-07-22 18:02:51
在硬件方面,左/右移位器是一组简单的多路复用器,看看桶形移位器的设计。此外,这取决于EDA合成器如何推断和可能的优化。

发布于 2020-07-27 17:18:47
真正的触发器驻留在RTL_REG中。RTL_LSHIFT重新排列输入向量的位顺序。我不熟悉您用来生成这个示意图的工具(我想可能来自Xilinx ),所以我也不知道I0/I1/I2是怎么回事。此外,如果您的问题仅限于固定的移位位置,如左移恰好2位,我们希望使用这种串联形式out <= {in[3:0], 2'b0}; (假设out和in都是6位信号)。这使得我们的代码更精确,并减少了潜在的bug。很抱歉,由于时间和我目前正在使用的计算机,我没有合适的工具来绘制原理图。
发布于 2020-08-08 03:46:59
对于恒定的移位,使用导线。您只需将每个输入位连接到正确的输出位置即可。不需要其他部件。
在您的示例中,a连接到c_reg1的d输入,a1连接到c_reg2的d输入,依此类推。未分配的位连接到0。由于c7:9始终为0,因此您的工具已将输出直接连接到0,而无需触发器。
在FPGA中,导线本身是由下载到FPGA的比特流编程的多路复用器,但从概念上讲,固定移位仍然是导线。
在其他实现技术和/或优化器中,我确信c也将连接到0。
如果移位不是恒定的,你需要m4j0rt0m描述的桶形移位器。
https://stackoverflow.com/questions/63028094
复制相似问题