Documente Academic
Documente Profesional
Documente Cultură
library IEEE;
use IEEE.std_logic_1164.all;
entity mo_SDFFSR is
port( D,SI,SE,CK,SN,RN:in BIT;Q,QN:out BIT);
end SDFFSR;
architecture comportamental of SDFFSR is
signal QINT,QNINT: BIT;
begin
process(D,SI,SE,CK, RN,SN)
begin
if RN='0' then
if SN='0' then
QINT<='1';
QNINT<='0';
elsif SN='1' then
QINT<='0';
QNINT<='1';
end if;
elsif RN='1' then
if SN='0' then
QINT<='1';
QNINT<='0';
elsif SN='1' then
if falling_edge(CK) then
QINT<=QINT;
QNINT<=QNINT;
end if;
if D='1' then
if SE='0' and rising_edge(CK) then
QINT<='1';
QNINT<='0';
end if;
elsif D='0' then
if SE='0' and rising_edge(CK) then
QINT<='0';
QNINT<='1';
end if;
end if;
if SI='1' then
if SE='1' and rising_edge(ck) then
QINT<='1';
QNINT<='0';
end if;
elsif SI='0' then
if SE='1' and rising_edge(CK) then
QINT<='0';
QNINT<='1';
end if;
end if;
end if;
end if;
end process;
Q<=QINT;
QN<=QNINT;
end comportamental;
ii)Să se implementeze o entitate de test şi să se simuleze modelul de lapunctul i)
library IEEE;
use IEEE.std_logic_1164.all;
entity mo_Test_SDFFSR is end;
architecture Test of mo_Test_SDFFSR is
component SDFFSR
port( D,SI,SE,CK,SN,RN:in BIT;Q,QN:out BIT);
end component;
signal SD,SSI,SSE,SCK,SSN,SRN,SQ,SQN: BIT;
for all:SDFFSR use entity work.SDFFSR(comportamental);
begin
UUT: SDFFSR port map (SD,SSI,SSE,SCK,SSN,SRN,SQ,SQN);
Process
Begin
SD<='1','0' after 40 ns;
SSN<='0','1' after 5 ns,'0' after 50 ns,'1' after 55 ns;
SRN<='0','1' after 10 ns,'0' after 60 ns,'1' after 70 ns;
SSI<='0','1' after 20 ns,'0' after 40 ns;
SSE<='0','1' after 15 ns,'0' after 30 ns,'1' after 45 ns;
for i in 1 to 13 loop
SCK<='0','1' after 3 ns;
wait for 6 ns;
end loop;
end process;
end;
B.
Denumirea circuitului:Circuit de incrementare/decrementare
Descriere:Circuitul adună 1 sau scade 1 dintr-un număr de intrare A rezultatul fiind SUM. Selecţia
dintre operaţiile de incrementare/decrementare se face cu semnalul de intrare INC_DEC („0‟
pentru incrementare,‟1‟ pentru decrementare). Dimensiunea semnalului A se declara
generic,width.
În plus, circuitul va mai conţine două porturi:
– un port de ieşire C care semnalizează când rezultatul depăşeşte valoarea maximă,respectiv când
trece la valoare negativă. În ambele situaţii, SUM va lua valoarea 0.
– un port de intrare EN (enable), activ pe „1‟ logic care are rol de activare a circuitului.Dacă
EN=‟0‟, atunci circuitul nu funcţionează iar ieşirile sunt în starea de înaltăimpedanţă.
– un port de intrare CLK (clock). Circuitul va efectua calculul numai după apariţia unui
front negativ al acestui semnal.
– un port de intrare OEB (output enable), activ pe “0” logic, care are rol de activare a porturilor
de ieşire. Dacă OE=‟0‟, atunci la ieşiri pot fi furnizate rezultatele, altfelsemnalele de la ieşire sunt
în starea de înaltă impedanţă.
Cerinţe:
• modelarea comportamentală în VHDL a circuitului.• implementarea operaţiilor de
incrementare/decrementare cu ajutorul a două funcţii(increment şi decrement), declarate într-un
package.
• realizarea unui program de test pentru width=8;.
*bambam
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity is MO_incdec
--generic n: natural :=8;
port ( A,MAX: in std_logic_vector(7 downto 0);
OEB,CK,EN,INC_DEC: in std_logic;
SUM: out std_logic_vector(7 downto 0);C:out std_logic );
end MO_incdec;
architecture comportament of MO_incdec is
signal SSUM:std_logic_vector (7 downto 0);
signal SC:std_logic:='0';
signal i_d:std_logic_vector(7downto 0):="00000001";
begin
SSUM<=A;
process(A,MAX,OEB,CK,EN)
begin
if EN='1' then
if SSUM>MAX then
SC<='1';
SSUM<="00000000";
elsif SSUM<=MAX then
SC<='0';
end if;
if INC_DEC='1' and falling_edge(CK) then
SSUM<=std_logic_vector(unsigned(SSUM)+unsigned(i_d));
elsif INC_DEC='0' and falling_edge(CK) then
SSUM<=std_logic_vector(unsigned(SSUM)-unsigned(i_d));
end if;
if OEB='0' then
SUM<=SSUM;C<=SC;
elsif OEB='1' then
SUM<="ZZZZZZZZ";
C<='Z';
end if;
end if;
end process;
end;