我不确定是否需要超过1个周期,如果我需要考虑需要超过1个周期才能完成的轮班。如果有可能一次移位1位以上,那么移位1位需要与移位多位相同的延迟/门限时间吗?
答案 0 :(得分: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
http://www.edaplayground.com/x/24P8
移位器将A
输入移动SHIFT
输入所代表的位数,以提供As
输出。
如果你的意思是移位寄存器(是一个时序电路),那么你每个时钟周期就会有一个移位。
这是Verilog中的移位寄存器:
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
http://www.edaplayground.com/x/2bAW
如果LOAD
输入为高,则A
输入将加载到移位寄存器中。如果SHIFT
输入为高电平,则寄存器向左移位(每CLOCK
个周期一位)。 As
输出是移位寄存器的并行输出。 RESET
输入为高电平有效。