eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaJeszcze raz VHDL - problem ze zwięzłym zapisemJeszcze raz VHDL - problem ze zwięzłym zapisem
  • Data: 2015-05-24 02:37:07
    Temat: Jeszcze raz VHDL - problem ze zwięzłym zapisem
    Od: s...@g...com szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Problem jest w zasadzie rozwinięciem poprzedniego wątkaDo rzeczy, układ ma obliczać
    coś takiego: C=|R(0)+...+R(15)-R(16)-....-R(31)|, gdzie C,R(i)-liczby 11 bitowe bez
    znaku. R(i) są to kolejne sekcje rejestru posuwnego, w którym na pierwszą sekcję jest
    podawana 11 bitowa liczba "A" (bez znaku). Układ działa poprawnie zarówno na
    symulatorze jak i na żywym organiźmie. Wszystkie operacje +/- zrobiłem krok po kroku.
    A co gdybym miał pierdyljon sekcji rejestru posuwnego?
    Jak to zwięźlej zapisać? Kod wygląda tak:


    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.NUMERIC_STD.ALL;
    library UNISIM;
    use UNISIM.VComponents.all;

    entity amod is

    Port ( A : in STD_LOGIC_VECTOR (10 downto 0);
    CLK : in STD_LOGIC;
    C : out STD_LOGIC_VECTOR (10 downto 0));
    end amod;

    architecture Behavioral of amod is
    type Shift_Register_Type is array (31 downto 0) of std_logic_vector(10 downto 0);
    signal Cs:std_logic_vector(14 downto 0):="000000000000000";
    signal Rejestr:Shift_Register_Type;
    begin



    process(CLK)
    begin
    if rising_edge(CLK) then
    Rejestr<=Rejestr(30 downto 0)&A;
    Cs<=std_logic_vector(to_unsigned(abs(to_integer(sign
    ed('0'&Rejestr(0)))+
    to_integer(signed('0'&Rejestr(1)))+
    to_integer(signed('0'&Rejestr(2)))+
    to_integer(signed('0'&Rejestr(3)))+
    to_integer(signed('0'&Rejestr(4)))+
    to_integer(signed('0'&Rejestr(5)))+
    to_integer(signed('0'&Rejestr(6)))+
    to_integer(signed('0'&Rejestr(7)))+
    to_integer(signed('0'&Rejestr(8)))+
    to_integer(signed('0'&Rejestr(9)))+
    to_integer(signed('0'&Rejestr(10)))+
    to_integer(signed('0'&Rejestr(11)))+
    to_integer(signed('0'&Rejestr(12)))+
    to_integer(signed('0'&Rejestr(13)))+
    to_integer(signed('0'&Rejestr(14)))+
    to_integer(signed('0'&Rejestr(15)))-
    to_integer(signed('0'&Rejestr(16)))-
    to_integer(signed('0'&Rejestr(17)))-
    to_integer(signed('0'&Rejestr(18)))-
    to_integer(signed('0'&Rejestr(19)))-
    to_integer(signed('0'&Rejestr(20)))-
    to_integer(signed('0'&Rejestr(21)))-
    to_integer(signed('0'&Rejestr(22)))-
    to_integer(signed('0'&Rejestr(23)))-
    to_integer(signed('0'&Rejestr(24)))-
    to_integer(signed('0'&Rejestr(25)))-
    to_integer(signed('0'&Rejestr(26)))-
    to_integer(signed('0'&Rejestr(27)))-
    to_integer(signed('0'&Rejestr(28)))-
    to_integer(signed('0'&Rejestr(29)))-
    to_integer(signed('0'&Rejestr(30)))-
    to_integer(signed('0'&Rejestr(31)))),15));

    end if;
    end process;
    C<=Cs(14 downto 4);
    end Behavioral;

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: