-
Notifications
You must be signed in to change notification settings - Fork 66
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Create README.md * Add files via upload * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Add files via upload
- Loading branch information
1 parent
9d22272
commit 31f4244
Showing
16 changed files
with
967 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
------------------------------------------------------------------- | ||
-- Name : BCD_to_7seg_display.vhd | ||
-- Author : Elvis Fernandes | ||
-- Version : 0.1 | ||
-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC | ||
-- Description : Tarefa 11: subprogramas | ||
-- Date : 11/07/2024 | ||
------------------------------------------------------------------- | ||
--Implemente um pacote que contenha a função especificada abaixo. | ||
--Desenvolva usando a simulação. | ||
--Sintetize e teste no kit DE10-Lite. | ||
--Analise a quantidade de hardware utilizado no resultado da síntese. | ||
--Escreva uma função que faz a conversão de 4-bits BCD para display de 7-segmentos (0 a 0xF). | ||
--Use um vetor (array) constante para definir a tabela. | ||
--Escreve outra função que recebe um número de 8-bits e converte para dois diplays de 7 segmentos. Use a função acima. | ||
--Teste utilizando 2 displays de 7 segmentos e um contador síncrono. | ||
------------------------------------------------------------------- | ||
|
||
library IEEE; | ||
use IEEE.STD_LOGIC_1164.ALL; | ||
use IEEE.NUMERIC_STD.ALL; | ||
use work.bcd_to_7seg_pkg.all; | ||
|
||
entity BCD_to_7seg_display is | ||
Port ( | ||
bcd_input : in std_logic_vector(7 downto 0); | ||
seven_seg_output_1 : out std_logic_vector(7 downto 0); -- Alterado para acomodar um display | ||
seven_seg_output_2 : out std_logic_vector(7 downto 0) -- Alterado para acomodar um display | ||
); | ||
end entity BCD_to_7seg_display; | ||
|
||
architecture Behavioral of BCD_to_7seg_display is | ||
begin | ||
-- Atribui as saídas usando a função convert_8bits_to_dual_7seg | ||
process(bcd_input) | ||
variable result : std_logic_vector(15 downto 0); | ||
begin | ||
result := convert_8bits_to_dual_7seg(bcd_input); | ||
seven_seg_output_1 <= result(15 downto 8); | ||
seven_seg_output_2 <= result(7 downto 0); | ||
end process; | ||
end architecture Behavioral; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
------------------------------------------------------------------- | ||
-- Name : BCD_to_7seg_display_tb.vhd | ||
-- Author : Elvis Fernandes | ||
-- Version : 0.1 | ||
-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC | ||
-- Description : Tarefa 11: subprogramas | ||
-- Date : 11/07/2024 | ||
------------------------------------------------------------------- | ||
--Implemente um pacote que contenha a função especificada abaixo. | ||
--Desenvolva usando a simulação. | ||
--Sintetize e teste no kit DE10-Lite. | ||
--Analise a quantidade de hardware utilizado no resultado da síntese. | ||
--Escreva uma função que faz a conversão de 4-bits BCD para display de 7-segmentos (0 a 0xF). | ||
--Use um vetor (array) constante para definir a tabela. | ||
--Escreve outra função que recebe um número de 8-bits e converte para dois diplays de 7 segmentos. Use a função acima. | ||
--Teste utilizando 2 displays de 7 segmentos e um contador síncrono. | ||
------------------------------------------------------------------- | ||
|
||
library IEEE; | ||
use IEEE.STD_LOGIC_1164.ALL; | ||
use IEEE.NUMERIC_STD.ALL; | ||
use work.bcd_to_7seg_pkg.all; | ||
|
||
|
||
entity BCD_to_7seg_display_tb is | ||
end BCD_to_7seg_display_tb; | ||
|
||
architecture Behavioral of BCD_to_7seg_display_tb is | ||
-- Declaração dos sinais para o teste | ||
signal bcd_input : std_logic_vector(7 downto 0) := "00000000"; | ||
--signal seven_seg_output : std_logic_vector(15 downto 0); | ||
signal seven_seg_output_1 : std_logic_vector(7 downto 0); -- Alterado para acomodar um display | ||
signal seven_seg_output_2 : std_logic_vector(7 downto 0); -- Alterado para acomodar um display | ||
|
||
begin | ||
|
||
-- Instanciação do componente a ser testado | ||
UUT : entity work.BCD_to_7seg_display | ||
port map ( | ||
bcd_input => bcd_input, | ||
--seven_seg_output => seven_seg_output | ||
seven_seg_output_1 => seven_seg_output_1, | ||
seven_seg_output_2 => seven_seg_output_2 | ||
); | ||
|
||
-- Processo de simulação | ||
process | ||
begin | ||
-- Teste de cada número BCD de 0 a F | ||
for i in 0 to 15 loop | ||
bcd_input <= std_logic_vector(to_unsigned(i, bcd_input'length)); | ||
wait for 10 ns; -- Atraso para observar o resultado | ||
end loop; | ||
|
||
-- Finalização da simulação | ||
wait; | ||
end process; | ||
|
||
end Behavioral; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
# SEMÁFORO | ||
### Esta tarefa envolve a criação de um semáforo em VHDL baseada em máquina de estados com os seguintes funcionalidades: | ||
- Controle dos estados luzes de um semáforo (Red, Yellow e Green); | ||
- Contagem do número de pedestres (apenas no estado Red); | ||
- Contagem do número de carros (apenas nos estados Yellow e Green); | ||
- Exibição das luzes do semáforo, da contagem dos pedestres e carros, bem como do tempo de cada estado do semáforo. | ||
------------------------------------------------------------------- | ||
## 1 ESPECIFICAÇÕES | ||
### 1.1 PORTAS DE ENTRADA | ||
- clk: Porta de entrada (interno) do tipo std_logic responsável pelo clock. | ||
- rst: Porta de entrada (interno) do tipo std_logic responsável pelo rst. | ||
- start: Porta de entrada (chave) do tipo std_logic responsável por iniciar o sistema. | ||
- carro: Porta de entrada (chave) do tipo std_logic responsável pela contagem de carros. | ||
- pedestre: Porta de entrada (chave) do tipo std_logic responsável pela contagem de pessoas. | ||
|
||
### 1.2 PORTAS DE SAÍDA | ||
- r1: Porta de saída (LED) do tipo std_logic responsável sinal vermelho do semáforo. | ||
- y1: Porta de saída (LED) do tipo std_logic responsável sinal amarelo do semáforo. | ||
- g1: Porta de saída (LED) do tipo std_logic responsável sinal verde do semáforo. | ||
- ped_count: Porta de saída (DISPLAY 7 SEGMENTOS) do tipo unsigned responsável pela visualização da contagem de pedestres. | ||
- car_count: Porta de saída (DISPLAY 7 SEGMENTOS) do tipo unsigned responsável pela visualização da contagem de carros. | ||
- time_display: Porta de saída (DISPLAY 7 SEGMENTOS) do tipo unsigned responsável pela visualização do tempo de cada estado. | ||
- visual_display: Porta de saída (DISPLAY 7 SEGMENTOS) do tipo unsigned responsável visualizar os segmentos. | ||
|
||
|
||
### 1.3 ESTADOS | ||
|
||
**STARTT** | ||
- Estado STARTT criado com valor 0, para que ele vá para o estado IDLE imediatamente, garantindo com que o estado RED assuma o valor do estado IDLE; | ||
|
||
**IDLE** | ||
- Estado IDLE para garantir a contagem total do estado RED. | ||
- Sem o estado IDLE, o estado RED utiliza a mesma contagem de tempo IDLE No primeiro ciclo da máquina de estados. | ||
|
||
**RED** | ||
- Deve ser contabilizado o tempo do estado e mostrado no display; | ||
- Deve ser contabilizado quantas pessoas atravessam e mostrado no displaY; | ||
- Não deve ser contabilizado quantas pessoas atravessam e mostrado no display; | ||
- O tempo do estado deve ser decrementado e chegar até 0; | ||
- Quando chegar em 0, o estado é alterado para o próximo estado. | ||
|
||
**YELLOW** | ||
- Deve ser contabilizado o tempo do estado e mostrado no display; | ||
- Não deve ser contabilizado quantas pessoas atravessam; | ||
- Deve ser contabilizado o número de carros que passam e mostrado no display; | ||
- O tempo do estado deve ser decrementado e chegar até 0; | ||
- Quando chegar em 0, o estado é alterado para o próximo estado. | ||
|
||
**GREEN** | ||
- Deve ser contabilizado o tempo do estado e mostrado no display; | ||
- Não deve ser contabilizado quantas pessoas atravessam e mostrado no display; | ||
- Deve ser contabilizado o número de carros que passam e mostrado no display; | ||
- O tempo do estado deve ser decrementado e chegar até 0; | ||
- Quando chegar em 0, o estado é alterado para o próximo estado. | ||
|
||
## 2 PINAGEM | ||
|
||
**Leds** | ||
- LEDR (0) --> r1 | ||
- LEDR (1) --> y1 | ||
- LEDR (2) --> g1 | ||
|
||
**Chaves** | ||
- SW(0) --> start | ||
- SW(1) --> rst | ||
- SW(8) --> carro | ||
- SW(9) --> pedestre | ||
|
||
**Displays** | ||
|
||
- HEX0 --> ped_count. | ||
- HEX1 --> car_count. | ||
- HEX2 --> time_display. | ||
- HEX4 --> segmentos de time_display (15 a 8). | ||
- HEX5 --> segmentos de time_display (7 a 0). | ||
|
||
## 3 FUNCIONAMENTO | ||
|
||
- 1) Simular no modelsim; | ||
- 2) Gravar na placa; | ||
- 3) Colocar rst em nivel ALTO; | ||
- 4) Colocar rst em nivel BAIXO; | ||
- 5) Colocar start em nivel ALTO; | ||
|
||
**No primeiro ciclo da máquina de estados** | ||
- Estado STARTT iniciado. LEDR (0), LEDR (1) e LED (2) acesos; tempo 0 segundos. | ||
- Estado IDLE iniciado. Apenas LEDR (2) aceso; tempo estabelecido pelo estado RED; tempo 15 segundos. | ||
- ESTADO YELLOW inicado. Apenas LEDR (1) aceso; tempo estabelecido pelo estado YELLOW; tempo 15 segundos. | ||
- ESTADO GREEN inicado. Apenas LEDR (0) aceso; tempo estabelecido pelo estado GREEN; tempo 15 segundos. | ||
|
||
**No segundo ciclo da máquina de estados** | ||
- Estado RED iniciado. Apenas LEDR (2) aceso; tempo estabelecido pelo estado RED; tempo 15 segundos. | ||
- Estado YELLOW iniciado. Apenas LEDR (1) aceso; tempo estabelecido pelo estado YELLOW; tempo 15 segundos. | ||
- Estado GREEN iniciado. Apenas LEDR (0) aceso; tempo estabelecido pelo estado GREEN; tempo 15 segundos. | ||
|
||
## 4 SIMULAÇÃO SEMÁFORO | ||
- 1) Abrir o software Modelsim | ||
- 2) cd C:/Users/elvis/OneDrive/Documentos/projeto_final/riscv-multicycle-master/riscv-multicycle-master/peripherals/semaforo | ||
- 3) do tb.do | ||
- 4) Imagens da simulação | ||
|
||
No primeiro ciclo da máquina de estados. | ||
 | ||
|
||
A partir do segundo ciclo da máquina de estados. | ||
 | ||
|
||
## 5 SUBPROGRAMAS | ||
Os subprogramas possuem as seguintes especificações: | ||
- Função que faz a conversão de 4-bits BCD para display de 7-segmentos (0 a 0xF). | ||
- Função que recebe um número de 8-bits e converte para dois diplays de 7 segmentos. | ||
- Tabela de conversão de BCD para display de 7 segmentos | ||
- Um vetor (array) constante para definir a tabela. | ||
- Atribuição das saídas usando a função convert_8bits_to_dual_7seg. | ||
|
||
Os arquivos utilizados nos subprogramas são: | ||
- BCD_to_7seg_display.vhd | ||
- bcd_to_7seg_pkg.vhd | ||
- BCD_to_7seg_display_tb.vhd | ||
- do_BCD_to_7seg_display.do | ||
|
||
Simulação dos Subprogramas: | ||
|
||
- 1) Abrir o software Modelsim | ||
- 2) cd C:/Users/elvis/OneDrive/Documentos/projeto_final/riscv-multicycle-master/riscv-multicycle-master/peripherals/semaforo | ||
- 3) do_BCD_to_7seg_display.do | ||
- 4) Imagem da simulação | ||
|
||
 | ||
|
||
## 6 SÍNTESE | ||
O arquivo de síntese é denominado de_10_lite.vhd e é composto de: | ||
|
||
- Pacote de conversão BCD para 7 segmentos (USE work.bcd_to_7seg_pkg.all;) | ||
- Sinais para o semáforo e contadores | ||
- Sinais para os displays de 7 segmentos | ||
- Sinal para o divisor de clock (clk_div) | ||
- Divisor de Clock para gerar um sinal de clock mais lento | ||
- Instância do DUT (Design Under Test) do semáforo | ||
- Processo para converter os valores de contagem para displays de 7 segmentos (ped_count, car_count, time_display, visual_display) | ||
- Atribuição dos valores convertidos aos displays | ||
- Sincronizar o valor de time_display a visual_display_test | ||
- Processo para controlar o displays HEX4 e HEX5 com base no valor de visual_display_test | ||
|
||
Compilação Síntese | ||
- 1) Abrir o software Quartus Prime | ||
- 2) Assignments >> Settings... >> ... >> Apply >> OK | ||
- 3) Adicionar: | ||
- semaforo.vhd | ||
- BCD_to_7seg_display.vhd | ||
- bcd_to_7seg_pkg.vhd | ||
|
||
 | ||
|
||
- 4) Compilação (control + L): | ||
 | ||
|
||
## 7 GRAVAÇÃO | ||
- Tools >> Programmer >> Start | ||
|
||
 | ||
|
||
## 8 Make - Procedimento Windows | ||
|
||
1 - Abril power shell como administrador e digitar: | ||
|
||
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) | ||
|
||
|
||
2 - choco install make | ||
|
||
3 - make --version | ||
|
||
GNU Make 4.4.1 | ||
Built for Windows32 | ||
Copyright (C) 1988-2023 Free Software Foundation, Inc. | ||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html> | ||
This is free software: you are free to change and redistribute it. | ||
There is NO WARRANTY, to the extent permitted by law. | ||
PS C:\Windows\system32> | ||
|
||
4 - make | ||
|
||
elvis@DESKTOP-FDIHVVJ MINGW64 ~/OneDrive/Documentos/projeto_final/riscv-multicycle-master/riscv-multicycle-master/software | ||
$ make | ||
../compiler/gcc/bin/riscv-none-embed-objcopy -O verilog blink.elf blink.tmp | ||
../compiler/gcc/bin/riscv-none-embed-objdump -h -S blink.elf > "blink.lss" | ||
python hex8tohex32.py blink.tmp > blink32.hex | ||
python hex8tointel.py blink.tmp > quartus_blink.hex | ||
rm blink32.hex | ||
|
||
 | ||
|
||
## 9 Video - YOUTUBE - Demonstração | ||
|
||
https://www.youtube.com/watch?v=rF7BGWolLLM | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
------------------------------------------------------------------- | ||
-- Name : bcd_to_7seg_pkg.vhd | ||
-- Author : Elvis Fernandes | ||
-- Version : 0.1 | ||
-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC | ||
-- Description : Tarefa 11: subprogramas | ||
-- Date : 11/07/2024 | ||
------------------------------------------------------------------- | ||
--Implemente um pacote que contenha a função especificada abaixo. | ||
--Desenvolva usando a simulação. | ||
--Sintetize e teste no kit DE10-Lite. | ||
--Analise a quantidade de hardware utilizado no resultado da síntese. | ||
--Escreva uma função que faz a conversão de 4-bits BCD para display de 7-segmentos (0 a 0xF). | ||
--Use um vetor (array) constante para definir a tabela. | ||
--Escreve outra função que recebe um número de 8-bits e converte para dois diplays de 7 segmentos. Use a função acima. | ||
--Teste utilizando 2 displays de 7 segmentos e um contador síncrono. | ||
------------------------------------------------------------------- | ||
|
||
library IEEE; | ||
use IEEE.STD_LOGIC_1164.ALL; | ||
use IEEE.NUMERIC_STD.ALL; | ||
|
||
package bcd_to_7seg_pkg is | ||
-- Tabela de conversão de BCD para display de 7 segmentos | ||
type seg_array is array (natural range 0 to 15) of std_logic_vector(7 downto 0); | ||
|
||
constant bcd_to_7seg_table : seg_array := | ||
(0 => "11000000", -- 0 | ||
1 => "11111001", -- 1 | ||
2 => "10100100", -- 2 | ||
3 => "10110000", -- 3 | ||
4 => "10011001", -- 4 | ||
5 => "10010010", -- 5 | ||
6 => "10000010", -- 6 | ||
7 => "11111000", -- 7 | ||
8 => "10000000", -- 8 | ||
9 => "10010000", -- 9 | ||
10 => "10001000", -- A | ||
11 => "10000011", -- B | ||
12 => "11000110", -- C | ||
13 => "10100001", -- D | ||
14 => "10000110", -- E | ||
15 => "10001110");-- F | ||
|
||
-- Função para converter um número BCD de 4 bits para um display de 7 segmentos | ||
function bcd_to_7seg(bcd_input : std_logic_vector(3 downto 0)) return std_logic_vector; | ||
|
||
-- Tamanho dos vetores de entrada e saída | ||
constant input_width : integer := 8; | ||
constant output_width : integer := 16; | ||
|
||
-- Tipos para os vetores de entrada e saída | ||
subtype input_vector is std_logic_vector(input_width - 1 downto 0); | ||
subtype output_vector is std_logic_vector(output_width - 1 downto 0); | ||
|
||
-- Função para converter um número de 8 bits para dois displays de 7 segmentos | ||
function convert_8bits_to_dual_7seg(input_value : input_vector) return output_vector; | ||
end bcd_to_7seg_pkg; | ||
|
||
package body bcd_to_7seg_pkg is | ||
-- Implementação da função para converter um número BCD de 4 bits para um display de 7 segmentos | ||
function bcd_to_7seg(bcd_input : std_logic_vector(3 downto 0)) return std_logic_vector is | ||
begin | ||
return bcd_to_7seg_table(to_integer(unsigned(bcd_input))); | ||
end function; | ||
|
||
-- Implementação da função para converter um número de 8 bits para dois displays de 7 segmentos | ||
function convert_8bits_to_dual_7seg(input_value : input_vector) return output_vector is | ||
variable result : output_vector; | ||
begin | ||
-- Converte os primeiros 4 bits para o primeiro display de 7 segmentos | ||
result(15 downto 8) := bcd_to_7seg(input_value(7 downto 4)); | ||
|
||
-- Converte os últimos 4 bits para o segundo display de 7 segmentos | ||
result(7 downto 0) := bcd_to_7seg(input_value(3 downto 0)); | ||
|
||
return result; | ||
end function; | ||
end bcd_to_7seg_pkg; |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.