FPGA начального уровня :: Часть 5.1 :: Подключение портов и размещение проекта на кристалле

แชร์
ฝัง
  • เผยแพร่เมื่อ 29 ต.ค. 2024

ความคิดเห็น • 21

  • @EanutiyDolbayyyb
    @EanutiyDolbayyyb ปีที่แล้ว

    Молодца, без флуда и по делу.

  • @alexandr8530
    @alexandr8530 4 ปีที่แล้ว +1

    Спасибо огромное! очень понравилось!

  • @ШурикШурикович-ц5л
    @ШурикШурикович-ц5л 3 ปีที่แล้ว

    Отличное видео, всё очень понятно и доступно, спасибо!

    • @FPGASystems
      @FPGASystems  3 ปีที่แล้ว

      надеюсь весь курс будет тоже понятным

  • @nikolaykostishen6402
    @nikolaykostishen6402 4 ปีที่แล้ว

    Thanks!

  • @igorspiridonov6539
    @igorspiridonov6539 5 ปีที่แล้ว +1

    Отличные видео! Планируется продолжение или нет?

    • @FPGASystems
      @FPGASystems  5 ปีที่แล้ว

      Да, курс записан полностью.

  • @enurseitov
    @enurseitov 4 ปีที่แล้ว

    Остался такой вопрос: в каких сценариях может понадобиться показанное ручное размещение блоков на кристалле с помощью pblockов? Не будет ли автоматическая имплементация всегда эффективнее по таймингам?

    • @FPGASystems
      @FPGASystems  4 ปีที่แล้ว

      Прив. Утверждение "автоматическая имплементация всегда эффективнее по таймингам" не всегда верно. В некоторых случаях нам нужно "помочь" среде, указав границы допустимой разводки для блоков. К тому же, в скоростных проектах может применяться техника, при которых мы сами размещаем компоненты и запрещаем их перемещать.
      Сейчас у меня проект на спартан-6 и если не ограничивать область размещения и трассировки, элементы буду разбросаны по кристаллу "абы как", что соответственно, приводит к проблемам. Но как только ограничиваем область pblock'ом, все сразу становится лучше: и тайминги и проект.
      Конечно, инструменты трассировки совершенствуются, но иногда - лучшее враг хорошего

  • @alexey2847
    @alexey2847 4 ปีที่แล้ว

    Отличное видео, спасибо! У меня такая проблема, я использую mux7 в линии задержки, и после синтеза я вижу, что они на своих местах как и должно быть. Но после имплементации половина mux7 заменяться на lut, причём в шахматном порядке, то есть через одну пару.
    Вот мой код для delay line:
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    library work;
    use work.parameters.all;
    entity delay_line is
    port (
    ipulse : in std_logic;
    ichallenge : in std_logic_vector (C_LENGTH - 1 downto 0);
    oout_1 : out std_logic;
    oout_2 : out std_logic
    );
    end delay_line;
    architecture struct of delay_line is
    signal net: std_logic_vector(2*C_LENGTH + 1 downto 0) := (others => '0');

    attribute dont_touch: string;
    attribute dont_touch of net: signal is "true";
    begin
    -- net(0) net(2*i)
    );

    inst_mux_2: entity work.mux(rtl)
    port map(
    ia => net(2*i - 1),
    ib => net(2*i - 2),
    isel => ichallenge(i - 1),
    oout => net(2*i + 1)
    );
    end generate;

    oout_1

    • @FPGASystems
      @FPGASystems  4 ปีที่แล้ว

      тут надо немного пошаманить с атрибутами кип и донт тач для архитектур модулей

    • @alexey2847
      @alexey2847 4 ปีที่แล้ว

      @@FPGASystems Покопался в доках, проблема была в retargeting opimization во время implementation. Пытался победить её с помощью донт_тач, не получилось, по всей видимости оптимизация происходила сразу в библиотечном блоке MUXF7, а до него добрать не получилось. В итоге пришлась полностью отключить Logic Optimization, и всё случилось!

  • @haziqishak612
    @haziqishak612 3 ปีที่แล้ว

    Greetings from Malaysia, I've emailed you a question about how in your synthesized design, you get the muxf7 while i get only the LUT. Can you assist me on this ? I've followed all the steps taken. But i guess there is something that i've been doing wrong. Maybe because i dont understand russian. im sorry kinda need your help here. thank you.

    • @FPGASystems
      @FPGASystems  3 ปีที่แล้ว

      hi, muxf7 was as a home work )
      you can replace behavioral description of mux, by hardware component muxf7. Find his description here www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug953-vivado-7series-libraries.pdf pp460-461

    • @haziqishak612
      @haziqishak612 3 ปีที่แล้ว

      @@FPGASystems

    • @haziqishak612
      @haziqishak612 3 ปีที่แล้ว

      @@FPGASystems Hi Michael, what do you mean by replace behavioral description of mux, does I need to change the coding in the mux ? With the muxf7 coding ?

    • @FPGASystems
      @FPGASystems  3 ปีที่แล้ว

      @@haziqishak612 yes, u r correct.

  • @РусланХайрулин-з6я
    @РусланХайрулин-з6я 4 ปีที่แล้ว

    А есть это все в книжном варианте?

    • @FPGASystems
      @FPGASystems  4 ปีที่แล้ว

      В книжном варианте этого нет

  • @qrwstrq7882
    @qrwstrq7882 ปีที่แล้ว

    Тоже столкнулся с проблемой чередования lut3 и mux7 в шахматном порядке при:
    (* DONT_TOUCH = "yes" *)
    module mux()
    ...
    Вылечилось костылем в виде еще одного (*dont_touch = "yes"*) MUXF7 MUXF7_inst ( ...
    прямо перед модулем MUXF7
    `timescale 1ns / 1ps
    `include "parameters.vh"
    (* DONT_TOUCH = "yes" *)
    module mux(
    input ia,
    input ib,
    input isel,
    output oout
    );


    generate
    if (MUX_TYPE == "LUT3") begin: LUT3_generic
    assign oout = isel ? ia : ib;
    end
    endgenerate

    generate
    if (MUX_TYPE == "MUXF7") begin: MUXF7_generic
    (*dont_touch = "yes"*) MUXF7 MUXF7_inst (
    .O(oout), // Output of MUX to general routing
    .I0(ia), // Input (tie to LUT6 O6 pin)
    .I1(ib), // Input (tie to LUT6 O6 pin)
    .S(isel) // Input select to MUX
    );
    end
    endgenerate

    endmodule