TRABALHO DE LABORATÓRIO V PROJECTO DE UM SISTEMA DE FECHADURA ELECTRÓNICA 1. INTRODUÇÃO Pretende-se com este trabalho que os alunos projectem um sistema de fechadura electrónica. Este trabalho é considerado para avaliação de conhecimentos. No início da aula, cada grupo deverá impreterivelmente mostrar ao docente a resposta a todas as questões referidas na secção 2 e na secção 3. Deverá realizar todo o trabalho em casa, usando a aula de laboratório apenas para testar o circuito na placa de prototipagem. 1. ESPECIFICAÇÃO DO SISTEMA DE FECHADURA ELECTRÓNICA Pretende-se implementar um circuito sequencial básico que implemente um sistema de fechadura electrónica. O circuito global deverá ter a seguinte interface de entrada/saída: Entradas Password Enter Palavra-passe, que consiste num número entre 0 e 15. Finaliza a introdução da palavrapasse. Saídas CONFIG INTRO_PASS Indica que o circuito se encontra em modo de introdução de nova palavra-passe. Durante o modo de introdução de nova palavra-passe, indica que o utilizador deve introduzir esta última. Close Tranca a fechadura. WRONG_PASS Indica que a palavra-passe introduzida está errada. NewCode Inicia o processo de configuração de nova palavra-passe na fechadura. LOCK_OPENED Indica se a fechadura está aberta ou fechada. 1 P á g i n a
Relativamente ao circuito de controlo em particular, sugere-se a seguinte interface: Entradas PasswordOK Enter Indica se a password introduzida é igual à armazenada no circuito de dados. Finaliza a introdução da palavrapasse. Saídas CONFIG INTRO_PASS Indica que o circuito se encontra em modo de introdução de nova palavra-passe. Durante o modo de introdução de nova palavra-passe, indica que o utilizador deve introduzir esta última. Close Tranca a fechadura. ACT_TIMER Despoleta o temporizador associado à introdução de palavra-passe errada. NewCode Inicia o processo de configuração de nova palavra-passe na fechadura. TimerExpired Indica que o temporizador associado à introdução de palavra-passe errada expirou. LOAD_PASS Carrega o valor da nova palavrapasse no circuito de dados. WRONG_PASS Indica que a palavra-passe introduzida está errada. LOCK_OPENED Indica se a fechadura está aberta ou fechada. O funcionamento da fechadura electrónica obedece ainda aos seguintes requisitos: Assumindo que a fechadura está fechada, um utilizador que queira entrar, introduz o código utilizando botões on/off, seguido de Enter, estando atribuído um botão por dígito binário da palavrapasse. Uma vez introduzida a palavra-passe, o sistema compara-a com a palavra-passe configurada na fechadura. Se forem iguais, a fechadura é aberta através da activação de LOCK_OPENED. Se forem diferentes, o sistema indica este facto através da activação de WRONG_PASS, iniciando um temporizador de 12.5s, durante o qual as entradas da fechadura estão inibidas; uma vez expirado o temporizador, o sistema volta ao estado inicial. Uma vez aberta, o sistema volta a fechar a fechadura quando detecta que o sinal Close está activo. Para configurar uma nova palavra-passe na fechadura, assumindo que a fechadura está fechada, activa-se o sinal NewCode, passando o sistema ao modo de configuração (indicado pela activação de CONFIG). O sistema aguarda então a introdução da palavra-passe anterior. Se estiver correcta, o sistema aguarda a introdução da nova palavra-passe, activando INTRO_PASS; após a introdução da nova palavra-passe, o sistema faz com que seja memorizada no circuito de dados e volta ao estado inicial. Por outro lado, se a palavra-passe anterior que foi introduzida estiver errada, o sistema indica este facto através da activação de WRONG_PASS, iniciando um temporizador de 12.5s, durante o qual as entradas da fechadura estão inibidas; uma vez expirado o temporizador, o sistema volta ao estado inicial. O armazenamento e verificação da palavra-passe da fechadura são feitos no circuito de dados. O sistema recebe dois relógios do exterior, um para o sistema global e outro para o temporizador: 55 MHz e 0,8 H, respectivamente. O sistema tem que garantir que não há funcionamento incorrecto, mesmo que tenha ido parar a estados não especificados. 2 P á g i n a
Uma especificação nunca é completa. Podem existir partes do comportamento do sistema que não estão indicadas explicitamente (ou que podem ser facilmente melhoradas). Nesses casos, tome as decisões que julgar mais razoáveis e justifique-as no relatório. 1. PROJECTO DA MÁQUINA DE ESTADOS 1.1. Apresente o fluxograma correspondente ao funcionamento do circuito de controlo da fechadura electrónica. Implemente o armazenamento e verificação da palavra-passe como um circuito de dados à parte do circuito de controlo. O circuito que implementa o temporizador também deve ser considerado à parte da máquina de estados de controlo. 1.2. Identifique, justificadamente o tipo de máquina de estados do circuito de controlo (Moore vs Mealy). 1.3. Apresente duas codificações possíveis para os estados, correspondentes: (i) codificação binária (ver abaixo restrição para o código do estado inicial) e (ii) codificação one-hot. Indique quais as vantagens e desvantagens de cada caso numa implementação baseada em micro-programação. Tendo isto em conta, escolha a codificação a utilizar para a realização do trabalho de laboratório. Nota: na codificação binária, o código a utilizar para o estado inicial é igual a N1+N2 mod 6, em que N1 e N2 são os números mecanográficos dos membros do grupo. O estado inicial corresponde à situação em que a porta está fechada e nenhum comando foi introduzido pelo utilizador. 1.4. Apresente a tabela de transição de estados. Para minimizar o número de linhas na tabela, pode utilizar o símbolo X (don t care) sempre que uma entrada for irrelevante para a determinação da transição de estado. 1.5. Considere a implementação da lógica combinatória da máquina de estados através de um elemento de memória (i.e., através de micro-programação). i. Indique, justificando, o tipo de arquitectura micro-programada que elegeu para esta implementação. ii. Indique (teoricamente) como utilizar o elemento de memória. Indique ainda qual a dimensão da memória (número de endereços, número de bits por entrada e número total de bits), assim como o seu conteúdo. iii. Implemente a lógica combinatória da máquina de estados do circuito de controlo usando um elemento de memória no Xilinx ISE e simule o seu funcionamento (estado e saídas). Para realizar esta alínea consulte o anexo A. 1.6. Implemente o circuito de dados que gere o armazenamento e verificação da palavra-passe e o circuito que gere o temporizador utilizando a lógica adicional que achar conveniente: i. Apresente o diagrama lógico dos circuitos resultantes; justifique adequadamente como chegou aos circuitos. ii. Implemente esses circuitos no Xilinx ISE e simule o seu funcionamento. 1.7. Integre a máquina de estados com os circuitos de dados e simule o funcionamento da fechadura electrónica completa. Para efeitos de simulação, utilize um só relógio como base (o de sistema) e considere que o relógio do temporizador tem um período cinco vezes superior àquele. 3 P á g i n a
2. REALIZAÇÃO DO SISTEMA Assume-se que os alunos já simularam exaustivamente e com sucesso os circuitos desenvolvidos na alínea 2. Assume-se também que os alunos trazem o projecto (como todos os ficheiros auxiliares do Xilinx ISE e não o esquemático somente) Xilinx ISE dos circuitos da alínea 2 numa USB flash drive ou disco externo USB, incluindo o ficheiro.bit. 2.1. Integre a fechadura electrónica completa no ficheiro sd.sch utilizando os sinais slow_clock e fast_clock como sinais de relógio, da forma que achar mais adequada. Ligue os sinais de entrada da seguinte forma: Botões de Pressão: 0-Enter 1-Close 2-NewCode Botões on/off: 0,1,2,3 Password Coloque os sinais da máquina de estados nos LEDs pela ordem seguinte, da esquerda para a direita: CONFIG, INTRO_PASS, ACT_TIMER, LOAD_PASS, WRONG_PASS, LOCK_OPENED, PasswordOK, TimerExpired. Coloque o valor da palavra-passe configurada e o valor actual da contagem do temporizador (medida em ciclos de relógio de temporizador) no display de 7 segmentos. 2.2. Teste o circuito na placa de desenvolvimento. 3. AVALIAÇÃO DO TRABALHO DE LABORATÓRIO NA AVALIAÇÃO DO TRABALHO DE LABORATÓRIO SERÃO TIDOS EM CONTA OS SEGUINTES COMPONENTES: Projecto e implementação do circuito (alíneas 2.1, 2.4, 2.5, 2.6 e 2.7). Questões teóricas relacionados com a máquina de estados (alíneas 2.2 e 2.3). Implementação e integração das funcionalidades (alínea 3.1 e 3.2): o Funcionamento geral do circuito. o Resposta célere das entradas. o Saídas a funcionar correctamente. Estrutura, apresentação e qualidade do relatório. Em cada uma das alíneas anteriores de projecto serão tomados em consideração os seguintes pontos, os quais deverão ser esclarecidos no relatório a entregar: Descrição de como foi efectuado o projecto dos diversos circuitos Simplicidade e eficiência das soluções Diagrama lógico dos circuitos Simulações que comprovem o funcionamento dos circuitos Funcionamento dos circuitos na placa de desenvolvimento O relatório deverá seguir a seguinte estrutura: 1. INTRODUÇÃO Breve introdução aos objectivos do trabalho realizado. 2. PROJECTO DO CIRCUITO COMPLETO Visão de conjunto do projecto. 3. PROJECTO DO CIRCUITO DE CONTROLO 4 P á g i n a
Respostas às alíneas 2.1, 2.2, 2.3, 2.4 e 2.5. 4. PROJECTO DO CIRCUITO DE DADOS Resposta às alínea 2.6. 5. INTEGRAÇÃO DAS FUNCIONALIDADES NO CIRCUITO GLOBAL Integração e correcto funcionamento das funcionalidades do circuito, validadas na placa de desenvolvimento e através das simulações que achar adequadas. 6. CONCLUSÕES Comentário acerca do trabalho realizado e dos resultados obtidos experimentalmente. 5 P á g i n a
ANEXO A DESCRIÇÃO DE MEMÓRIAS NO XILINX ISE Deverá adicionar ao projecto um elemento de memória (ficheiro my_mem.vhd). O ficheiro originalmente disponibilizado descreve em VHDL uma memória com 64 palavras (6 bits de endereço), em que cada palavra é composta por 16 bits de dados. Para utilizar esta memória deverá editar o seu conteúdo fazendo duplo click no ficheiro dentro do Xilinx ISE. Aparecerá um editor de texto onde poderá definir o conteúdo de memória (tenha sempre atenção para não alterar o formato do ficheiro). Deverá proceder às seguintes alterações: 1. Indicar nas linhas 34 e 35 o número de bits de endereço da memória e o correspondente número de entradas na memória. No ficheiro original assume-se 6 bits de endereço correspondentes a 64 posições de memória: LINHA 34: address : in std_logic_vector(5 downto 0) LINHA 41: type ram_type is array (0 to 63) of 2. Alterar as linhas 35 e 42, de forma a indicar o tamanho da palavra de dados. No ficheiro original assume-se palavras de 16 bits LINHA 35: data_out : out std_logic_vector(15 downto 0) LINHA 42: std_logic_vector(15 downto 0); 3. Preencher as linhas 41 a 46, adicionando mais linhas se necessário, de forma a indicar o conteúdo da memória. O formato do ficheiro é: <posição> => <dados>, onde <posição> é um número (em decimal) que indica a posição de memória e <dados> é um número (em binário), representado entre aspas, que indica o conteúdo da posição de memória. Por exemplo, a linha 7 => "0000010100110111", -- bit mais significativo à esquerda indica que o conteúdo da posição de memória 7, M[7], é o número 0000010100110111 (2). Utilize sempre que necessário o sinal -- para escrever comentários. 4. Verificar se o ficheiro após alterações contém algum erro de sintaxe e corrigir se necessário. 5. Criar o símbolo correspondente ao elemento de memória. 6. Substituir a lógica combinatória da máquina de estados pelo bloco de memória (poderá necessitar de lógica residual). Ficheiro: my_mem.vhd, linhas 34-35, 38-46 32: entity my_mem is 33: Port ( 34: address : in std_logic_vector(5 downto 0); -- bits de endereço 35: data_out : out std_logic_vector(15 downto 0) -- dimensão da palavra de dados 36: ); 37: end my_mem;... 41: type ram_type is array (0 to 63) of -- indicar o número de posições de memória 42: std_logic_vector(15 downto 0); -- indicar a dimensão da palavra de dados 43: constant InitValue: ram_type := ( 44: 0 => "0000000000000000", -- posição de memória 0 45: 1 => "0000000000000000", -- posição de memória 1 46: 2 => "0000000000000000", --... 47: 3 => "0000000000000000", -- 48: 4 => "0000000000000000", -- posição 4... adicionar linhas até ao máximo de 255 49: others => "0000000000000000" -- outras posições não indicadas anteriormente 50: );... 6 P á g i n a