Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ----------------------------------------------------------------------------------
- -- Company:
- -- Engineer:
- --
- -- Create Date: 18:42:11 04/27/2017
- -- Design Name:
- -- Module Name: COUNTER10BIT - Behavioral
- ---- Zadatak 4:
- ---- Napisati VHDL model 10-bitnog obostranog brojača sa sledećim dodatnim ulaznim i
- ---- izlazni portovima:
- ---- • signal dozvole brojanja - en
- ---- • clock enable ulaz - ce
- ---- • indikator smera brojanja, u slučaju obostranog brojača - updown
- ---- • ulazni port dozvole upisa novog sadržaja u brojački registar - load
- ---- • ulazni port podataka za prosleđivanje nove vrednosti koje se želi upisati u
- ---- brojački registar - counter_value
- ---- • indikator prekoračenja opsega - overflow
- ---- Za tako napisani model brojača razviti i potrebno verifikaciono okruženje koje će
- ---- moći da se iskoristi za njegovu funkcionalnu verifikaciju.
- ----------------------------------------------------------------------------------
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- use IEEE.STD_LOGIC_ARITH.ALL;
- use IEEE.STD_LOGIC_UNSIGNED.ALL;
- entity COUNTER10BIT is
- PORT(
- CLK : in std_logic;
- EN : in std_logic;
- CE : in std_logic;
- UPDOWN : in std_logic; -- 0 kada je unapred, 1 kada je unazad
- -- sta god to INDIKATOR znacilo, napravio sam kao ULAZNI
- -- port, a ne bi bio problem ni da je izlazni i time stvarno bio
- -- INDIKATOR stanja, onda bi dodao port DIRECTION koji bi bio ULAZNI
- -- i npr kada je 1, BROJI UNAPRED, kada je 0, BROJI UNAZAD.
- LOAD : in std_logic;
- COUNTER_VALUE : in std_logic_vector(9 downto 0);
- Q : out std_logic_vector(9 downto 0); -- izlaz
- OVERFLOW : out std_logic
- );
- end COUNTER10BIT;
- architecture Behavioral of COUNTER10BIT is
- signal TEMP_DATA_s : std_logic_vector(9 downto 0) := (others => '0');
- begin
- --COUNTER10BIT:
- process(CLK)
- begin
- if(CLK'event and CLK = '1') then
- OVERFLOW <= '0';
- if(LOAD = '1') then
- TEMP_DATA_s <= COUNTER_VALUE;
- else
- if(EN = '1') then
- if(CE = '1') then
- -- 2 ** 10 - 1 = 1023 = 0b1111111111
- -- 2 ** 10 - 1 = 1023 = 0b1111111111
- -- 2 ** 10 - 1 = 1023 = 0b1111111111
- if(TEMP_DATA_s < conv_std_logic_vector(2 ** 10 - 1, 10)) then
- if(UPDOWN = '0') then
- TEMP_DATA_s <= TEMP_DATA_s + '1';
- --else
- end if;
- if(UPDOWN = '1') then
- TEMP_DATA_s <= TEMP_DATA_s - '1';
- end if;
- else
- OVERFLOW <= '1';
- TEMP_DATA_s <= conv_std_logic_vector(0, 10);
- end if;
- -- Kada razdvojim na dve provjere za UPDOWN, onda nema WARNING koji kaze
- -- DA VECINA PORTOVA KOJE SAM DEKLARISAO U ENTITYJU NISU NIKADA ISKORISTENI!
- -- Warning se javljao jer KOMPAJLER prolazi kroz kod i pronalazi gdje je
- -- upotrebljen svaki od PORTOVA koji su navedeni, ako je neki port koristen
- -- unutar NEKOG USLOVA, i taj uslova NIKADA nije zadovoljen, KOMPAJLER nece ni uci unutra
- -- i na taj nacin nece znati da je taj PORT koristen, iako mu EKSPLICITNO u kodu kazes
- -- da koristis taj port koji javlja kao neiskoristen.
- -- ZAKOMENTARISANI KOD ISPOD TAKODJE RADI!
- -- ALI OVAJ NACIN ZAHTEVA NEPOTREBNO DUPLIRANJE KODA...
- -- PROBLEM JE BIO poredjenje NULE kao 10-bitnog podatka sa 1024 kao 10-bitnog podatka
- -- 0 = 0b0000_0000_00
- -- 1024 = 0b1_0000_0000_00 , conv_std_logic_vector(1024, 10) ce vratiti 10 bita nizeg prioriteta
- -- sto ce dati 10 nula, pa kada kazes 0 < 0, dobijes FALSE, i nikada ne udjes u IF!
- -- UBIJE MI 2 SATA NA RJESAVANJE, ALI SADA ZNAM! UOPAA! In you' face, Xilinx!
- ----------------------------------------------------------------------------------------
- -- if(UPDOWN = '0') then
- -- if(TEMP_DATA_s < conv_std_logic_vector(2 ** 10 - 1, 10)) then
- -- TEMP_DATA_s <= TEMP_DATA_s + '1';
- -- else
- -- OVERFLOW <= '1';
- -- TEMP_DATA_s <= conv_std_logic_vector(0, 10);
- -- end if;
- -- end if;
- --
- -- if(UPDOWN = '1') then
- -- if(TEMP_DATA_s < conv_std_logic_vector(2 ** 10 - 1, 10)) then
- -- TEMP_DATA_s <= TEMP_DATA_s - '1';
- -- else
- -- OVERFLOW <= '1';
- -- TEMP_DATA_s <= conv_std_logic_vector(0, 10);
- -- end if;
- -- end if;
- ----------------------------------------------------------------------------------------
- end if;
- end if;
- end if;
- end if;
- end process;
- Q <= TEMP_DATA_s; -- konacnu vrednost dodeljujem izlazu.
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement