Stranik1980
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору [more] Вот код на VHDL LIBRARY ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; Entity decoder is Generic (N: integer := 4); --для моделирование N=4 для программирование ПЛИС N=27000000 Port ( f0: in std_logic; --опорный генератор kk_8:in std_logic_vector (1 to 8); --входной код hexS,hexM:out std_logic_vector(0 to 6); --выходной вектор значения на 7-индикатор error:out std_logic_vector(1 to 8) -- индикация разряда ошибочного бита ); End decoder; ARCHITECTURE Behavior OF decoder IS Signal clk:std_logic:='0'; signal kk_4:std_logic_vector (0 to 3):="0000"; signal s:std_logic_vector(4 downto 1):="0000"; signal kod,kk:std_logic_vector (1 to 8):="00000000"; Component delitel is --Делитель частоты опорного генератора Port ( f_in:in std_logic; --частота опорного генератора. f_out:out std_logic --частота 1Гц. ); End component; Component hex is --компонент отображения на семиразрядном индикаторе Port ( inp:in std_logic_vector (0 to 3); --входной вектор значения indicS,indicM:out std_logic_vector(0 to 6) --выходной вектор значения на 7-индикатор ); End component; Begin L1: delitel port map (f0,clk); Process (clk) Variable x:integer range 0 to 15:=0 ; Begin if clk'event and clk='1' then kod<=kk_8; End if; s(4)<=kod(1) xor kod(2) xor kod(3) xor kod(4) xor kod(5) xor kod(6) xor kod(7) xor kod(8); s(1)<=kod(1) xor kod(3) xor kod(5) xor kod(7); s(2)<=kod(2) xor kod(3) xor kod(6) xor kod(7); s(3)<=kod(4) xor kod(5) xor kod(6) xor kod(7); x:=conv_integer(s); if x>7 then if x=8 then error<="00000001"; kk<=kod; else x:=x-8; for i in 1 to 8 loop if i=x then error(i)<='1'; kk(i)<=not(kod(i)); else kk(i)<=kod(i); error(i)<='0'; end if; end loop; end if; elsif x=0 then error<="00000000"; kk<=kod; elsif x<8 then error<="11111111" ; kk<="00000000"; End if; End process; kk_4<=(kk(7),kk(6),kk(5),kk(3)); L2:hex port map (kk_4,hexS,hexM); End Behavior; |