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

Вопрос по Xilinx CoreLib

Вопрос следующий. Требуется (если быть точным, было бы очень желательно) использовать вместо создания каждый раз проекта в Core Generator тех же самых КИХ-ов (FIR-filter) в случае, скажем, изменения их разрядности, просто обращение к соответствующему компоненту из Xilinx CoreLib с изменением соответствующих generic. Это возможно, вот соответствующий пример FIR-фильтра на Distributed Arithmetics:

Library XilinxCoreLib;
ENTITY DAFIR12 IS
    port (
    ND: IN std_logic;
    RDY: OUT std_logic;
    CLK: IN std_logic;
    RST: IN std_logic;
    RFD: OUT std_logic;
    DIN: IN std_logic_VECTOR(9 downto 0);
    DOUT: OUT std_logic_VECTOR(15 downto 0));
END DAFIR12;

ARCHITECTURE DAFIR12_a OF DAFIR12 IS
-- synthesis translate_off
component wrapped_DAFIR12
    port (
    ND: IN std_logic;
    RDY: OUT std_logic;
    CLK: IN std_logic;
    RST: IN std_logic;
    RFD: OUT std_logic;
    DIN: IN std_logic_VECTOR(9 downto 0);
    DOUT: OUT std_logic_VECTOR(15 downto 0));
end component;

-- Configuration specification 
    for all : wrapped_DAFIR12 use entity XilinxCoreLib.C_DA_FIR_V9_0(behavioral)
        generic map(
            c_has_sout_r => 0,
            c_result_width => 16,
            c_reload_delay => 210,
            c_data_type => 0,
            c_channels => 1,
            c_filter_type => 0,
            c_response => 1,
            c_has_sout_f => 0,
            c_reg_output => 1,
            c_taps => 12,
            c_data_width => 10,
            c_enable_rlocs => 0,
            c_coeff_type => 0,
            c_has_sin_r => 0,
            c_reload_mem_type => 1,
            c_reload => 0,
            c_baat => 10,
            c_latency => 9,
            c_coeff_width => 2,
            c_optimize => 0,
            c_use_model_func => 0,
            c_zpf => 1,
            c_has_sin_f => 0,
            c_shape => 0,
            c_has_sel_o => 0,
            c_saturate => 0,
            c_mem_init_file => "DAFIR12.mif",
            c_polyphase_factor => 1,
            c_has_sel_i => 0,
            c_has_reset => 1);
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_DAFIR12
        port map (
            ND => ND,
            RDY => RDY,
            CLK => CLK,
            RST => RST,
            RFD => RFD,
            DIN => DIN,
            DOUT => DOUT);
-- synthesis translate_on

END DAFIR12_a;

 

Проблема заключается в том, что я не представляю, откуда взять описания параметров generic и как они должны изменяться в таких блоках, как пример, того же самого c_reload_delay, который должен меняться для различных разрядностей фильтра, при этом неизвестно мне как. Описания самой CoreLib я вот так сразу нигде не нашел. Может, кто сталкивался с соответствующим мануалом и может направить поиски или непосредственно дать искомый документ или ссылку на него?

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


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

Думаю, что Вам их не найти, т.к. эти параметры определяются и формируются CoreGen при создании соответсвующего экземпляра сконфигурированного IP-ядра. А CoreLib - это низкоуровневая служебная библиотека, до которой пользователям нет дела.

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


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

Думаю, что Вам их не найти, т.к. эти параметры определяются и формируются CoreGen при создании соответсвующего экземпляра сконфигурированного IP-ядра. А CoreLib - это низкоуровневая служебная библиотека, до которой пользователям нет дела.

 

Определяются и формируются-то да! Но использовать можно сразу этот код, не создавая проект в CoreGen. И все-то хорошо, и все нормально. Большинство параметров понятные по смыслу, другие же, не понятные (как получено опытным путем) в основном не меняются от проекта к проекту. Если же была бы где-то документация, как должны меняться (т.е. какие настройки применяет CoreGen) изменяемые параметры, тот же самый delay, кроме него в данном конкретном FIR-е все прозрачно...

 

А почему до нее пользователям дела нет?) Вот мне, например, очень даже есть! Например, у меня в проекте параметры некоторой системы полностью настраиваемые, соответственно, необходимо полностью настраивать в соответствии с входными дженериками в этой системе и блоки, генерируемые КорГенератором, которые имеют нормальный шаблон с нормальными настройками. Просто вот доков нет. А их надо. Не может быть, чтоб не было их.

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


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

Определяются и формируются-то да! Но использовать можно сразу этот код, не создавая проект в CoreGen. И все-то хорошо, и все нормально. Большинство параметров понятные по смыслу, другие же, не понятные (как получено опытным путем) в основном не меняются от проекта к проекту. Если же была бы где-то документация, как должны меняться (т.е. какие настройки применяет CoreGen) изменяемые параметры, тот же самый delay, кроме него в данном конкретном FIR-е все прозрачно...

Легко эти параметры меняются в vhdl-файле, который используется только при моделировании. Собственно же IP-ядро живёт в edn-ке, которую так просто поменять нельзя.

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

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


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

А почему до нее пользователям дела нет?) Вот мне, например, очень даже есть! Например, у меня в проекте параметры некоторой системы полностью настраиваемые, соответственно, необходимо полностью настраивать в соответствии с входными дженериками в этой системе и блоки, генерируемые КорГенератором, которые имеют нормальный шаблон с нормальными настройками. Просто вот доков нет. А их надо. Не может быть, чтоб не было их.

 

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

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


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

Требуется (если быть точным, было бы очень желательно) использовать вместо создания каждый раз проекта в Core Generator тех же самых КИХ-ов (FIR-filter) в случае, скажем, изменения их разрядности, просто обращение к соответствующему компоненту из Xilinx CoreLib с изменением соответствующих generic. Это возможно
Это возможно, но гораздо проще (тайным знанием поделился кто-то на этом форуме):

library IEEE;
use IEEE.std_logic_1164.all;

-- synopsys translate_off
library XilinxCoreLib;
-- synopsys translate_on

entity dsp_regs_ram is
  port(
       Clk  :  in std_logic;
       Addr :  in std_logic_vector;
       WE   :  in std_logic;
       Din  :  in std_logic_vector;
       Dout : out std_logic_vector
      );
end dsp_regs_ram;

architecture structure of dsp_regs_ram is

attribute box_type          : string;
attribute generator_default : string;

component dsp_regs_ram_core
  generic(
          C_ADDR_WIDTH            : integer := 11;
          C_DEFAULT_DATA          : string  := "eca97af001f81a864c057d76";
          C_DEPTH                 : integer := 1034;
          C_ENABLE_RLOCS          : integer := 0;
          C_FAMILY                : string  := "virtex2";
          C_HAS_DEFAULT_DATA      : integer := 1;
          C_HAS_DIN               : integer := 1;
          C_HAS_EN                : integer := 1;
          C_HAS_LIMIT_DATA_PITCH  : integer := 0;
          C_HAS_ND                : integer := 1;
          C_HAS_RDY               : integer := 1;
          C_HAS_RFD               : integer := 1;
          C_HAS_SINIT             : integer := 1;
          C_HAS_WE                : integer := 1;
          C_LIMIT_DATA_PITCH      : integer := 18;
          C_MEM_INIT_FILE         : string := "mif_file_16_1";
          C_PIPE_STAGES           : integer := 1;
          C_REG_INPUTS            : integer := 0;
          C_SINIT_VALUE           : string := "dcd461da8bac14a2d0902993";
          C_WIDTH                 : integer  := 96;
          C_WRITE_MODE            : integer := 2;
          C_YBOTTOM_ADDR          : string := "1024";
          C_YCLK_IS_RISING        : integer := 1;
          C_YEN_IS_HIGH           : integer := 1;
          C_YHIERARCHY            : string  := "hierarchy";
          C_YMAKE_BMM             : integer := 1;
          C_YPRIMITIVE_TYPE       : string  := "4kx4";
          C_YSINIT_IS_HIGH        : integer := 1;
          C_YTOP_ADDR             : string := "0";
          C_YUSE_SINGLE_PRIMITIVE : integer := 0;
          C_YWE_IS_HIGH           : integer := 1;
          C_YYDISABLE_WARNINGS    : integer := 0
         );
     port(
          sinit :  in std_logic := '0';
          clk   :  in std_logic;
          addr  :  in std_logic_vector(C_ADDR_WIDTH - 1 downto 0);
          en    :  in std_logic := '1';
          we    :  in std_logic := '0';
          din   :  in std_logic_vector(C_WIDTH - 1 downto 0) := (others => '0');
          nd    :  in std_logic := '0';
          rfd   : out std_logic;
          rdy   : out std_logic;
          dout  : out std_logic_vector(C_WIDTH - 1 downto 0)
         );
end component;

attribute box_type of dsp_regs_ram_core : component is "black_box";
attribute generator_default of dsp_regs_ram_core : component is
          "generatecore com.xilinx.ip.blkmemsp_v6_2.blkmemsp_v6_2";

-- synopsys translate_off
for all: dsp_regs_ram_core use
         entity XilinxCoreLib.blkmemsp_v6_2(behavioral);
-- synopsys translate_on

begin

      map_ram: dsp_regs_ram_core
               generic map(
                           C_ADDR_WIDTH            => Addr'length,
                           C_DEFAULT_DATA          => "0",
                           C_DEPTH                 => 2**Addr'length,
                           C_ENABLE_RLOCS          => 0,
                           C_FAMILY                => "spartan3",
                           C_HAS_DEFAULT_DATA      => 1,
                           C_HAS_DIN               => 1,
                           C_HAS_EN                => 0,
                           C_HAS_LIMIT_DATA_PITCH  => 0,
                           C_HAS_ND                => 0,
                           C_HAS_RDY               => 0,
                           C_HAS_RFD               => 0,
                           C_HAS_SINIT             => 0,
                           C_HAS_WE                => 1,
                           C_LIMIT_DATA_PITCH      => 18,
                           C_MEM_INIT_FILE         => "BlankString",
                           C_PIPE_STAGES           => 0,
                           C_REG_INPUTS            => 0,
                           C_SINIT_VALUE           => "0",
                           C_WIDTH                 => Din'length,
                           C_WRITE_MODE            => 2,
                           C_YBOTTOM_ADDR          => "0",
                           C_YCLK_IS_RISING        => 1,
                           C_YEN_IS_HIGH           => 1,
                           C_YHIERARCHY            => "hierarchy1",
                           C_YMAKE_BMM             => 0,
                           C_YPRIMITIVE_TYPE       => "16kx1",
                           C_YSINIT_IS_HIGH        => 1,
                           C_YTOP_ADDR             => "1024",
                           C_YUSE_SINGLE_PRIMITIVE => 0,
                           C_YWE_IS_HIGH           => 1,
                           C_YYDISABLE_WARNINGS    => 1
                          )
               port map(
                        addr => Addr,
                        clk  => Clk,
                        we   => WE,
                        din  => Din,
                        dout => Dout
                       );

end structure;

XST сам вызовет CoreGen, чтобы сгенерировать корку с указанными значениями в generic map.

 

Проблема заключается в том, что я не представляю, откуда взять описания параметров generic и как они должны изменяться в таких блоках, как пример, того же самого c_reload_delay, который должен меняться для различных разрядностей фильтра, при этом неизвестно мне как. Описания самой CoreLib я вот так сразу нигде не нашел. Может, кто сталкивался с соответствующим мануалом и может направить поиски или непосредственно дать искомый документ или ссылку на него?
На каждую корку есть datasheet. Ищите *.pdf в дереве $XILINX/coregen/ip/xilinx.

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


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

1. Огромное спасибо за решение задачи, как заставить ISE сгенерировать автоматически нетлист по vhdl-шаблону из КорГена с измененнными параметрами! Проблема действительно казалась неразрешимой.

2. Насчет документации согласиться, к сожалению, не могу. Даташиты где искать, я знаю) Но в них не описаны параметры vhdl-шаблонов. Если я не прав, пожалуйста, ткните меня носом, например, в формулу для определения c_reload_delay для Distributed Arithmetic FIR ;)

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


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

1. Огромное спасибо за решение задачи, как заставить ISE сгенерировать автоматически нетлист по vhdl-шаблону из КорГена с измененнными параметрами! Проблема действительно казалась неразрешимой.
Спасибо не мне, а denisys ( http://electronix.ru/forum/index.php?showtopic=25860 ).

 

2. Насчет документации согласиться, к сожалению, не могу. Даташиты где искать, я знаю) Но в них не описаны параметры vhdl-шаблонов. Если я не прав, пожалуйста, ткните меня носом, например, в формулу для определения c_reload_delay для Distributed Arithmetic FIR ;)
Увы...

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


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

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

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

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

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

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

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

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

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

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