Приоритетни кодер – Рачунарски VLSI
Приоритетни кодер Приоритетна мрежа Приоритетни кодер ка о што само име каже додјељује различит приоритет сваком од битова који се реализује помоћу приоритетне мреже, а затим их прослјеђује у кодер. О чему се заправо ради, додјељивање приоритета се кристи у мрежама које имају раличите значаје приступа неком уређају, тј. линија која има највећи приоритет блокира све остале приступе ( n-1 линија). Линија која има за један мањи приоритет од линије која има највећи приоритет може да блокира приступе испод себе (n-2 линија). Следећа слика приказује ред приоритета.
W7 1 0 0 0 0 0 0 0
W6 x 1 0 0 0 0 0 0
W5 x x 1 0 0 0 0 0
W4 x x x 1 0 0 0 0
W3 x x x x 1 0 0 0
W2 x x x x x 1 0 0
W1 x x x x x x 1 0
W0 x x x x x x x 1
Приоритет X7 X6 X5 X4 X3 X2 X1 X0
Слика 1 Табела која приказује приоритет бита 1,0 лотички нивои; x може бити лог. јединица или лог. нула
Слика 2 Паралелни и серијски начин реализације приоритетне мреже -1-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI Приоритетне мреже се обично реализују као паралелне које захтјевају вишеулазна «и» кола или, серијски начин који захтјева коришћење двоулазних «и» кола и коришћење (n-2) «или» кола. У реализацији приоритетне мреже одлучио сам се за коришћење паралелне приоритетне мреже.
Слика3 Шематски приказ приоритетне мреже реализоване у VHDL језику
-2-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI Следћи код је написан у језику за описивање хардвера тј. у VHDL језику и представља код приоритетне мреже. Прво ћемо поћи од основних елемената а то су: -- Четвороулазно И коло entity I_4 is port ( inp0,inp1,inp2,inp3: in BIT; Y: out BIT ); end I_4; architecture I_4 of I_4 is begin -- POCETAK KODA process begin Y <= inp0 and inp1 and inp2 and inp3; wait on inp0,inp1,inp2,inp3; end process;
end I_4;
-- Деветоулазно и коло entity I_9 is port ( inp0,inp1,inp2,inp3,inp4,inp5,inp6,inp7,inp8: in BIT; Y: out BIT ); end I_9; architecture I_9 of I_9 is begin --Pocetak koda process begin
Y <= inp0 and inp1 and inp2 and inp3 and inp4 and inp5 and inp6 and inp7 and inp8; wait on inp0,inp1,inp2,inp3,inp4,inp5,inp6,inp7,inp8; end process; end I_9; --Не коло --Теба нам 8.улаѕно не коло, нулти бит не инвертујемо. entity NEG is port ( ULAZ: in BIT_vector(7 downto 0);
-3-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI Y: out BIT_vector(7 downto 0) ); end NEG; architecture NEG of NEG is begin -- Pocetak koda process begin
Y <= not(ulaz); Y(0)<=ulaz(0); wait on ulaz; end process;
end NEG; --Приоритетна мрежа entity PR_MREZA is port ( Upm: in BIT_VECTOR (7 downto 0); E:in bit; Ipm: out BIT_VECTOR (7 downto 0) ); end PR_MREZA; architecture PR_MREZA of PR_MREZA is --Deklaracija signala --Inverujemo 7 bitova signal negU:bit_vector(7 downto 0); --Deklaracija komonenti component I_4 port( inp0,inp1,inp2,inp3: in BIT; Y: out BIT ); end component;
component I_9 port( inp0,inp1,inp2,inp3,inp4,inp5,inp6,inp7,inp8: in BIT; Y: out BIT ); end component; component NEG port ( ULAZ: in BIT_vector(7 downto 0); Y: out BIT_vector(7 downto 0)
-4-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI ); end component ; begin --Pocetak glavnog koda Invertor:NEG port map( ULAZ=>Upm, Y=>negU ); K7:I_4 port map( inp0=>Upm(7), inp1=>E, inp2=>'1', inp3=>'1',
);
Y=>Ipm(7)
K6:I_4 port map( inp0=>Upm(6), inp1=>negU(7), inp2=>E, inp3=>'1', Y=>Ipm(6) ); K5:I_4 port map( inp0=>Upm(5), inp1=>negU(6), inp2=>negU(7), inp3=>E, Y=>Ipm(5) ); K4:I_9 port map( inp0=>Upm(4), inp1=>negU(5), inp2=>negU(6), inp3=>negU(7), inp4=>E, inp5=>'1', inp6=>'1', inp7=>'1', inp8=>'1', Y=>Ipm(4) ); K3:I_9 port map(
-5-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI
);
inp0=>Upm(3), inp1=>negU(4), inp2=>negU(5), inp3=>negU(6), inp4=>negU(7), inp5=>E, inp6=>'1', inp7=>'1', inp8=>'1', Y=>Ipm(3)
K2:I_9 port map( inp0=>Upm(2), inp1=>negU(3), inp2=>negU(4), inp3=>negU(5), inp4=>negU(6), inp5=>negU(7), inp6=>E, inp7=>'1', inp8=>'1', Y=>Ipm(2) ); K1:I_9 port map( inp0=>Upm(1), inp1=>negU(2), inp2=>negU(3), inp3=>negU(4), inp4=>negU(5), inp5=>negU(6), inp6=>negU(7), inp7=>E, inp8=>'1', Y=>Ipm(1) ); K0:I_9 port map( inp0=>Upm(0), inp1=>negU(1), inp2=>negU(2), inp3=>negU(3), inp4=>negU(4), inp5=>negU(5), inp6=>negU(6), inp7=>negU(7), inp8=>E, Y=>Ipm(0) ); end PR_MREZA;
-6-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI Изглед временског дијаграма сигнала приоритетне мреже у VHDL језику:
Слика 4 Улази (Upm(0..7)) и излази (Ipm(0..7)) приоритетне мреже Са слике 4, се види да приоритет имају битови веће тежине. Симулација је извршена у периодима од 100nS, додјељујући битовима приоритет од навећег ка најмањем.
-7-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI
Кодер Кодер има задатак да од одабраног улаза, на излазу преслика његову бинарну вриједност. Такав кодер називамо BCD кодер.Кодер има 2ⁿ улаза, и n излаза. Код кодера само један улаз може имат вриједност 1. Његова табела кодирања приказана је на слици 4: Uk: in BIT_VECTOR (7 downto 0); 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 остале комбинације
Ik: out STD_LOGIC_VECTOR (2 downto 0) 000 001 010 011 100 101 110 111 zzz
Слика 5 Табела кодирања Реализација кодера у VHDL језику може се реализовати на следећи начин: --- Кодер library IEEE; use IEEE.std_logic_1164.all; entity KODER is port ( Uk: in BIT_VECTOR (7 downto 0); Ik: out STD_LOGIC_VECTOR (2 downto 0) ); end KODER; architecture KODER of KODER is begin process(Uk) begin case Uk is when "00000001" => Ik <="000"; when "00000010" => Ik <="001"; when "00000100" => Ik <="010"; when "00001000" => Ik <="011"; when "00010000" => Ik <="100"; when "00100000" => Ik <="101"; when "01000000" => Ik <="110"; when "10000000" => Ik <="111"; when OTHERS => Ik <="ZZZ"; end case;
-8-
-- За сва остала стања излазна ипеданса ће бити висока
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI end process; end KODER;
Временски дијаграм сигнала кодера:
Слика 6 Временски дијаграм кодера, када је на улазу више од једног сигнала активно, или су сви сигнали лог. нуле, кодер прелази у стање високе импедансе.
Приоритетни кодер Приоритетни кодер реализујемо спајањем приоритетне мреже и кодера, приказаног као на слици:
Слика 7 Реализација приоритетног кодера спајањем приоритетне мрже и кодера -9-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI
Код: -- Приоритетни кодер -library IEEE; use IEEE.std_logic_1164.all; entity PRIORITETNI_KODER is port ( UL: in BIT_VECTOR (7 downto 0); DOZVOLA: in BIT; IZ: out STD_LOGIC_VECTOR (2 downto 0) ); end PRIORITETNI_KODER; architecture PRIORITETNI_KODER of PRIORITETNI_KODER is signal pomocni:bit_vector(7 downto 0) ; component pr_mreza port( Upm: in BIT_VECTOR (7 downto 0); E:in bit; Ipm: out BIT_VECTOR (7 downto 0) ); end component; component KODER port( Uk: in BIT_VECTOR (7 downto 0); Ik: out STD_LOGIC_VECTOR (2 downto 0) ); end component; begin PM: pr_mreza port map ( Upm=>UL, E=>DOZVOLA, Ipm=>pomocni ); KO: KODER port map ( Uk=>pomocni, Ik=>IZ ); end PRIORITETNI_KODER;
-10-
Студент: Ђорђе Гарић
Приоритетни кодер – Рачунарски VLSI
Времески дијаграм сигнала приоритетног кодера:
Слика 8 Код приоритетног кодера може бити активно више улаза истовремено, он бира највећи бит и њега просјеђује кодеру, који даје његову бинарну врједност
-11-
Студент: Ђорђе Гарић