Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ISE - Post - Route simulation

03 Mar 2009 20:13 1613 6
  • Poziom 15  
    Witam
    Mam problem z przeprowadzeniem powyższej symulacji. Chcę sobie stworzyć prosty oscylator w VHDL i dostałem od nauczyciela informację, że jedyną metodą jest zainstancjowanie LUTów. Więc wstawiłem w kodzie 3 instancje LUT które po zamknięciu pętli sprzężęnia tworzą oscylator. Synteza przechodzi poprawnie - ISE tworzy schemat na którym widać luty a wewnątrz nich inwertery.
    Dostałem informację, że wybierając opcję "Post-Route simulation" w oknie sources ISE automatycznie dodaje do układu opóźnienia które są gdzieś tam zamodelowane , co w efekcie powinno pozwolić na zaobserwowanie drgań na wyjściach LUTów. Jednak w praktyce to nie działa tak. Czy ktoś przeprowadzał może wczśniej takie symulacje w środowisku ISE ?
    Wklejam kod projektu gdyby ktoś chciał samemu przetestować:
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.STD_LOGIC_ARITH.ALL;
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    Library UNISIM;
    use UNISIM.vcomponents.all;

    ---- Uncomment the following library declaration if instantiating
    ---- any Xilinx primitives in this code.
    --library UNISIM;
    --use UNISIM.VComponents.all;

    entity DCO is
    Port (
    OUTA : out STD_LOGIC;
    OUTB : out STD_LOGIC;
    OUTC : out STD_LOGIC);
    end DCO;

    architecture Behavioral of DCO is
    signal a,b,c:std_logic;
    begin
    -- LUT1: 1-input Look-Up Table with general output
    -- Xilinx HDL Libraries Guide, version 10.1.2
    LUT1_inst : LUT1
    generic map (INIT => X"1")
    port map (
    O => b, -- LUT general output
    I0 => a -- LUT input

    );
    -- End of LUT1_inst instantiation
    LUT1_inst1 : LUT1
    generic map (INIT => X"1")
    port map (
    O => c, -- LUT general output
    I0 => b -- LUT input

    );
    -- End of LUT1_inst instantiation
    LUT1_inst2 : LUT1
    generic map (INIT => X"1")
    port map (
    O => a, -- LUT general output
    I0 => c -- LUT input

    );
    -- End of LUT1_inst instantiation
    OUTA<=a;
    OUTB<=b;
    OUTC<=c;


    end Behavioral;

    Dodatkowo kiedy uruchamiam polecenie Simulate Post-Place&Route model wyskakuje mi taki error:
    ERROR:Pack:198 - NCD was not produced. All logic was removed from design. This
    is usually due to having no input or output PAD connections in the design and
    no nets or symbols marked as 'SAVE'. You can either add PADs or 'SAVE'
    attributes to the design, or run 'map -u' to disable logic trimming in the
    mapper.

    Co zrobić?

    UPDATE:

    Dodajac opcje"-u" w " map properties " udało mi się wyeliminować powyższy błąd, projekt się implementuje, jednak po uruchomieniu symulacji widzę "x" w oknie sygnału. Co zrobić ?
  • Poziom 12  
    Witam,

    Wykonywałem taką symulację.

    Pokaż test-bencha.

    Pozdrawiam
    Łukasz
  • Poziom 18  
    Lukee napisał:
    Witam,

    Wykonywałem taką symulację.

    Pokaż test-bencha.

    Nie zeby sie czepial, ale to ma byc generator, wiec chyba nie trzeba go "pobudzac".

    Jesli sa 'X' to z tego powodu ze w chwili t=0 wszystkie sygnaly otrzymuja wartosc 'U', a negacja 'U' to 'X', podobnie jak negacja 'X' to 'X'. Zapewne generator jako taki dziala generujac na przemian 'X' i 'X' zanegowane.

    Sugerowalbym wlasny model LUT1 przypisujacy na wyjscie np. '0' gdy na wejsciu jest 'U' badz 'X'.
  • Poziom 15  
    Witam. Dzisiaj na uczelni wraz z pomocą udało mi się osiągnąć cel. Narazie nie testowałem tego w domu na wersji 10.1 ale na uczelni na wersji 8.1 symulacja pokazała generację drgań. To co zmieniłem w stosunku do oryginału to zamiast łączyć bezpośrednio wyjście 3ciego LUTa z wejściem pierwszego wstawiłem bramkę AND na wejściu której mam pewien sygnał strobujący oraz wyjście trzeciego LUTA a wyjście z AND podłączam na wejście LUTA1. Po drugie wstawiłem stany początkowe poszczególnych sygnałów , A=0, B=1 no i zaczeło dzisałać. Obserwuję generację drgań z okresem około 2,5 ns. Czy ktoś może powiedzieć czy takie coś jest realne ?
  • Poziom 15  
    Ja robiłem generatory pierścieniowe opisane w Verilogu... nie trzeba wywoływać instancji LUTów, żeby to zrobić. W takim generatorku można (ale nie jest to konieczne) wstawić bramkę AND, która będzie go startowała (tym sygnałem sterujesz w testbenchu). Dzięki temu nie będzie stanu nieustalonego.
  • Poziom 12  
    dokladnie tylko nie wiem czy ustawiales w verilogu atrybut keep ?
  • Poziom 15  
    Tak, tworząc opóźnienie z kilku elementów (inwerterów, latchów) stosuję atrybut keep, ponieważ syntezer optymalizuje je do jednego inwertera (przy nieparzystej liczbie elementów), lub do przewodu (przy parzystej).