eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaVHDL - RAM obsługujący read-during-write
Ilość wypowiedzi w tym wątku: 4

  • 1. Data: 2014-07-08 21:07:54
    Temat: VHDL - RAM obsługujący read-during-write
    Od: Jakub Rakus <s...@o...pl>

    Przeglądając tutoriale na temat sposobów pisania kodu HDL tak, żeby
    syntetyzator maksymalnie wykorzystał specjalizowane bloki FPGA natknąłem
    się na prosty przykład pamięci RAM obsługującej operacje typu read
    during write:

    ARCHITECTURE rtl OF single_clock_ram IS
    TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(2 DOWNTO 0);
    SIGNAL ram_block: MEM;
    BEGIN
    PROCESS (clock)
    BEGIN
    IF (clock'event AND clock = '1') THEN
    IF (we = '1') THEN
    ram_block(write_address) <= data;
    END IF;
    q <= ram_block(read_address);
    -- VHDL semantics imply that q doesn't get data
    -- in this clock cycle
    END IF; END PROCESS; END rtl;

    Nie do końca rozumiem dlaczego niby to:
    q <= ram_block(read_address);
    ma się wykonać dopiero przy następnym wejściu w proces? Że niby jak jest
    spełniony IF we='1' to wszystko poza nim się nie wykona?

    --
    Pozdrawiam
    Jakub Rakus


  • 2. Data: 2014-07-09 00:28:56
    Temat: Re: VHDL - RAM obsługujący read-during-write
    Od: Adam Górski <gorskiamalpa@wpkropkapl>

    W dniu 2014-07-08 21:07, Jakub Rakus pisze:
    > Przeglądając tutoriale na temat sposobów pisania kodu HDL tak, żeby
    > syntetyzator maksymalnie wykorzystał specjalizowane bloki FPGA natknąłem
    > się na prosty przykład pamięci RAM obsługującej operacje typu read
    > during write:
    >
    > ARCHITECTURE rtl OF single_clock_ram IS
    > TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(2 DOWNTO 0);
    > SIGNAL ram_block: MEM;
    > BEGIN
    > PROCESS (clock)
    > BEGIN
    > IF (clock'event AND clock = '1') THEN
    > IF (we = '1') THEN
    > ram_block(write_address) <= data;
    > END IF;
    > q <= ram_block(read_address);
    > -- VHDL semantics imply that q doesn't get data
    > -- in this clock cycle
    > END IF; END PROCESS; END rtl;
    >
    > Nie do końca rozumiem dlaczego niby to:
    > q <= ram_block(read_address);
    > ma się wykonać dopiero przy następnym wejściu w proces? Że niby jak jest
    > spełniony IF we='1' to wszystko poza nim się nie wykona?
    >


    Poczytaj o różnicach pomiędzy signal i variable.

    Wprost mówiąc :

    Jeżeli sygnały ( signal ) wewnątrz procesu mają przypisaną nową
    "wartość" to jest ona "widziana" dopiero po restarcie procesu.

    Jeżeli zmienne ( variable ) wewnątrz procesu mają przypisaną nową
    "wartość" to jest ona "widziana" już w następnej "instrukcji" sekwencyjnej.

    Tak proces "wykonuje" się sekwencyjnie ( zaraz mnie ktoś zamorduje ).

    Pzdr

    Adam

    ---
    Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ
    ochrona avast! Antivirus jest aktywna.
    http://www.avast.com


  • 3. Data: 2014-07-09 00:39:34
    Temat: Re: VHDL - RAM obsługujący read-during-write
    Od: Adam Górski <gorskiamalpa@wpkropkapl>

    W dniu 2014-07-08 21:07, Jakub Rakus pisze:
    > Przeglądając tutoriale na temat sposobów pisania kodu HDL tak, żeby
    > syntetyzator maksymalnie wykorzystał specjalizowane bloki FPGA natknąłem
    > się na prosty przykład pamięci RAM obsługującej operacje typu read
    > during write:
    >
    > ARCHITECTURE rtl OF single_clock_ram IS
    > TYPE MEM IS ARRAY(0 TO 31) OF STD_LOGIC_VECTOR(2 DOWNTO 0);
    > SIGNAL ram_block: MEM;
    > BEGIN
    > PROCESS (clock)
    > BEGIN
    > IF (clock'event AND clock = '1') THEN
    > IF (we = '1') THEN
    > ram_block(write_address) <= data;
    > END IF;
    > q <= ram_block(read_address);
    > -- VHDL semantics imply that q doesn't get data
    > -- in this clock cycle
    > END IF; END PROCESS; END rtl;
    >
    > Nie do końca rozumiem dlaczego niby to:
    > q <= ram_block(read_address);
    > ma się wykonać dopiero przy następnym wejściu w proces? Że niby jak jest
    > spełniony IF we='1' to wszystko poza nim się nie wykona?
    >

    Zapomniałem odpowiedzieć na twoje pytanie.
    Wykona się. Powiedziałbym że się zdarzy.
    Tyle że q będzie miała starą wartość.

    Dla uproszczenia wyobraź sobie że mamy tylko jedną komórkę tej pamięci.
    Jedno słowo 32 bitowe.
    Ram_block przyjmie nową wartość kiedy we ='1' ale PO zdarzeniu , którym
    jest narastające zbocze zegara.

    Kiedy występuje zbocze zegara ram_block ma ciągle starą wartość.
    I właśnie ta stara wartość zostanie zatrzaśnięta w q.

    Podobno dla programisty nie ma znaczenia w czym programuje, ale tu jest
    wyjątkowo pod górę bo są konstrukcje które nie mają sensy z punktu
    widzenia programisty.

    Adam

    ---
    Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania, ponieważ
    ochrona avast! Antivirus jest aktywna.
    http://www.avast.com


  • 4. Data: 2014-07-09 23:29:00
    Temat: Re: VHDL - RAM obsługujący read-during-write
    Od: Jakub Rakus <s...@o...pl>

    On 09.07.2014 00:39, Adam Górski wrote:

    > Zapomniałem odpowiedzieć na twoje pytanie.
    > Wykona się. Powiedziałbym że się zdarzy.
    > Tyle że q będzie miała starą wartość.
    >
    > Dla uproszczenia wyobraź sobie że mamy tylko jedną komórkę tej pamięci.
    > Jedno słowo 32 bitowe.
    > Ram_block przyjmie nową wartość kiedy we ='1' ale PO zdarzeniu , którym
    > jest narastające zbocze zegara.
    >
    > Kiedy występuje zbocze zegara ram_block ma ciągle starą wartość.
    > I właśnie ta stara wartość zostanie zatrzaśnięta w q.
    >
    > Podobno dla programisty nie ma znaczenia w czym programuje, ale tu jest
    > wyjątkowo pod górę bo są konstrukcje które nie mają sensy z punktu
    > widzenia programisty.
    >
    > Adam
    >
    > ---
    > Ta wiadomość e-mail jest wolna od wirusów i złośliwego oprogramowania,
    > ponieważ ochrona avast! Antivirus jest aktywna.
    > http://www.avast.com
    >

    Dzięki za proste i zrozumiałe wytłumaczenie problemu, teraz już kumam!

    --
    Pozdrawiam
    Jakub Rakus

strony : [ 1 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: