logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VHDL: Jak rozdzielić 8-bitowy sygnał na dwa 4-bitowe dla dekoderów?

rycho_56 24 Kwi 2007 15:02 2082 4
REKLAMA
  • #1 3816899
    rycho_56
    Poziom 10  
    Posty: 35
    Ocena: 1
    witam ,
    proszę o pomoc w następującym problemie

    chciałbym rozdzielić sygnał ( g) generatora 8 bitowego zdeklarowanego jako out (1 to 8) i rozdzielić go na dwa sygnały po 4 bity wejściowe z przyporządkowaniem
    pierwsze 4 jako wejście dla jednego (a) dekodera (3 downto 0) a drugie 4 bity
    generatora 5-8 do drugiego (b) dekodera (7 downto 4).

    Opis - jest to generator liczb losowych w krórym założyłem, że generowany jest ciąg 8 bitowy (na bazie LSFR). Sygnał wjjściowy ten 8 bitowy chciałbym rozdzielić na dwa dekodery (4bit na sterowanie wyświetlaczem 7-segmentowym).
  • REKLAMA
  • #2 3817014
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    rycho_56 napisał:
    witam ,
    proszę o pomoc w następującym problemie

    chciałbym rozdzielić sygnał ( g) generatora 8 bitowego zdeklarowanego jako out (1 to 8) i rozdzielić go na dwa sygnały po 4 bity wejściowe z przyporządkowaniem
    pierwsze 4 jako wejście dla jednego (a) dekodera (3 downto 0) a drugie 4 bity
    generatora 5-8 do drugiego (b) dekodera (7 downto 4).

    Opis - jest to generator liczb losowych w krórym założyłem, że generowany jest ciąg 8 bitowy (na bazie LSFR). Sygnał wjjściowy ten 8 bitowy chciałbym rozdzielić na dwa dekodery (4bit na sterowanie wyświetlaczem 7-segmentowym).



    jesli dobrze zrozumialem wyjscie jednego modulu chcesz podlaczyc do 2 innych po 4 bity dla kazdego, tak?


    jakbys mial oba zadeklarowane downto - to no problem rozdzielasz po 3 dwnto 0 i 7 downto 4 a ze masz jeden 1 to 8 to pozamiatane albo petla generate lub recznie kazdy z osobna przypisujesz .
    Wklej ten kod topa to Ci pomoge.
  • REKLAMA
  • #3 3819805
    rycho_56
    Poziom 10  
    Posty: 35
    Ocena: 1
    witam,
    dzięki za zainteresowanie

    ------------
    -- generator -
    entity gener is
    Port ( clk: in std_logic;
    e: out std_logic_vector(1 to 8));
    attribute loc: string;
    attribute loc of clk: signal is "P5";
    attribute loc of e: signal is "P9,P11,P12,P13,P14,P18,P19,P20";
    end gener;
    architecture arch1 of gener is
    signal sig_e: std_logic_vector(1 to 8):= "00000000";
    begin
    process(clk)
    begin
    if rising_edge(clk) then
    if sig_e = "00000000" then
    sig_e(1) <= '1';
    else
    sig_e(1) <= sig_e(8) xor sig_e(4) xor sig_e(3) xor sig_e(2);
    end if;
    -- przesunięcie bitów w prawo i jedną wartość.
    sig_e(2 to 8)<= sig_e(1 to 7);
    end if;
    end process;
    e <= sig_e;
    end arch1;

    dekoder 1( drugi dekoder jest tak samo zdeklarowany, zmienione są oczywiście in(c),out(d)).
    ntity bcd2led1 is
    Port ( a : in std_logic_vector(3 downto 0);
    b : out std_logic_vector(7 downto 0));
    end bcd2led1;

    architecture bcd2led1_arch of bcd2led1 is

    begin
    b<= "11101110" when a="0000" else -- 0
    "00100100" when a="0001" else -- 1
    "10100100" when a="0010" else -- 2
    "10110110" when a="0011" else -- 3
    "01110100" when a="0100" else -- 4
    "11011010" when a="0101" else -- 5
    "11000000" when a="0110" else -- 6
    "10100100" when a="0111" else -- 7
    "11111110" when a="1000" else -- 8
    "11110110" when a="1001" else -- 9
    "00000001";
    end bcd2led1_arch;
  • REKLAMA
  • #4 3822725
    griva
    Poziom 17  
    Posty: 203
    Pomógł: 12
    Ocena: 1
    Robisz drugi plik w ktorym bedziesz mial instancje tych 2.

    entity top is
    port (

    clk: in std_logic;

    hex1 : out std_logic_vector(7 downto 0);
    hex2 : out std_logic_vector(7 downto 0)
    );
    end;

    architecture wrapper of top is
    --deklaracje komponentow
    component gener is
    port (
    clk: in std_logic;
    e: out std_logic_vector(1 to 7);
    end component;

    component bcd2led1 is
    Port ( a : in std_logic_vector(3 downto 0);
    b : out std_logic_vector(7 downto 0));
    end component;

    signal e_int : std_logic_vector(1 to 7);
    signal a_int_1 : std_logic_vector(3 downto 0);
    signal a_int_2 : std_logic_vector(3 downto 0);

    begin

    --instancje modulow
    U_1 : gener port map (
    clk=>clk,
    e=>e_int
    );

    U_2 : bcd2led1 port map(
    a=> a_int_1,
    b => hex1,
    );

    U_3 : bcd2led1 port map(
    a=> a_int_2,
    b => hex2,
    );


    -- przypisania sygnalow - mozliwe ze cos pomeiszalem z kolejnoscia

    a_int_1(3) <= e_int(4);
    a_int_1(2) <= e_int(5);
    a_int_1(1) <= e_int(6);
    a_int_1(0) <= e_int(7);

    a_int_2(3) <= e_int(0);
    a_int_2(2) <= e_int(1);
    a_int_2(1) <= e_int(2);
    a_int_2(0) <= e_int(3);


    end;


    generalnie cos w tym stylu, lepiej jest trzymac sie jedej konwencji w calym projekcie czyli albo downto albo to.
  • #5 3823036
    rycho_56
    Poziom 10  
    Posty: 35
    Ocena: 1
    dzięki za pomoc - trochę się rozjaśnia !!
REKLAMA