[an error occurred while processing this directive] [an error occurred while processing this directive]
немножко соображения о сдвигах (не уверен что правда)
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено yes 14 декабря 2001 г. 12:21
В ответ на: Free FPGA 32-bit Processor (vc232cpu) on VHDL отправлено Nicky 14 декабря 2001 г. 08:09

в доке Вы пишите что реализация сдвига требует много вентилей -

есть подозрение, что используемое средство синтеза не "умное"

(хотя я не силен ни в VHDL, ни в синтезе FPGA - но по моему скромному разумению любой сдвиг должен хорошо умещатся в FPGA-шные lut-ы)

сдвиги на любое количество разрядов - один из простых элементов

реализуется в виде набора мультиплексоров со смещаемыми на i^2 шинами,
тип сдвига (циклический, через перенос, арифметический) задается дополнительными мультиплексорами (вправо / влево - тоже логикой)

если средство синтеза не умеет правильно синтезировать оператор сдвига - ему нужно подсказать (интересно проверить во что синтезируются Ваши описания - думаю что Амбит их синтезирует правильно)

из-за копирайтных соображений я не могу показать "реальную" реализацию универсального шифтера, но вот простейший пример реализации арифметического сдвига

(я так многословен - так как занимался оптимизацией сдвигателя, но наш Амбит синтезирует операторы >> Верилога правильно и это не понадобилось)

module inv_mux_2to1 (in1,in2,out,sel);
input [31:0] in1,in2;
output [31:0] out;
input sel;
assign out=~(sel?in2:in1);
endmodule

module shift2(in,out,shft);
input [31:0] in;
output [31:0] out;
input [4:0] shft;

wire [31:0] s0,s1,s2,s3;

inv_mux_2to1 m1 (~in,{~in[31],~in[31:1]},s0,shft[0]);
inv_mux_2to1 m2 (s0,{{2{in[31]}},s0[31:2]},s1,shft[1]);
inv_mux_2to1 m3 (s1,{{4{~in[31]}},s1[31:4]},s2,shft[2]);
inv_mux_2to1 m4 (s2,{{8{in[31]}},s2[31:8]},s3,shft[3]);
inv_mux_2to1 m5 (s3,{{16{~in[31]}},s3[31:16]},out,shft[3]);

endmodule

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru