UNIVERSITATEA TEHNICĂ A MOLDOVEI
FACULTATEA CALCULATOARE, INFORMATICĂ ȘI
MICROELECTRONICĂ
DEPARTAMENTUL INFORMATICĂ ȘI INGINERIA SISTEMELOR
Raport
LUCRARE INDIVIDUALĂ NR. 1
la Proiectarea cu dispozitive programabile
A realizat: st. gr. C-161 Crucean Cristian
A verificat: [Link]. Sudacevschi Viorica
Chișinău 2019
Scopul lucrării: Proiectarea, testarea şi simularea circuitelor logice secvențiale în
mediul de dezvoltare software Altera Quartus II. Descrierea circuitelori va fi efectuată în
limbajul VHDL, folosind codificarea comportamentală.
1. Se va proiecta un registru conform variantei din tabelul 1.
Nr. Num. CLK Resetare Setare Direcție Încărcare Iesire
de biți deplasare
5. 6 Front crescător sincronă nu dreapta serială serială
library ieee;
use ieee.std_logic_1164.all;
entity reg6_depl is
port (clk, ce, si, reset: in std_logic;
so: out std_logic);
end reg6_depl;
architecture reg6_depl_arch of reg6_depl is
signal tmp: std_logic_vector (5 downto 0);
begin
process (clk,reset)
begin
if (clk'event and clk = '1') then
if (reset = '1') then
tmp <= (others => '0');
elsif (ce = '1') then
for i in 0 to 4 loop
tmp(i+1) <= tmp(i);
end loop;
tmp(0) <= si; -- încărcare serială
end if;
end if;
end process;
so <= tmp(5); -- ieșire serială
end reg6_depl_arch;
Diagrama de timp:
2. Se va proiecta un numărător conform variantei din tabelul 2.
Nr. mod CLK Resetare Tip Secvența de Încărcare
numărător numărare
5. 9 Front sincronă Direct 3-11 paralelă
descrescător
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.ALL;
entity counter is
port (clk: in std_logic;
rst: in std_logic;
en, load: in std_logic;
data: in std_logic_vector (3 downto 0);
num: out std_logic_vector (3 downto 0));
end counter;
architecture num4_arch of counter is
signal tmp: std_logic_vector (3 downto 0):= "0011";
begin
cnt: process (rst,clk)
begin
if falling_edge(clk) then
if (rst = '1') then
tmp <= (others => '0');
elsif (load = '1') then
tmp <= data;
elsif (en = '1') then
tmp <= tmp + 1;
if ((to_integer(unsigned(tmp)) >= 11) or (to_integer(unsigned(tmp)) < 3 )) then
tmp <= "0011";
end if;
end if;
end if;
end process cnt;
num <= tmp;
end num4_arch;
Diagrama de timp:
Concluzii:
În urma lucrării individuale efectuate, ne-am creat deprinderi practice de lucru cu Quartus, și anume limbajul
VHDL. Am creat un numărător pe 6 biți activ pe frontul crescător, deplasare dreapta , încărcare serială și un
numărător direct modulo 9 cu secvența de numărare 3-11, activ pe frontul descrescător, cu încărcare paralelă. Într-
un final am verificat diagramele de timp pentru a ne convinge că îndeplinim toate condițiile din tabel, și anume:
dacă acționează după front, dacă se resetează în momentul când rst = 1, dacă se încarcă valoare când load = 1, și
pentru numărător dacă se încadrează în secvența de numărare 3-11.