Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Xilinx Spartan6 использование SRL16
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
des00
Добрый день!

Подскажите пожалуйста, как правильно написать код, что бы ISE 14.7 понял что я хочу поставить два SRL16E блока в одном люте, как это изображено на рисунке №19, под названием Dual 16-bit Shift Register Configuration в ug384.pdf Spartan-6 FPGA Configurable Logic Block?

сделал так
Код
  generate
    for (i = 0; i < pDAT_W/4; i = i + 1) begin
      srl16
      srl16_0
      (
        .clk    ( iclk                    ) ,
        //
        .clkena ( iclkena & iwrite        ) ,
        .idat   ( iwdat0       [i]        ) ,
        //
        .addr   ( idat         [4*i +: 4] ) ,
        //
        .odat   ( srl16__odat0 [i]        )
      );

      srl16
      srl16_1
      (
        .clk    ( iclk                    ) ,
        //
        .clkena ( iclkena & iwrite        ) ,
        .idat   ( iwdat1       [i]        ) ,
        //
        .addr   ( idat         [4*i +: 4] ) ,
        //
        .odat   ( srl16__odat1 [i]        )
      );

    end
  endgenerate

Все требования выполнил, данные пишутся одновременно в два SRL16, чтение зашарено. Но смотрю FPGA Editor, ISE пихает их в разные LUT sad.gif

ЗЫ. Сам SRL16 вставлял не как компонент, а кодом
Код
module srl16
(
  clk    ,
  clkena ,
  idat   ,
  addr   ,
  odat
);

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

  input  wire         clk;
  input  wire         clkena;
  input  wire         idat  ;
  input  wire [3 : 0] addr  ;
  output wire         odat  ;

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

  reg [15 : 0] ram;

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

  // synthesis translate_off
  initial ram = 16'h0;
  // synthesis translate_on

  always @(posedge clk) begin
    if (clkena) begin
      ram <= {ram[14 : 0], idat};
    end
  end

  assign odat = ram[addr];

endmodule
RobFPGA
Приветствую!

Только через RTL никак.

Нужно добавлять в RTL атрибуты/констрэйны для PR - RLOC, USET, USE_RLOC.

Успехов! Rob.



des00
Цитата(RobFPGA @ Aug 8 2014, 20:54) *
Приветствую!

Только через RTL никак.

Нужно добавлять в RTL атрибуты/констрэйны для PR - RLOC, USET, USE_RLOC.

Успехов! Rob.

Понял. Спасибо. Ндя, совсем печально.
faa
Цитата(des00 @ Aug 8 2014, 18:03) *
Понял. Спасибо. Ндя, совсем печально.

А переменная XIL_MAP_SRL_COMPRESSION установлена?
Под линухом так ставлю
Код
XIL_MAP_SRL_COMPRESSION=1
export XIL_MAP_SRL_COMPRESSION

ЗЫ: Для S6 можно (и, ИМХО, нужно) использовать связку SLR16 и FD выходе (их 2 на каждый лут), уменьшив величину сдвига в SLR на 1 - времянка луше получается.
И можно в примитивах написать и зафиксить RLOC - тогда точно сделает как надо.
Timmy
Цитата(des00 @ Aug 8 2014, 17:36) *
Добрый день!

Подскажите пожалуйста, как правильно написать код, что бы ISE 14.7 понял что я хочу поставить два SRL16E блока в одном люте, как это изображено на рисунке №19, под названием Dual 16-bit Shift Register Configuration в ug384.pdf Spartan-6 FPGA Configurable Logic Block?
Все требования выполнил, данные пишутся одновременно в два SRL16, чтение зашарено. Но смотрю FPGA Editor, ISE пихает их в разные LUT sad.gif

На самом деле вы не выполнили требования - необходимо, чтобы общая длина SRLC32 была строго 32 бита, а вот промежуточный отвод можно сделать динамически из любой точки. В вашем случае общая длина равна сумме длин двух одинаковых SRL16. Не исключено также, что XST может сделать inference srlc32 только для фиксированных сдвигов, а для динамического среднего отвода потребуется instantiation.
Ой, это я не тот рисунок посмотрелsm.gif. Ну тогда действительно только RLOC. Кроме того, ISE вообще любит разделять смежные LUTы, особенно когда много места, и не включена опция LUT packing.
des00
Цитата(faa @ Aug 8 2014, 23:48) *
А переменная XIL_MAP_SRL_COMPRESSION установлена?

Спасибо! по ключевому слову нашел вот что http://www.xilinx.com/support/answers/32987.html

Поставил заработало, но как то все не однозначно. Часть он делает двойными, часть одинарными. При этом разность в Slice всегда разная. Живет своей жизнью sad.gif
faa
Цитата(des00 @ Aug 11 2014, 10:56) *
Поставил заработало, но как то все не однозначно. Часть он делает двойными, часть одинарными. При этом разность в Slice всегда разная. Живет своей жизнью sad.gif


Однозначно будет, если сделать в примитивах и с RLOC или HBLKNM. Только надо учесть, что связка SRL16 и FD даст минимальную задержку в два такта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.