Лабораторная работа №4
ПРОЕКТИРОВАНИЕ КОНТРОЛЛЕРА ПОСЛЕДОВАТЕЛЬНО ПОРТА
Цель работы. Получить практические навыки в проектировании интерфейсных модулей устройств на базе ПЛИС.
Задание:
Передатчик и приемник последовательного порта, количество разрядов – 7, контроль по нечетности, два стоповых бита, стандарт ввода-вывода - SSTL18_I .
Текстовое описание передатчика:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Lab_4_1 is
Port ( X : in STD_LOGIC_VECTOR (6 downto 0);
strob : in STD_LOGIC;
takt : in STD_LOGIC;
Y : out STD_LOGIC);
end Lab_4_1;
architecture Behavioral of Lab_4_1 is
signal check: std_logic_vector(11 downto 0):="000000000000";
--signal tmp: std_logic:='0';
begin
process(strob,takt)
variable counter: integer:=0;
variable tmp: integer:=0;
begin
if strob='1' and strob'event and tmp=0 then
check(0)<='1';
check(7 downto 1)<= X;
check(8)<=X(0) xor X(1) xor X(2) xor X(3) xor X(4) xor X(5) xor X(6);
check(10 downto 9)<="11";
check(11)<='0';
tmp:=1;
else
if takt='1' and takt'event and tmp=1 then
if counter<=11 then
Y<=check(0);
check(10 downto 0)<= check(11 downto 1);
counter:=counter + 1;
else
tmp:=0;
end if;
end if;
end if;
end process;
end Behavioral;
Рисунок 1 – Работа передатчика
Описание приемника
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity Lr_4_pr is
Port ( Y : in STD_LOGIC;
takt : in STD_LOGIC;
X : out STD_LOGIC_VECTOR (6 downto 0):="0000000";
gotov : out STD_LOGIC;
o_err : out STD_LOGIC);
end Lr_4_pr;
architecture Behavioral of Lr_4_pr is
signal check: std_logic_vector(10 downto 0):="00000000000";
--signal tmp: std_logic:='0';
begin
process(takt)
variable counter: integer:=0;
variable rec: integer:=0;
begin
if takt='1' then
if rec=0 and Y='1' then
rec:=1;
else
if rec=1 and counter<11 then
check(counter)<=Y;
counter:=counter + 1;
if counter=11 then
if check(9)='1' and check(8)='1' and (check(7)=(check(0) xor check(1) xor check(2) xor check(3) xor check(4) xor check(5) xor check(6))) then
o_err<='0';
X <= check(9 downto 3);
else
X <= check(9 downto 3);
o_err<='1';
end if;
end if;
else
rec:=0;
end if;
end if;
end if;
end process;
end Behavioral;
Рисунок 2 – Работа двоично-десятичного счетчика с предделителем
Вывод: получил практические навыки в проектировании интерфейсных модулей устройств на базе ПЛИС. Реализовал передатчик и приемник последовательного порта. Организовал передачу и прием 7 разрядных данных, с контролем по нечетности. Кадр также включает в себя стартовый и 2 стоповвых бита.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.