lab4_otchet
.docxВыполнили:
Лабораторная работа 5
РАЗРАБОТКА МОДУЛЯ ДЛЯ ВЗАИМОДЕЙСТВИЯ С
СЕМИСЕГМЕНТНЫМ ИНДИКАТОРОМ
Цель работы
Разработка модуля для работы с семигементным индикатором с помощью переключателей, с которых будет считываться 4-битное число и выводиться на индикатор. Написание тестового модуля. Проверка работоспособности на отладочной плате zedboard.
1. Принцип
Семисегментный индикатор устроен по приципу дешифратора. Имеем 4 значения на входе в двоичной системе счисления от 0 до 15. На выходе получаем 7 позиций, которые соответствуют сегментам на дисплее. Восьмой сегмент соответствует точке.
2. Модули
module top
(
input global_clk,
input [3:0] switches,
output [7:0] seven_segm_disp
);
ssd_driver top_ssd( .clk (global_clk), .swt (switches), .ssd (seven_segm_disp) );
endmodule
module ssd_driver
(
input clk,
input [3:0] swt,
output reg [7:0] ssd
);
always @(posedge clk)
begin
case ( swt[3:0] )
4'b0000: ssd <= 8'b11111110;
4'b0001: ssd <= 8'b10110000;
4'b0010: ssd <= 8'b11101101;
4'b0011: ssd <= 8'b11111001;
4'b0100: ssd <= 8'b10110011;
4'b0101: ssd <= 8'b11011011;
4'b0110: ssd <= 8'b11011111;
4'b0111: ssd <= 8'b11110000;
4'b1000: ssd <= 8'b11111111;
4'b1001: ssd <= 8'b11110011;
4'b1010: ssd <= 8'b11110111;
4'b1011: ssd <= 8'b10011111;
4'b1100: ssd <= 8'b11001110;
4'b1101: ssd <= 8'b10111101;
4'b1110: ssd <= 8'b11001111;
4'b1111: ssd <= 8'b11000111;
endcase
end
endmodule
3. Тестовый модуль
`timescale 1ns / 1ps
module top_tb();
reg clk = 0;
reg [3:0] swt_tb;
wire [7:0] ssd_tb;
top SSD ( .switches( swt_tb ), .seven_segm_disp( ssd_tb ), .global_clk( clk ) );
integer i;
initial
begin
for( i = 0; i < 16; i = i + 1 )
#10 swt_tb = i;
end
always #5 clk = ~clk;
endmodule
4. Содержимое xdc файла
set_property PACKAGE_PIN AA9 [get_ports {seven_segm_disp[7]}]
set_property PACKAGE_PIN AA11 [get_ports {seven_segm_disp[6]}]
set_property PACKAGE_PIN Y11 [get_ports {seven_segm_disp[5]}]
set_property PACKAGE_PIN Y10 [get_ports {seven_segm_disp[4]}]
set_property PACKAGE_PIN W11 [get_ports {seven_segm_disp[3]}]
set_property PACKAGE_PIN W12 [get_ports {seven_segm_disp[2]}]
set_property PACKAGE_PIN V10 [get_ports {seven_segm_disp[1]}]
set_property PACKAGE_PIN W8 [get_ports {seven_segm_disp[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {seven_segm_disp[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports global_clk]
set_property PACKAGE_PIN Y9 [get_ports global_clk]
5. Временная диаграмма
6. Вывод
Работа программы корректна, все вычисления верны.