Sunday 24 December 2017

Exemplo médio móvel vhdl


Tenho uma questão relacionada à média contínua do valor de ADCs. A abordagem que usei é a média contínua do exemplo 256 amostras. O valor adcaout (mostrado no código abaixo) que recebo na minha GUI aumenta lentamente. Como exemplo, se eu estou esperando o valor 100mA, minha GUI mostra 4mA, 8mA, 15mA. E, finalmente, depois de 2 minutos, consigo um valor de 100mA estável. Eu quero ver o 100mA diretamente na minha GUI de adcaout em vez de valores de incremento e estabilizar depois de algum tempo. Outra pergunta é que, eu posso de alguma forma tornar este processo rápido, de modo que eu não tenho que esperar por 3 minutos para receber 100 mA estável de adcaout. O clock clk no design digital abaixo é de 20 MHz. O relógio para receber valores ADC na placa FPGA é de 15 KHz. - o arquivo adc. vhd está abaixo: Seu código é modificado da seguinte forma: A saída final que estou exibindo na minha GUI é slvvalue1 e slvvalue2 Como sobre isso: na reinicialização (ou em qualquer outro momento, se desejar), atribua a Valor de data para todos os elementos em sua matriz de estágio. Isso deve definir instantaneamente sua média para o valor atual: o exemplo abaixo mostra o código completo para uma calculadora média móvel. Minha sugestão é que você estuda até você entender. Em seguida, tente usá-lo no seu projeto. Finalmente, e somente depois de ter um circuito básico funcionando, você pode mudá-lo para satisfazer suas restrições de projeto (largura de dados, número de amostras, intervalo de inteiros, uso de assinado versus inteiro, etc.). Finalmente, se você quiser usar O código acima para manter duas médias separadas para duas sinais distintas, simplesmente instanciar a entidade de média duas vezes: Editar: Como eu entendo dos seus comentários, você pode precisar de uma entrada extra para definir a média instantaneamente para o valor de entrada atual. Nesse caso, você pode usar uma entrada de carga como mostrado abaixo: respondido em 26 de novembro às 15: 45. Estou tentando escrever um módulo VHDL em média móvel (uniformemente ponderado) que usa FSMD (ata). Pelo que entendi, os estados necessários seria algo como buscar, dividir, produzir. Abaixo está o processo que escrevi, mas sinto que minha lógica está um pouco fora. Note-se que a média de dados Im é apenas uma matriz constante de números de 8 bits, então pensei que deveria ser bom usar um projeto não causal. Os dados têm 64 entradas e, no momento, a janela para a média é 4. Quão errado isso parece Alguns problemas que posso ver imediatamente: você não reinicia a temperatura em qualquer lugar. Você não tem nenhum limite de verificação de contagem (é um subtipo ou apenas um inteiro natural. O que acontece com o padrão (counti) quando você se aproxima do limite Como você rola) O seu loop for 0 é len - você tem certeza que você Não significou 0 para (len - 1) Uma vez que seu processo de decodificação do estado inteiro é sincronizado, você realmente não precisa de nstate. Note que você não está inicializando o cstate (mas você ainda está descodificando). Ou faça seu estado decodificar um processo combinacional separado ou simplesmente se livrar de nstate e atribuir diretamente ao cstate. Caso contrário, depende dos seus objetivos de design. Se você não se preocupa com a taxa de transferência, mas precisa ser executado em uma taxa de clock muito alta, você pode querer executar sua adição, seqüencialmente em vez de em paralelo, por exemplo. Respondeu 5 de setembro 14 às 13:32 obrigado, isso definitivamente faz as coisas melhor. Sobre o rollover do conteudo, não tenho certeza de como fazer isso porque, para cada padrão (contagem) até 63, eu quero exibir seu valor e a média da janela em torno dele. Então, se eu mudar de direção, não deve sair dos limites, mas não mostrará dados completos. Se eu estivesse fazendo uma implementação causal eu teria algum atraso no começo, é uma coisa semelhante que eu preciso aqui, mas no final do usuário ndash1710566 5 de setembro às 23:23 minha solução era: elsif (evento clk), então, se contar 64 Então conta lt 0 else calcula end if. And no loop for, eu coloco uma saída se count i for maior que 63. ndash user1710566 Set 6 14 at 0: 05VGA Interfacing and Control usando MENTOR GRAPHICS quotHDL DESIGNERquot Software e quotAltera DE1quot Development Board . (VEJA A MINHA PÁGINA DE1 DEVOTADA PARA O LINK ABAIXO) O Software usado neste tutorial é chamado quotHDL Designerquot por Mentor Graphics, juntamente com os vários programas complementares, como quotModelSimquot e quotPrecision Synthesisquot. Apenas para informar todos vocês antes de irmos mais longe. NÃO ESTOU dando os arquivos de código fonte VHDL completos para download. Se você é novo na programação VHDL, eu recomendo que você analise minha página quotVHDLquot como uma Introdução. No entanto, se você já está programando e entende VHDL até certo ponto, então pode ignorar a introdução e avançar. - Livro de texto de acompanhamento para este projeto - Um livro de texto altamente recomendado para este projeto é um dos dois livros mostrados Abaixo: QUOTRAPID PROTOTYPING DE SISTEMAS DIGITÁSquot Estes livros de texto específicos contêm algumas ótimas informações sobre a interface VGA e fornece alguns códigos Basic VHDL para criar um Controlador VGA. Eu recomendo que você compre um desses livros para ajudar a solidificar sua compreensão. Este Tutorial irá mostrar-lhe como programar o Altera DE1 Development Board, para produzir o controle VGA e os sinais de dados necessários para exibir gráficos a cores 2D em um monitor de computador VGA. Isso, por sua vez, permitirá que você produza um jogo de vídeo básico 2D PONG. Muitos jogos estilo VHDL PONG foram demonstrados online. Tal como este abaixo. Isso é semelhante ao que o seu projeto final parecerá uma vez concluído. No entanto, você pode adicionar mais recursos ao jogo se você tiver tempo para fazê-lo antes do final do semestre. Recursos adicionais podem ser adicionados ao seu Jogo para aqueles que desejam ir além do esboço deste Tutorial. Recursos como um quadro de classificação, limite de tempo, efeitos sonoros ou até mesmo uma interface de controle da barra de joystick para dois jogadores. Isso é definitivamente encorajado, pois ajudará a solidificar sua compreensão do código VHDL. Este Tutorial usa uma resolução de tela de (640 x 480) com uma taxa de atualização de tela de 60Hz. Se você quiser sair e tentar usar configurações de resolução mais alta, como (800 x 600), (1024 x 768) ou mesmo (1600 x 1200), então, por todos os meios, faça isso. Você definitivamente conseguiria alguns pontos de bônus importantes se você conseguir que ele funcionasse. Visite o link abaixo para obter uma lista dos vários requisitos de temporização do sinal VGA para diferentes configurações de resolução. Este tutorial pode ser facilmente aplicado a outras placas de desenvolvimento e outros pacotes de software VHDL. Boards como The Altera DE2, Altera UP1, UP2, CPLDT-2 e muito mais. Você pode até usar um programador universal para programar seu próprio CPLD ou FPGA. Existe também a opção de usar um programador de interface JTAG e conectá-lo a um FPGA compatível com JTAG. Isso permite que você use um programador JTAG de 15,00 como o Altera quotUSB-BLASTERquot para programar seu próprio CPLD ou FPGA da QuotO-Shelfquot. Enquanto a FPGA que você comprar suportar uma interface JTAG, então você pode conectá-la e simplesmente programá-la com o mesmo Software Lógico que você usa com o seu cartão de desenvolvimento DE1. Para uma explicação detalhada sobre a interface JTAG, Confira a minha Página de Interface QuotJTAG e o Vídeo de Instrução no link abaixo: preparei um conjunto de Vídeos de Instrução para este projeto para sua revisão. Os vídeos abordarão os conceitos necessários para você combinar 10 BLOCOS VHDL separados no HDL Designer, para produzir um jogo de vídeo estilo PONG no seu Altera DE1 Development Board. Você irá interface seu DE1 para um monitor VGA usando a porta VGA DB-15 de bordo. Agora, como este é um projeto TERMO popular para muitas faculdades e universidades. NÃO estarei fornecendo arquivos de código-fonte VHDL para você apenas baixar, copiar e colar em seu projeto e depois enviá-lo para o seu professor e obter uma viagem grátis para este projeto. Eu vou ter vários vídeos de instrução que irão sobre os conceitos fundamentais do projeto e também terei alguns quotARCHITECTUREquot geral e quotPROCESSquot exemplos para cada um dos 10 blocos VHDL. Dependerá de você aplicar o código de exemplo ao seu próprio projeto. Eu acredito que é importante que você escreva seu próprio código, execute simulações e veja como as coisas funcionam através do teste e do erro. Apenas lembra-te. Você consegue fazer isso. Tente escrever algum código VHDL você mesmo, execute simulações MultiSim e você verá o quão rápido você pode aprender. Então, novamente, NÃO ESTOU dando os arquivos de código fonte VHDL para download. Se você usa essa página e meus Vídeos de instrução como um guia, você fará tudo bem. ) Você consegue fazer isso. Agora, se eu respondesse os 100s de e-mails que todos me enviavam, pedindo ajuda com o seu código VHDL, não conseguiria encontrar tempo para trabalhar ou mesmo comer. ) Então, inscreva-se e pergunte todas as suas perguntas relacionadas ao VHDL no Fórum de Design Digital CPLDFPGA edaboard. Se precisar de alguma ajuda com o seu código VHDL ou outros projetos relacionados à engenharia. O fórum edaboard é o lugar certo. Você pode conversar com outros profissionais da indústria para ajudar a solucionar e solucionar seus problemas de codificação VHDL. A GUI baseada em seu fórum é equipada com quotCODEquot e quotCOMMENTquot formatação. Isso torna suas postagens da Mensagem muito claras e organizadas. Tendo suas postagens de mensagens claramente formatadas dessa forma, permite que outras pessoas o ajudem de forma mais eficiente e atempada. Então, este é um recurso fantástico e eu recomendo que você se junte. A interface VGA A interface VGA foi padronizada pela IBM em 1987 com requisitos de sinal para exibir imagens coloridas em um monitor de computador de tubo de raio catódico ou (CRT) para baixo. Quando os monitores LCD foram lançados mais tarde, eles adotaram o mesmo padrão de sinal VGA para funcionar com a infra-estrutura atual do computador no mundo. CRT - Cathode Ray Tube CRT amp LCD Diferenças CRT amp LCD - Diagrama de corte Portanto, os monitores LCD possuem um circuito de tradutor interno que converte sinais VGA para os sinais de controle de exibição de cristal líquido necessários. Isso acontece automaticamente dentro dos circuitos dos monitores LCD e funciona o mesmo para nós. Então não precisamos nos preocupar com isso. Foi bom para ir A interface VGA - Requisitos de sinal Basicamente, existem 5 requisitos de sinal separados para a interface VGA funcionar. Estes são sinais de controle de resolução do amplificador H-SYNC e V-SYNC e o vermelho. Sinais de exibição em cores VERDES e AZULES. O amplificador H-SYNC V-SYNC que você envia para o monitor, determina qual configuração de resolução você está tentando usar. Dependendo do monitor, ele só pode suportar uma resolução específica, onde outros monitores podem suportar mais de um. O Monitor armazena padrões de sinal de referência para todas as configurações de resolução disponíveis, dentro de um chip de memória EEPROM que faz parte dos circuitos internos dos monitores. Cada configuração de resolução requer um amplificador de H-SYNC específico V-SYNC Frequência de pulso e Ciclo de trabalho. Esses requisitos de sinal foram padronizados pela IBM. Usaremos o tamanho de resolução de tela mais antigo e mais pequeno disponível, já que a maioria dos monitores VGA o suportarão. Essa é a resolução VGA 640 x 480 com uma taxa de atualização de 60 Hz. As linhas de sinal de controle de cor VERMELHO, VERDE e AZUL, cada uma usam níveis de tensão analógica entre (0,0 a 0,7 Volts DC) para determinar a quantidade de intensidade de cor utilizada para cada Pixel. Como você sabe, todas as cores são compostas por misturar várias quantidades de VERMELHO, VERDE e AZUL em conjunto. Sinais de pulso V-SYNC da série H-SYNC Experimente visualizar os sinais H-SYNC e V-SYNC como QuotCOUNTERSquot personalizado que estão constantemente em execução e contando até o valor declarado MÁXIMO, redefinindo para zero e depois contando novamente. Toda vez que o contador H-SYNC volta a zero, o contador V-SYNC só é incrementado por 1. A imagem GIF animada mostrada abaixo mostra como os sinais V-SYNC do amplificador H-SYNC são usados ​​em conjunto para criar o Ciclo de atualização de tela. Quando você olha para esses sinais como contadores (X amp Y), eles essencialmente contam por cada Pixel na tela do canto superior esquerdo todo o caminho para baixo em seqüência para o canto inferior direito. Este processo se repete 60 vezes por segundo, devido ao fato de que estamos usando uma taxa de atualização de 60Hz. Os padrões de sinal H-SYNC e V-SYNC que enviamos ao monitor VGA, ao trabalhar em conjunto, criam o efeito de digitalização Zig-Zag como mostrado abaixo. Agora, dependendo da frequência, da largura do pulso e do ciclo de funcionamento desses padrões de sinal. Podemos criar diferentes configurações de resolução para o monitor exibir. Então, temos um padrão de sinal H-SYNC e V-SYNC específico para criar o ciclo de varredura Zig-Zag de uma resolução de tela de 640 X 480 e também temos outro padrão de sinal H-SYNC e V-SYNC para uma tela de 1600 X 1200 Resolução, e muito mais. A imagem acima está realmente mostrando o que é chamado de quadros entrelaçados. Você realmente não precisa se preocupar com isso agora, pois não estamos usando esse formato específico. A imagem animada é usada principalmente para mostrar o conceito básico de uma tela quotRefresh Cyclequot. Agora, o fato de que estamos usando uma configuração de resolução de (640 x 480), isso significa que temos 640 Pixels que correm do lado esquerdo da nossa tela para o lado direito. Isso também significa que nós temos 480 Pixels que correm da parte superior da tela para o fundo. Em outras palavras, o que temos aqui é uma matriz de 640 X 480 Pixel. Você pode considerar o canto superior esquerdo da tela como o ponto de partida para os contadores H-SYNC e V-SYNC começando em Zero. O contador H-SYNC passa a incrementar através de todos os 640 pixels na primeira linha horizontal da esquerda para a direita. Uma vez que ele chega ao final da linha, ele é reiniciado para o início. No entanto, desta vez, ele também se move para baixo por um pixel para a próxima linha e incrementa o contador V-SYNC em 1. Esse processo é repetido até o contador V-SYNC contabilizar para 479, o que o traz para a última linha na parte inferior de a tela. Então, quando o contador H-SYNC atinge o último pixel no canto inferior direito da tela (639), os contadores H-SYNC e V-SYNC são redefinidos para zero. Isso nos traz de volta ao pixel do canto superior esquerdo e todo o processo de contagem começa tudo de novo. Uma passagem única na tela inteira é chamada quotScreen Refresh Cyclequot e isso é repetido 60 vezes por segundo para atualizar a tela e atualizar cada pixel para uma determinada cor. E, por sua vez, isso produz uma imagem na tela. Reveja a imagem GIF animada acima para obter uma melhor compreensão deste processo de atualização do quotScreen em ação. - Visão geral do nosso circuito VHDL de 10 blocos - - BLOCOS VHDL - Exemplos de arquitetura - Abaixo, forneci alguns exemplos de VHDL quotArchitecturequot e quotPROCESSquot semelhantes ao que você precisaria para cada um dos 10 blocos VHDL para executar sua função específica. Depende de você descobrir como aplicar o código ao seu próprio projeto e gerar os sinais que você precisa. VHDL BLOCK 1 - O Divisor do Relógio O divisor do relógio deve ser um instante para você descobrir, então nenhuma necessidade real de um exemplo. Para o nosso projeto VGA, precisamos de um sinal CLOCK de 25.175 MHz. 25 MHz no nosso caso está bem. Nós conseguimos isso dividindo a placa DE1 com um sinal de 50Mhz no meio. Para simulações MultiSim: Para uma configuração CLOCK de 50MHz use um período de clock de 20ns. Para uma configuração de RELÓGIO de 25MHz use um período de relógio de 40ns. VHDL BLOCK 2 amp 3 - Um típico exemplo do contador MOD (meu contador MOD25 com uma linha de redefinição de energia e um relógio de 25 MHz) Exemplo único do contador MOD Se você tiver problemas para que os pulsos do controlador VGA funcionem corretamente, tente alterar o estado de reinicialização Dos contadores MOD. Experimente estes valores contadores abaixo e execute algumas simulações. MOD-800 Contas de 0 a 793 MOD-525 Contagens de 0 a 522 VHDL BLOCK 4 amp. 5 - O amplificador horizontal Dispositivo de decodificação vertical de estado (MOMENTARY PULSES PARA LINHAS DE SAÍDA) Esteja ciente de que esta máquina de estado VHDL particular criará apenas lógica momentânea alta Pulsa em suas saídas. As linhas STATE de saída permanecerão HIGH por apenas 1 Clock Pulse, com base na fonte CLK de entrada usada para este bloco VHDL particular. (As saídas STATE precisam ser alimentadas em um circuito quotLatchquot para ser mantido ALTO durante um período de tempo.) Exemplo de máquina de estado único Acima estão alguns exemplos de vários legumes de estado de contador. Na captura de tela mostrada acima, preste muita atenção à diferença de tempo entre os dois marcadores e como eles se relacionam com os outros estados mostrados. O amplificador horizontal Vertical quotSYNCquot amp quotDISPLAYTIMEquot Signals (LATCH CIRCUIT STATE MACHINES COMO SE APRESIONA ABAIXO) - Quota horizontal SYNCquot Signal Timing Waveforms - No quotSIGNAL TIMINGquot Diagramas que se seguem, eles mostram o Horizontal amp Vertical quotSYNCquot Pulses e também Horizontal e Vertical quotDISLAYTIMEquot Pulses. Esses padrões de formas de onda ocorrem em uma seqüência de repetição e eu indiquei os pontos de partida e de parada desse padrão de repetição. Eu também incluí os estados H-DECODER e V-DECODER Momentaty HIGH PULSE, em relação ao padrão da forma de onda em questão. - Horizontal quotDISPLAYTIMEquot Signal Waveforms - - Vertical quotSYNCquot Signal Waveforms - - Vertical quotDISPLAYTIMEquot Signal Waveforms - (LATCH CIRCUIT STATE MACHINES) O código VHDL abaixo é um exemplo de um circuito de trava que irá ativar um sinal de saída para permanecer HIGH ou LOW para qualquer comprimento De tempo até que a saída em questão seja atribuída para mudar seu estado (LATCH RESET). Os pulsos de entrada são usados ​​como disparadores para iniciar qualquer alteração. Este é essencialmente o tipo de circuito que você precisa implementar para cada um dos sinais, conforme mostrado nos diagramas de formas de onda acima. Exibindo Objetos na Tela Agora, as coisas ficam um pouco mais complicadas aqui. Eu terei alguns exemplos de QUOTDISPLAY PROCESSquot para guiá-lo ao longo do caminho, no entanto, cabe a você descobrir como adicionar os controles do Movimento aos seus objetos. ) A melhor maneira de entender como objetos coloridos básicos são exibidos na tela é como Seguir: Tente olhar para o Horz. E Vert. Contadores MOD, mais como um sistema de coordenadas 2D (X amp Y) em um Mapa. Então imagine nosso Horz. E Vert. Os contadores MOD como as coordenadas da posição X amp Y para uma lanterna que está digitalizando a tela. Esta lanterna está verificando etiquetas em cada pixel que aparece. As etiquetas indicam qual cor que Pixel particular deve exibir. Vermelho, Verde ou Azul, ou qualquer combinação dos três. A maneira como fazemos isso no VHDL é usar um conjunto adicional de vetores stdlog ou (COUNTERS) exatamente como usado para gerar os sinais H-SYNC e V-SYNC. Os pares de contadores tornam-se as coordenadas de referência (X amp Y) para cada objeto individual que exibimos na tela. Isso significa que precisamos de um par de contadores (X amp Y), para cada objeto separado que temos na tela. Então, como nosso Horz. E Vert. Os contadores MOD estão em execução no ciclo de atualização de tela, se, em qualquer ponto, os contadores tiverem exatamente as mesmas coordenadas X e Y como um dos pares de contadores Novos (X amp.). (YREFERENCECOUNTER V-COUNTER. QuotANDquot. XREFERENCECOUNTER H-COUNTER) então podemos usar essa condição para ativar as linhas RGB para começar a exibir uma determinada cor. EU REPITO. QuotSTARTINGquot das coordenadas (X amp Y). Isso significa que você DEVE ADICIONAR o número de pixels (X amp Y) para o objeto que deseja exibir, na Declaração mostrada acima. Porque, essencialmente, você simplesmente disse ao sistema para começar a pintar as cores, mas na verdade não é o caminho certo. UPDOWNLEFTRIGHT ou mesmo onde parar. (YREFERENCECOUNTER V-COUNTER. QuotANDquot. XREFERENCECOUNTER H-COUNTER size) Ainda há um pouco mais disso, então reveja o quotDISPLAY PROCESSquot exemplos que forneci abaixo e veja se você consegue descobrir. ) QuotBALLquot Display PROCESSO Exemplo - VHDL Block 7 quadPADDLE 1quot Display PROCESSO Exemplo - VHDL Block 8 amp 9 Também revise as páginas 208 e 209 do Acompanhamento de livros de texto que mencionei anteriormente. Abaixo estão 2 quotPROCESSquot exemplos que podem dar-lhe algumas idéias para obter uma Ball saltando na tela. Revise os dois exemplos, tente o código, manipule-o, altere-o com suas próprias idéias. Tente coisas diferentes e veja se você pode obter uma bola para exibir e saltar na tela. Agora, para obter as colisões de bola trabalhando com as pás. Isso pode revelar-se mais desafiante. Esperemos que estes exemplos de quotPROCESSquot ajudarão você a começar e a pensar em melhores maneiras de escrever seu próprio código VHDL. (VIDEO PARTE 4 - PARA SER PUBLICADO) NOTAS ADICIONAIS RELATIVAS À COISAS DE BOLA: Os detalhes abaixo sobre colisões de remo podem ser um pouco demais para a maioria de vocês. No entanto, se você é um perfeccionista e está ficando realmente frustrado porque as colisões de bola com suas pás não estão se comportando do jeito que você deseja. Você pode querer ler os detalhes mostrados abaixo: é importante perceber que não importa qual direção a bola está viajando, UP, DOWN ou em um Angle as condições que você aplica a cada paddle para uma Ball Collision, cada condição causará o mesmo Resposta, independentemente do lado em que a bola colide na pá. Isso ocorre porque é um objeto único. As condições de colisão para cada paddle são baseadas em seu par de contatos XampY. Para ter diferentes respostas de colisão para cada um dos 4 lados, você, por sua vez, precisa de 4 pares de contadores separados ou 4 lados separados que compõem uma pá. O quotRGBquot Concatenation amp Display Block Este bloco é simplesmente um grupo de quotANDquot gates que se juntam ou quotCONCATENATEquot todas as cores RGB em uma saída MASTER RGB. Então, você possui essencialmente um portão de entrada múltipla QQ para cada uma das cores RGB individuais. Um para todas as cores VERMELHAS, um para todo o VERDE e um para todos os AZULES. Finalmente, esta saída MASTER RGB só pode estar ativa durante o tempo de exibição horizontal QUOTANDquot o tempo de exibição vertical. Por outro lado, outro portador QUOTANDquot é usado, ative a saída MASTER RGB. Somente quando H-DISPAYTIME amp V-DISPLAYTIME estiver em um estado Logic HIGH. Altera DE1 Board - As linhas RGB não utilizadas devem estar ligadas ao GND. É importante certificar-se de que liga todas as linhas de entrada RGB não utilizadas ao GND. Como isso às vezes pode causar os sinais não conectados ao Float, produzindo interferências e ruídos em seu monitor VGA. Bem, isso resume as pessoas. ) Espero que este Tutorial, pelo menos, fique um pouco mais próximo da finalização dos seus Projetos VHDL PONG

No comments:

Post a Comment