Verilog 动态移位16位寄存器的最快方法

Verilog 动态移位16位寄存器的最快方法,verilog,system-verilog,Verilog,System Verilog,我想设计一个模块,将16位寄存器移位n次,其中n每次都动态变化。我想在1个时钟周期内得到结果,我正在使用Xilinx Zynq FPGA。我已经知道我的设计有三种实现方式,但我想知道是否存在其他可能的方式: 1-我想到的第一种方法是使用顺序逻辑在每个周期进行一次换档。在最坏的情况下,我需要16个周期(如果n=16)来完成这个移位 2-另一种方法是连接16种不同的移位组合,并将它们输入多路复用器,然后使用n选择我想要的移位。在一个周期内,我可以轻松地将输入数字移动任意次数 第三种方法是在我的FPG

我想设计一个模块,将16位寄存器移位n次,其中n每次都动态变化。我想在1个时钟周期内得到结果,我正在使用Xilinx Zynq FPGA。我已经知道我的设计有三种实现方式,但我想知道是否存在其他可能的方式:

1-我想到的第一种方法是使用顺序逻辑在每个周期进行一次换档。在最坏的情况下,我需要16个周期(如果n=16)来完成这个移位

2-另一种方法是连接16种不同的移位组合,并将它们输入多路复用器,然后使用n选择我想要的移位。在一个周期内,我可以轻松地将输入数字移动任意次数

第三种方法是在我的FPGA中使用基于RAM的移位寄存器


第一种方法显然不满足我的约束,我希望在一个时钟周期内得到结果。如果我想扩展我的设计,第二种方法似乎消耗了我大量的fpga资源,第三种方法是使用我宝贵的BRAM。我想知道是否存在其他方法?

为什么不使用内置的换档操纵器


分配x=y为什么不使用内置的换档运算符


分配x=y 1)什么被移入?只有零,或者每个周期最多16位的输入?2) 您需要访问多少输出?寄存器的一位或全部16位?1)我在0中移位2)我需要访问所有16位1)那么非零内容如何进入寄存器?有没有办法并行加载,或者…?1)什么被移入?只有零,或者每个周期最多16位的输入?2) 您需要访问多少输出?寄存器的一位或全部16位?1)我在0中移位2)我需要访问所有16位1)那么非零内容如何进入寄存器?有没有办法并行加载,或者…?我最终设计了一个对数移位器。你知道“综合和逻辑优化”是否变得非常好。不要忘记,除非您采取特定的步骤,否则它们是介于代码和实际硬件之间的。如果您的代码和上面的代码生成相同的门,我不会感到惊讶。特别是在FPGA上。谢谢你的评论,我将尝试两种方法!我最终设计了一个对数移位器。你知道“综合和逻辑优化”是否变得非常好。不要忘记,除非您采取特定的步骤,否则它们是介于代码和实际硬件之间的。如果您的代码和上面的代码生成相同的门,我不会感到惊讶。特别是在FPGA上。谢谢你的评论,我将尝试两种方法!