subiecte: i. - cs.ucv.rolemeni/vhdl_probleme/exemplu_2017.pdf · subiecte: i. folosind numai...

3
Subiecte: I. Folosind numai declaraţii concurente, să se scrie codul VHDL pentru un multipol logic care primeşte la intrare vector de 4 biţi. Ieșirea multipolului este ‚1’ când valoarea vectorului de intrare este alternativă. O valoare alternativă este acea valoare biţii consecutivi au valori diferite, adică b i+1 b i . De exemplu, daca intrarea este b 3 b 2 b 1 b 0 =„1010”, ieșirea este ‚1’ deoarece b 1 b 0 , b 2 b 1 şi b 3 b 2 . Dacă intrarea este „0110” ieșirea este ‚0’ deoarece b 2 = b 1 . 3 puncte II. Să se scrie codul VHDL pentru un multipol logic primeşte la intrare un vector de n biţi, V(n-1:0), şi generează la ieşire la ieşire ‚1’ logic când intrarea are o valoare alternativă. Pentru definiția valorii alternative vezi problema I. Parametru n se specifică cu Generic. 3 puncte III. Să se scrie codul VHDL pentru un numărător Johnson pe n biţi Specificaţiile numărătorului sunt: Numărătorul se va implementa ca FSM MEDVEDEV n se specifică prin intermediul unei declarații Generic. CLK - intrare de ceas; RES - reset sincron. Resetul va forţa starea 0..00000. Q(n-1:0) - vectorul de ieşire. Exemplu pentru n=3: 000 001 011 111 110 100 ---| ____________________________________| 3 puncte.

Upload: vanthu

Post on 07-Feb-2018

230 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Subiecte: I. - cs.ucv.rolemeni/VHDL_Probleme/exemplu_2017.pdf · Subiecte: I. Folosind numai declara ţii concurente , s ă se scrie codul VHDL pentru un multipol logic care prime

Subiecte:

I.

Folosind numai declaraţii concurente, să se scrie codul VHDL pentru un multipol logic care primeşte la intrare vector de 4 biţi. Ieșirea multipolului este ‚1’ când valoarea vectorului de intrare este alternativă. O valoare alternativă este acea valoare biţii consecutivi au valori diferite, adică bi+1 ≠ bi.

De exemplu, daca intrarea este b3b2b1b0=„1010”, ieșirea este ‚1’ deoarece b1 ≠ b0, b2 ≠ b1 şi b3 ≠ b2. Dacă intrarea este „0110” ieșirea este ‚0’ deoarece b2 = b1. 3 puncte

II.

Să se scrie codul VHDL pentru un multipol logic primeşte la intrare un vector de n biţi, V(n-1:0), şi generează la ieşire la ieşire ‚1’ logic când intrarea are o valoare alternativă. Pentru definiția valorii alternative vezi problema I. Parametru n se specifică cu Generic.

3 puncte

III. Să se scrie codul VHDL pentru un numărător Johnson pe n biţi Specificaţiile numărătorului sunt:

• Numărătorul se va implementa ca FSM MEDVEDEV

• n se specifică prin intermediul unei declarații Generic.

• CLK - intrare de ceas;

• RES - reset sincron. Resetul va forţa starea 0..00000.

• Q(n-1:0) - vectorul de ieşire.

Exemplu pentru n=3: 000 → 001 → 011 → 111 → 110 → 100 ---| ↑____________________________________| 3 puncte.

Page 2: Subiecte: I. - cs.ucv.rolemeni/VHDL_Probleme/exemplu_2017.pdf · Subiecte: I. Folosind numai declara ţii concurente , s ă se scrie codul VHDL pentru un multipol logic care prime

Rezolvare: -I entity alternate is port( iaV : in std_logic_vector(3 downto 0); oY : out std_logic ); end; architecture a of alternate is begin with iaV select oY <= '1' when "1010" | "0101", '0' when others; end; --------------------------------------------------- ----------- --II entity alternate is generic( n : integer := 4 ); port( iaV : in std_logic_vector(n-1 downto 0); oY : out std_logic ); end; architecture a of alternate is begin process(iaV) begin oY <= '1'; for i in 0 to n-2 loop if iaV(i+1) = iaV(i) then oY <= '0'; exit; end if; end loop; end process; end; -------------------------------------------------- --III entity johnson is generic( n : integer :=3; ); port( iClk : in std_logic; iRst : in std_logic; oaQ : out std_logic_vector(n-1 downto 0) ); end;

Page 3: Subiecte: I. - cs.ucv.rolemeni/VHDL_Probleme/exemplu_2017.pdf · Subiecte: I. Folosind numai declara ţii concurente , s ă se scrie codul VHDL pentru un multipol logic care prime

architecture j of johnson is signal saQ : std_logic_vector(n-1 downto 0); begin oaQ <= saQ; process(iClk) begin if rising_edge(iClk) then if iRst = '1' then saQ <= (others => '0'); else saQ <= saQ(n-2 downto 0) & not saQ(n-1); end if; end if; end process; end;