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

Как описать ограничения на выходной интерфейс SelectMap?

Доброго времени суток!

Есть ПЛИС, которая программирует другие ПЛИС (режим - Slave SelectMap16). Количество программируемых ПЛИС - 4. Шина данных общая, линия CCLK у каждой ПЛИС своя.

Я реализовал способ "Non-Continuous SelectMAP Data Loading with Controlled CCLK".

image.png.695590da4a9b945c9d358d5088847fdc.png

Работает, но хотелось бы частоту поднять. Подскажите, пожалуйста, как описать временные соотношения между CCLK и D. Какой тактовый сигнал выбрать?

Смущают нюансы:

* должны выполняться соотношения между CCLK1 и D, CCLK2 и D, CCLK3 и D, CCLK4 и D;

* CCLK1 и т.д. - выход триггера, подключенный к выходному порту.

 

Может быть пример подходящий найдется?

 

Spoiler
    main_process : process(clk)
    begin
        if rising_edge(clk) then
            if (state = st_select_operation) and (fifo_valid = '1') then 
                if    fifo_dout_addr = SELECT_DEVICE_ADDRESS then                    
                    dev_number <= fifo_dout_data(1 downto 0);
                    state      <= st_select_operation;                                            
                elsif fifo_dout_addr = PROGRAM_ADDRESS then
                    program_b (to_integer(unsigned(dev_number))) <= fifo_dout_data(0);
                    csi_b     (to_integer(unsigned(dev_number))) <= fifo_dout_data(1);
                    rdwr_b                                       <= fifo_dout_data(2);
                    state       <= st_select_operation;
                elsif fifo_dout_addr = CONFIG_DATA_ADDRESS then                    
                    do          <= fifo_dout_data(15 downto 0);
                    cclk(to_integer(unsigned(dev_number))) <= '0';                                               
                    second_word <= fifo_dout_data(31 downto 16);                      
                    state       <= st_load_first_word_cclk1;                   
                end if;
            
            elsif state = st_load_first_word_cclk1 then
                cclk(to_integer(unsigned(dev_number))) <= '1';                   
                state <= st_load_second_word_cclk0;
                                   
            elsif state = st_load_second_word_cclk0 then 
               do         <= second_word;
               cclk(to_integer(unsigned(dev_number))) <= '0';
               state      <= st_load_second_word_cclk1;
               
            elsif state = st_load_second_word_cclk1 then
               cclk(to_integer(unsigned(dev_number))) <= '1';              
               state      <= st_select_operation;                           
            end if;             
        end if;
    end process main_process;

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


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

Используйте клок, которым защелкиваете триггеры CCLK* и D*. Пусть вас не смущает, что CCLK* - это тактовый сигнал для приемной стороны. Для прошивающей ПЛИС - это сигнал данных.

Относительно клока определите set_output_delay для всех сигналов CCLK* и D*. Вот подсказка https://www.xilinx.com/video/hardware/setting-output-delay.html

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


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

On 5/17/2024 at 2:59 PM, pavlovconst said:

Используйте клок, которым защелкиваете триггеры CCLK* и D*. Пусть вас не смущает, что CCLK* - это тактовый сигнал для приемной стороны. Для прошивающей ПЛИС - это сигнал данных.

Относительно клока определите set_output_delay для всех сигналов CCLK* и D*. Вот подсказка https://www.xilinx.com/video/hardware/setting-output-delay.html

Сделал так:

set output_ports {fpga_a[*] fpga_d[*] fpga*_cclk}
set_output_delay -clock clk_p -2.5 [get_ports $output_ports]
set_property IOB TRUE [get_ports $output_ports]

Правильно сделал? 2.5 - число, при котором слак меньше всего получается. Это для clk_p (клок, которым защелкиваются триггеры CCLK* и D*) 230 МГц.

image.thumb.png.4952b882cd29105393ff401fe1f8c5f4.png

Кажется, не сойдутся тайминги, и требования избыточные. CCLK 115 МГц в данном случае будет.

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


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

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

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

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

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

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

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

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

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

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