Перейти к содержанию
    

Потребовалось мне тут сделать перестраиваемый интерполирующий фильтр, но не модный CIC/RAM_CIC а колхозный FIR со всеми единичными коэффициентам (причины выбора FIR к теме не относится). Ну значит набросал код звена для сыклона 3

module acc
#(
 parameter int pDAT_W  = 16
)
(
 iclk   ,
 ireset ,
 isclr  ,
 imode  ,
 ival   ,
 idat   ,
 oval   ,
 odat
);

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 input  logic                       iclk    ;
 input  logic                       ireset  ;
 input  logic                       isclr   ;
 input  logic               [2 : 0] imode   ; // used upsample :: 0/1/2/3/4 == 1/2/4/8/16
 input  logic                       ival    ;
 input  logic signed [pDAT_W-1 : 0] idat    ;
 output logic                       oval    ;
 output logic signed [pDAT_W-1 : 0] odat    ;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 logic signed [pDAT_W - 1 + 4  : 0] acc [0 : 15];
 logic signed [pDAT_W - 1      : 0] mux;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 always_comb begin
   case (imode[1:0])
     2'd0    : mux = acc[0][pDAT_W - 1 + 0 : 0];
     2'd1    : mux = acc[1][pDAT_W - 1 + 1 : 1];
     2'd2    : mux = acc[3][pDAT_W - 1 + 2 : 2];
     2'd3    : mux = acc[7][pDAT_W - 1 + 3 : 3];
     default : mux = acc[0][pDAT_W - 1 + 0 : 0];
   endcase
 end

 always_ff @(posedge iclk) begin
   int i;
   //
   oval <= ival;
   if (ival) begin
     for (i = 0; i < 16; i++) begin
       acc[i] <= (i == 0) ? idat : (acc[i-1] + idat);
     end
   end
 end
`ifndef __USE_ALTERA_MACRO__
 always_ff @(posedge iclk) begin
   if (ival) begin
     odat <= imode[2] ? acc[15][pDAT_W - 1 + 4 : 4] : mux;
   end
 end
`else
 generate
   genvar i;
   for (i = 0; i < pDAT_W; i++) begin : gen
     dffeas
     dffeas
     (
       .clk    ( iclk           ) ,
       .d      ( mux [i]        ) ,
       .ena    ( ival           ) ,
       .asdata ( acc[15][4 + i] ) ,
       .sclr   ( 1'b0           ) ,
       .sload  ( imode[2]       ) ,
       .q      ( odat[i]        )
     );
   end
 endgenerate
`endif
endmodule

Посмотрите как он собирает выходной регистр odat в случаях pDAT_W < 16 и в случае pDAT_W >= 16.

Теперь проверьте сколько весит подмодуль acc, для 8ми битных данных в случаях pD = 2 и pD = 1.

module acc_var_order
#(
 parameter int pDAT_W  = 8
)
(
 iclk   ,
 ireset ,
 isclr  ,
 imode  ,
 ival   ,
 idat   ,
 oval   ,
 odat
);

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 input  logic                iclk    ;
 input  logic                ireset  ;
 input  logic                isclr   ;
 input  logic        [2 : 0] imode   ;
 input  logic                ival    ;
 input  logic [pDAT_W-1 : 0] idat    ;
 output logic                oval    ;
 output logic [pDAT_W-1 : 0] odat    ;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 localparam int pD = 2;

 logic                acc__ival [0 : pD-1];
 logic [pDAT_W-1 : 0] acc__idat [0 : pD-1];
 logic                acc__oval [0 : pD-1];
 logic [pDAT_W-1 : 0] acc__odat [0 : pD-1];

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 generate
   genvar i;
   for (i = 0; i < pD; i++) begin : gen_acc_stage
     //
     assign acc__ival[i] = ival;
     assign acc__idat[i] = (i == 0) ? idat : acc__odat[i-1];
     //
     acc
     #(
       .pDAT_W ( pDAT_W )
     )
     acc
     (
       .iclk   ( iclk         ) ,
       .ireset ( ireset       ) ,
       .isclr  ( isclr        ) ,
       .imode  ( imode        ) ,
       .ival   ( acc__ival[i] ) ,
       .idat   ( acc__idat[i] ) ,
       .oval   ( acc__oval[i] ) ,
       .odat   ( acc__odat[i] )
     );
     //
   end
 endgenerate

 assign oval = acc__oval[pD-1];
 assign odat = acc__odat[pD-1];

endmodule

Вот еще один маленький ответ, на что ориентируется квартус когда оценивает необходимость использования sload %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хоть намекните, какие выводы сделали. Я попробовал код, скомпилировал, посмотрел, но ничего не понял :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хоть намекните, какие выводы сделали. Я попробовал код, скомпилировал, посмотрел, но ничего не понял :)

 

предполагаю, что это касается каких-то общих ресурсов LAB-а

 

а интересно у симплифая лучше получится или нет?

 

btw: я после альтеры вернулся к ксайлинсу :) то есть не эксперт и вообще не понравилось :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

предполагаю, что это касается каких-то общих ресурсов LAB-а

По намекам des00 получается, что когда шина меньше 16 битов, то sload не используются. Скорее, касается цепей, подходящих к LAB-ам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По намекам des00 получается, что когда шина меньше 16 битов, то sload не используются. Скорее, касается цепей, подходящих к LAB-ам.

Да именно так, ква до последнего бережет этот ресурс(общий для 16 LC = LB для третьего сыклона), только когда размер регистра больше либо равен размеру LAB он задействует LC. Во втором случае, когда у нас 2 регистра по 8мь, он пакует их в один LB и делает sload. Похоже где то внутри у квартуса жесткое решение вида if (reg_length < 16) bla bla bla. Сюда просится более мягкий подход. Но что есть, то есть %)

 

btw: я после альтеры вернулся к ксайлинсу :) то есть не эксперт и вообще не понравилось :)

назад к кривому ISE из-за чуть более хороших чипов ? Или не вынесла душа поэта %)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

назад к кривому ISE из-за чуть более хороших чипов ?...

В моём случае Synplify спас отца русской демократии от психотравмы :laughing: а камушки у них действительно хорошие :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моём случае Synplify спас отца русской демократии от психотравмы :laughing: а камушки у них действительно хорошие :)

угу, еще бы чипскпоп заменить, SDC поддержку ввести, и глюкавый маппер с разводчиком подрихтовать %) Нет уж умерла, так умерла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 des00

ну я ж не говорю, что сексуальные отношения с асей от подключения Synplify сошли на нет :laughing: их просто стало меньше и нагрузка на мой молодой детский мозг уменьшилась :rolleyes: до приемлемой

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

угу, еще бы чипскпоп заменить, SDC поддержку ввести, и глюкавый маппер с разводчиком подрихтовать %) Нет уж умерла, так умерла.

 

Вчера на семинаре обещали к 2012 добавить поддержку SDC и SV  :biggrin:

 

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

Коллегам верю, но после вчерашних красочных рассказов немецких инженеров - решил таки скачать последнюю версию и проверить, насколько на данный момент Xilinx'овый софт конкурентен Альтеровскому.  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вчера на семинаре обещали к 2012 добавить поддержку SDC и SV  :biggrin:

в таком случае, зная традиции хилых, к 2014 ому после 8го сервис пака можно будет брать. Интересно разворачиваться он на сколько гиг будет %)

 

 

а там глядишь альтера нормальный сыклон 5 и макс 3 сделает.....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вчера на семинаре обещали к 2012 добавить поддержку SDC и SV  :biggrin:

 

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

Коллегам верю, но после вчерашних красочных рассказов немецких инженеров - решил таки скачать последнюю версию и проверить, насколько на данный момент Xilinx'овый софт конкурентен Альтеровскому.  :)

 

Пришлось немного попользоваться ISE - сплошные рвотные позывы. Списываю все это на свою зашоренность и привычку к Альтере. :biggrin:

 

des00

назад к кривому ISE из-за чуть более хороших чипов ? Или не вынесла душа поэта %)

Ну не знаю, один и тот же проект кушал ресурсов примерно одинаково (и скорости прогнозировали оба софта примерно равные) для циклона 3 и для спартана 6. Что собственно вы считаете преимуществом? А фиттер - да, песня просто. Когда посмотрел как он по чипу рассиропил проект - аж дурно стало. Я конечно подозреваю, что если его весь констрейнами огородить, то наверно можно получить человеческую упаковку. Но почему же все так плохо с дефолтовыми настройками... :crying:

Заказчику был нужен именно Xilinx только потому, что им нужны были бумаги по надежности от фирмы. Альтера на такое давно забила, имхо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вчера на семинаре обещали к 2012 добавить поддержку SDC и SV  :biggrin:

 

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

Коллегам верю, но после вчерашних красочных рассказов немецких инженеров - решил таки скачать последнюю версию и проверить, насколько на данный момент Xilinx'овый софт конкурентен Альтеровскому.  :)

 

Пришлось немного попользоваться ISE - сплошные рвотные позывы. Списываю все это на свою зашоренность и привычку к Альтере. :biggrin:

 

des00

назад к кривому ISE из-за чуть более хороших чипов ? Или не вынесла душа поэта %)

Ну не знаю, один и тот же проект кушал ресурсов примерно одинаково (и скорости прогнозировали оба софта примерно равные) для циклона 3 и для спартана 6. Что собственно вы считаете преимуществом? А фиттер - да, песня просто. Когда посмотрел как он по чипу рассиропил проект - аж дурно стало. Я конечно подозреваю, что если его весь констрейнами огородить, то наверно можно получить человеческую упаковку. Но почему же все так плохо с дефолтовыми настройками... :crying:

Заказчику был нужен именно Xilinx только потому, что им нужны были бумаги по надежности от фирмы. Альтера на такое давно забила, имхо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пришлось немного попользоваться ISE - сплошные рвотные позывы. Списываю все это на свою зашоренность и привычку к Альтере. :biggrin:

Какая версия?  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что собственно вы считаете преимуществом?

достаточно посмотреть на структуру слайса спартанов и LE сыклонов что бы увидеть разницу. Вот когда в сыклонах появится ALM от старших стратиксов, тогда архитектурно они сравняются. Да и ДСП спаратна 6 и сыклона 3 несравнимы. А на логике общего вида, как вы правильно заметили, чипы приблизительно равные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... как он по чипу рассиропил проект ...

Насколько я понимаю, "размазывание" проекта по ПЛИС делается специально, чтобы избежать температурных градиентов, иначе какая-то область перегревалась бы, расширялась и "ломала" кристалл.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...