2016-03-18 4 views
0

Я не уверен, требуется ли более 1 цикла, и если мне нужно будет учитывать сдвиг, для завершения более 1 цикла. И если можно сдвинуть более 1 бит за раз, сдвигает ли 1 бит один и тот же уровень задержки/времени затвора, как сдвиг нескольких бит?Можно ли переместить более 1 бит за цикл в verilog?

ответ

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 активен-высокий.

+0

Скажем, я должен был сделать сдвиг влево по 5 (<< 5) в регистре. Это займет 5 циклов или 1 цикл? Будет ли синтезатор рассматривать его как регистр сдвига или он сделает какой-то трюк, который заставит его принять только один цикл? –

+0

@Brian Crafton Синтезатор не примет такого решения; вы должны. Когда вы разрабатываете HDL, вы разрабатываете более высокий уровень абстракции, но не настолько высок. Я мог бы привести примеры комбинационного сдвига и сдвигового регистра в Verilog, но теперь. –

+0

@Brian Crafton Я добавил несколько примеров. Если это не поможет, возможно, вы могли бы предоставить более подробную информацию о своем вопросе. Что ты меняешь? Зачем? –

Смежные вопросы