在verilog中,每个周期的移位是否可能超过1位?

在verilog中,每个周期的移位是否可能超过1位?,verilog,cycle,shift,Verilog,Cycle,Shift,我不确定是否需要超过1个周期,以及是否需要考虑需要超过1个周期才能完成的班次。如果一次移位超过1位是可能的,那么移位1位所需的延迟/选通时间是否与移位多个位所需的延迟/选通时间相同?如果您指的是组合移位,那么固定移位根本不需要逻辑:它只是线路中的一些变化。如果需要变量移位,则可以使用以下Verilog运算符:(逻辑向右移位)或>(算术向右移位)。您的合成器应该为这些运算符合成一个组合电路。大小和延迟取决于所需的最大移位和要移位的字的长度。延迟是否超过一个时钟周期取决于时钟的频率。除非你有一个非常

我不确定是否需要超过1个周期,以及是否需要考虑需要超过1个周期才能完成的班次。如果一次移位超过1位是可能的,那么移位1位所需的延迟/选通时间是否与移位多个位所需的延迟/选通时间相同?

如果您指的是组合移位,那么固定移位根本不需要逻辑:它只是线路中的一些变化。如果需要变量移位,则可以使用以下Verilog运算符:
(逻辑向右移位)或
>
(算术向右移位)。您的合成器应该为这些运算符合成一个组合电路。大小和延迟取决于所需的最大移位和要移位的字的长度。延迟是否超过一个时钟周期取决于时钟的频率。除非你有一个非常快的时钟或一个非常长的最大移位,否则延迟可能很容易小于一个时钟周期

下面是Verilog中的组合左移位器:

module ones_shift #(log2_width=2) (input [(2**log2_width)-1:0] A,  input [log2_width:0] SHIFT, output [(2**log2_width)-1:0] As);

  assign As = A << SHIFT;

endmodule
module SHIFT_REG #(SIZE = 16) (input LOAD, SHIFT, CLOCK, RESET, [SIZE-1:0] A, output reg [SIZE-1:0] As);

  always @(posedge CLOCK or posedge RESET)
    if (RESET)
      As <= {SIZE{1'b0}};
    else
      if (LOAD)
        As <= A;
      else
        if (SHIFT)
          As <= {As[SIZE-2:0],1'b0};

endmodule


如果
LOAD
输入为高电平,则
A
输入被加载到移位寄存器中。如果
移位
输入为高电平,则寄存器向左移位(每
时钟
周期一位)。
As
输出是移位寄存器的并行输出。
RESET
输入处于高激活状态。

假设我要左移5档(@Brian Crafton合成器不会做出这样的决定;你必须这样做。当你使用HDL进行设计时,你是在更高的抽象层次上进行设计,但不是那么高。我可以在Verilog中给出组合移位和移位寄存器的示例,但现在。@Brian Crafton我添加了一些示例。如果这没有帮助,也许你可以合作uld提供关于您的问题的更多细节。您在转移什么?为什么?