Saturday, 25 November 2017

Vhdl Moving Average Example


Estou tentando escrever um VHDL movendo média (uniformemente ponderada) módulo que usa FSMD (ata). Pelo que eu entendo, os estados necessários seriam algo como buscar, dividir, produzir. Abaixo está o processo que eu escrevi, mas eu sinto como minha lógica é um pouco fora. Observe que a média de dados Im é apenas uma matriz constante de números de 8 bits, então eu pensei que deveria ser bom usar um design não-causal. Os dados têm 64 entradas, e no momento a janela para a média é 4. Como errado faz este olhar Alguns problemas que eu posso ver imediatamente: Você não reinicializar temp em qualquer lugar. Você não tem nenhuma verificação do limite para a contagem (é um subtype ou apenas um natural / inteiro O que acontece com o teste padrão (counti) quando você aproxima o limite Como você rola sobre) Seu para-laço é 0 a len - você é certo Você não quis dizer 0 para (len - 1) Uma vez que todo o seu processo de decodificação de estado é clocked, você realmente não precisa nstate em tudo. Observe que você nem está inicializando o cstate (mas ainda está decodificando). Faça seu estado decodificar um processo combinacional separado ou simplesmente se livrar de nstate e atribuir a cstate diretamente. Caso contrário, depende de seus objetivos de design. Se você não se preocupa com a taxa de transferência, mas precisa executar em uma taxa de clock muito alta, você pode querer executar a sua adição sequencialmente, em vez de em paralelo, por exemplo. Obrigado, que definitivamente faz as coisas melhorarem. Sobre a rolagem de contagem, I39m não tenho certeza realmente como fazê-lo porque para cada padrão (contagem) até 63, eu quero exibir seu valor ea média da janela em torno dele. Por isso, se eu rollover no coun-len, ele shouldn39t sair de limites, mas não vai mostrar dados completos. Se eu estava fazendo uma implementação causal eu teria algum atraso no início, é uma coisa semelhante que eu preciso aqui, mas no final ndash user1710566 Sep 5 14 at 23:23 minha solução foi: elsif (clk evento), em seguida, se contar 64 Então contagem lt 0 else calcular final se. E no loop for coloquei uma saída se contagem i foi maior do que 63. ndash user1710566 Sep 6 14 at 0: 05Eu tenho uma pergunta relacionada com a média contínua de ADCs valor. A abordagem que eu usei é média contínua de exemplo 256 amostras. O valor adcaout (mostrado no código abaixo) que recebo na minha GUI aumenta lentamente. Como um exemplo, se eu estou esperando valor 100mA, My GUI mostra 4mA, 8mA, 15mA. E depois, finalmente, depois de 2 minutos eu obter um valor estável 100mA. Eu quero ver o 100mA diretamente em minha GUI de adcaout em vez de valores de incremento e estabilizar depois de algum tempo. Outra pergunta é que, posso de alguma forma fazer este processo rápido para que eu não tenho que esperar por 3 minutos para receber estável 100 mA de adcaout. O clock clk no desenho 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 eu estou vendo na minha GUI é slvvalue1 e slvvalue2 Como sobre isso: em reset (ou em qualquer outro momento se você quiser), atribua o Datain valor para todos os elementos em você palco matriz. Isso deve definir instantaneamente sua média para o valor atual: O exemplo abaixo mostra o código completo para uma calculadora de média móvel. Minha sugestão é que você estuda até que você entenda. Em seguida, tente usá-lo em seu projeto. Finalmente, e somente depois que você tiver um circuito básico funcionando, você pode alterá-lo para satisfazer suas restrições de design (largura de dados, número de amostras, intervalo de inteiros, uso de assinado contra inteiro etc.) Finalmente, se você quiser usar O código acima para manter duas médias separadas para dois sinais distintos, basta instanciar a entidade de média duas vezes: Edit: Como eu entendo de 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: answer 26 nov 13 at 15: 45VGA Interfacing and Control usando MENTOR GRAPHICS quotHDL DESIGNERquot Software eo quotAltaDe1quot Development Board. (VEJA A MINHA PÁGINA DE1 DEVOTADA NA LINK ABAIXO) O Software usado neste tutorial é chamado de Designer HPD por Mentor Graphics, juntamente com os vários programas complementares, como quotModelSimquot e quotPrecision Synthesisquot. Apenas para informar a todos antes de irmos mais longe. Eu NÃO vou estar fornecendo os arquivos de código fonte completo do VHDL para download. Se você é novo na programação VHDL, eu recomendo que você reveja minha página quotVHDLquot como uma Introdução. No entanto, se você já está programando e entender VHDL em algum grau, então você pode pular a Intro e seguir em frente. - Livro de texto complementar para este projeto - Um livro de texto altamente recomendado para este projeto é um dos dois livros mostrados abaixo: PROTOCOLO DE PROTEÇÃO DOS SISTEMAS DIGITAL Estes livros particulares contêm algumas informações sobre a interface VGA e fornece alguns do código Basic VHDL para criar um Controlador VGA. Eu altamente recomendável que você compra um desses livros para ajudar a solidificar a sua compreensão. Este Tutorial irá mostrar-lhe como programar o Altera DE1 Development Board, para produzir o controle VGA necessário e sinais de dados para exibir gráficos em cores 2D em um monitor de computador VGA. Isso, por sua vez, permitirá que você produza um jogo de vídeo 2D PONG estilo básico. Muitos jogos estilo VHDL PONG foram demonstrados on-line. Tal como este abaixo. Isso é semelhante ao que seu projeto final será semelhante ao concluído. No entanto, você pode adicionar mais recursos ao jogo se tiver tempo para fazê-lo antes do final do semestre. Recursos adicionais podem ser adicionados ao seu Jogo para aqueles de vocês que desejam ir além do esboço deste Tutorial. Recursos como um Score Board, Limite de Tempo, Efeitos Sonoros, ou até mesmo uma Joystick / Game Pad Control Interface para dois jogadores. Isso é definitivamente incentivado, pois ajudará a solidificar a 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 ir tudo para fora e tentar usar configurações de alta resolução, como (800 x 600), (1024 x 768) ou mesmo (1600 x 1200), então por todos os meios fazê-lo. Você estaria definitivamente acima para alguns pontos principais do bônus se você puder o começar trabalhar. Visite o link abaixo para obter uma lista dos vários requisitos de tempo de 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 o Altera DE2, Altera UP1, UP2, CPLDT-2 e muitos mais. Você pode até usar um programador universal para programar seu próprio CPLD ou FPGA. Há também a opção de usar um JTAG interface Programador e fiação-se a si mesmo para um JTAG compatível FPGA. Isso permite que você use um programador 15.00 JTAG como o Altera quotUSB-BLASTERquot para programar o seu próprio quot Off-the-Shelfquot CPLD ou FPGA. Enquanto o FPGA que você compra suporta uma interface JTAG, então você pode ligá-lo você mesmo e simplesmente Programa-lo com o mesmo Software Logic que você usa com o seu DE1 desenvolvimento bordo. Para obter uma explicação detalhada sobre a interface JTAG, confira a minha página de Interface QuotJTAG e Vídeo Instruccional no Link Abaixo: Eu preparei um conjunto de Vídeos de Instrução para este projeto para sua revisão. Os vídeos irão cobrir os conceitos necessários para você combinar 10 VHDL BLOCKs separados no HDL Designer, para produzir um PONG Style Video Game em seu Altera DE1 Development Board. Você irá Interface seu DE1 para um monitor VGA usando a porta DBGA-15 VGA. Agora, como este é um projeto popular TERM para muitas faculdades e universidades. Eu não vou fornecer arquivos de código fonte VHDL para você apenas baixar, copiar e colar em seu projeto e, em seguida, submetê-lo ao seu professor e obter um passeio livre para este projeto. Vou ter vários vídeos de instrução que irão sobre os conceitos fundamentais do projeto e eu também terá alguns VHDL quotARCHITECTUREquot geral e quotPROCESSquot exemplos para cada um dos 10 blocos VHDL. Cabe a você aplicar o código de exemplo ao seu próprio projeto. Eu acredito que é importante que você escrever o seu próprio código, executar simulações e ver como as coisas funcionam através de teste e erro. Apenas lembra-te. Você consegue fazer isso. Tente escrever algum código VHDL mesmo, execute simulações MultiSim e você verá como rapidamente você pode aprender. Então, novamente, eu não vou estar dando os arquivos de código fonte VHDL para download. Se você usar esta página da web e meus vídeos de instrução como um guia, você fará muito bem. ) Você consegue fazer isso. Agora, se eu respondesse ao 100s de e-mails que todos me enviam, pedindo ajuda com o seu código VHDL, eu não seria capaz de encontrar o tempo para trabalhar ou mesmo comer. ) Então, por favor Registre-se, e pergunte a todas as suas perguntas relacionadas ao VHDL no fórum de design digital CPLD / FPGA edaboard. Se você precisar de alguma ajuda com seu código VHDL ou outros projetos relacionados a Engenharia. O fórum edaboard é o lugar para ir. Você pode conversar com outros profissionais do setor para ajudar a solucionar problemas e resolver seus problemas de codificação VHDL. Sua GUI baseada em web do Fórum é equipada com quotCODEquot e quotCOMMENTquot formatação. Isso torna a mensagem muito clara e organizada. Ter suas mensagens de mensagens claramente formatadas desta forma, permite que outras pessoas para ajudá-lo de forma mais eficiente e em tempo hábil. 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 raios catódicos (CRT) para breve. Quando os monitores LCD foram liberados mais tarde, eles adotaram o mesmo padrão de sinal VGA, a fim de funcionar com a atual infra-estrutura de computador no mundo. Os monitores LCD têm um circuito interno de conversor que converte sinais VGA para os sinais de controle de display de cristal líquido necessários. Tudo isto acontece automaticamente dentro dos circuitos de monitores LCD e funciona da mesma forma para nós. Então não temos que nos preocupar com isso. Era bom para ir A interface VGA - requisitos de sinal Basicamente, existem 5 requisitos de sinal separado para a interface VGA para funcionar. Estes são sinais de controle de resolução de V-SYNC de amplificação em H-SYNC e o RED. VERDE e AZUL sinais de exibição em cores. Os sinais de V-SYNC de sintetização de H-SYNC que você envia para o monitor, determinam qual definição de Resolução você está tentando usar. Dependendo do monitor, ele pode apenas 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 uma largura de pulso de freqüência específica de amplificação de V-SYNC de H-SYNC e Ciclo de trabalho. Esses requisitos de sinal foram padronizados pela IBM. Estaremos usando o tamanho de resolução de tela mais antigo e menor disponível, já que a maioria dos monitores VGA irá suportá-lo. Essa é a resolução VGA 640 x 480 com uma taxa de atualização de 60Hz. As linhas de sinal de controlo de cor VERMELHO, VERDE e AZUL, utilizam níveis de tensão analógica entre (0,0 a 0,7 Volts DC) para determinar a intensidade de cor utilizada para cada pixel. Como você sabe, todas as cores são feitas a partir de misturar várias quantidades de vermelho, verde e azul juntos. Sinais H-SYNC V-SYNC Sinais de Pulso Experimente ver os sinais H-SYNC e V-SYNC como Custom quotCOUNTERSquot que estão constantemente em execução e contando até o valor máximo declarado, redefinindo para zero e depois contando novamente. Cada vez que o contador H-SYNC é redefinido, o contador V-SYNC é incrementado apenas em 1. A imagem GIF animada mostrada abaixo mostra como os sinais de V-SYNC de H-SYNC são usados ​​juntos para criar o Ciclo de Refresh de Tela. Quando você olha esses sinais como (X amp Y) contadores, eles essencialmente contar através de cada Pixels na tela do canto superior esquerdo todo o caminho para baixo na seqüência para o canto inferior direito. Este processo 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 para o monitor VGA, ao trabalharem juntos, criam o efeito de varredura Zig-Zag como mostrado abaixo. Agora, dependendo da freqüência, largura do impulso e ciclo de trabalho destes padrões de sinal. Podemos criar diferentes configurações de resolução para o monitor exibir. Assim, temos um padrão de sinal específico de H-SYNC e V-SYNC 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 muitos 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 definição de resolução de (640 x 480) isso significa que temos 640 pixels que correm do lado esquerdo da tela para o lado direito. Isso também significa que temos 480 pixels que são executados a partir do topo da tela para a parte inferior. Em outras palavras, o que temos aqui é um 640 X 480 Pixel Matrix. Você pode considerar o canto superior esquerdo da Tela como o ponto de partida para seus contadores H-SYNC e V-SYNC começando em Zero. O contador H-SYNC então prossegue para incrementar todos os 640 pixels na primeira linha horizontal da esquerda para a direita. Uma vez que ele chega ao final da linha, ele, em seguida, redefine 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 por 1. Este processo é repetido até que o contador de V-SYNC conta para 479, o que o traz para a última Row no Bottom of 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 repostos a zero. Isso nos leva de volta ao pixel do canto superior esquerdo e todo o processo de contagem começa de novo. Uma única passagem em toda a tela é 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 Animated GIF acima para obter uma melhor compreensão deste processo QuotScreen Refreshquot em ação. - Visão Geral do nosso 10 Bloco VHDL Circuito - VHDL BLOCKS - Arquitetura Exemplos - Abaixo eu forneci alguns VHDL quotArchitecturequot e quotPROCESSquot exemplos semelhantes ao que você precisa para cada um dos 10 VHDL Blocks para realizar sua função específica. Cabe a você descobrir como aplicar o código ao seu próprio projeto e gerar os sinais de que precisa. VHDL BLOCK 1 - O divisor de relógio O divisor de relógio deve ser um estalo para você descobrir, então não há 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. Conseguimos isso dividindo as placas DE1 50Mhz Relógio sinal pela metade. Para simulações MultiSim: Para uma configuração de relógio de 50MHz use um Período de Relógio 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 exemplo de contador MOD típico (Meu contador MOD25 com uma linha de redefinição de energia e um relógio de 25Mhz) Exemplo de contador MOD simples Se você estiver tendo problemas para que o controlador VGA Pulses funcione corretamente, tente mudar o estado de reset Dos contadores MOD. Experimente estes valores de contador abaixo e execute algumas simulações. MOD-800 Contagens de 0 a 793 MOD-525 Contagens de 0 a 522 VHDL BLOCK 4 amp 5 - O amplificador horizontal e vertical Descodificador State Machines (PULSOS MOMENTÁRIOS PARA LINHAS DE SAÍDA) Lembre-se que esta máquina de estado particular VHDL só irá criar Momentary Logic High Pulsos em suas saídas. As linhas STATE de saída permanecerão ALTAS por apenas 1 Pulso de Relógio, com base na fonte CLK de entrada usada para este Bloco VHDL em particular. (As saídas STATE precisam ser alimentadas em um circuito quotLatchquot a ser mantido em ALTO por qualquer período de tempo.) Exemplo de Máquina de Estado Único Acima estão alguns exemplos de vários Pulsos 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 Horizontal amp Vertical quotSYNCquot amp quotDISPLAYTIMEquot Signs (LATCH CIRCUIT STATE MACHINES COMO MOSTRADO ABAIXO) - Horizontal quotSYNCquot Signal Timing Waveforms - Nos diagramas que seguem, eles mostram o Horizontal amp Vertical quotSYNCquot Pulses e também o Horizontal e Vertical quotDISLAYTIMEquot Pulses. Estes padrões de forma de onda ocorrem em uma seqüência de repetição e eu indiquei os pontos de partida e de parada deste padrão de repetição. Incluí também os estados H-DECODER e V-DECODER Momentaty HIGH PULSE, em relação ao padrão de forma de onda em questão. - Quot horizontal (DAT) - DIGITAL (DIGITAL) O Código VHDL abaixo é um Exemplo de um circuito de Fechamento que ativará um sinal de saída para permanecer ALTO ou BAIXO para qualquer comprimento (LATCH CIRCUIT STATE MACHINES) De tempo até que a saída em questão seja designada para alterar seu estado (LATCH RESET). Os pulsos de entrada são usados ​​como gatilhos para iniciar quaisquer alterações. Este é essencialmente o tipo de circuito que você precisa implementar para cada um dos sinais, conforme mostrado nos diagramas de forma de onda acima. Exibindo Objetos na Tela Agora as coisas ficam um pouco mais complicadas aqui. Eu terei um par de exemplos de PROCEDIMENTOS DE PROCURA para guiá-lo ao longo do caminho, porém 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 segue: Tente olhar para o Horz. E Vert. MOD, mais como um sistema de coordenadas (X amp Y) 2D em um Mapa. Imagine assim nosso Horz. E Vert. MOD contadores como o X ampère Y coordenadas de posição para uma lanterna que está digitalizando a tela. Esta lanterna está verificando etiquetas em cada pixel que vem transversalmente. Os rótulos indicam a cor que determinado pixel deve exibir. Vermelho, verde ou azul, ou qualquer combinação dos três. A maneira como fazemos isso em VHDL é usar um conjunto adicional de stdlogicvectors ou (COUNTERS) exatamente como aquele usado para gerar os sinais H-SYNC e V-SYNC. As Contrapartes 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. Assim, 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 novos (X amp Y) Counter Pairs. (YREFERENCECOUNTER V-COUNTER QUOTAND XREFERENCECOUNTER H-COUNTER) então podemos usar esta condição para ativar as linhas RGB para começar a exibir uma determinada cor. EU REPITO. QuotSTARTING a partir dessas coordenadas (X amp Y). Isso significa que você tem que ADICIONAR o número de pixels (X amp Y) para o objeto que você deseja exibir, para a declaração mostrada acima. Porque você tem essencialmente apenas disse ao sistema onde começar a pintar as cores, mas não realmente qual caminho a percorrer. UP / DOWN / LEFT / RIGHT ou até mesmo onde parar. (YREFERENCECOUNTER V-COUNTER, QUOTE, XREFERENCECOUNTER H-COUNTER size) Ainda há um pouco mais para isso, então analise o quotDISPLAY PROCESSQuando exemplos eu forneci abaixo, e veja se você pode descobrir. ) QuotBALLquot Display PROCESSO Exemplo - VHDL Bloco 7 quotPADDLE 1quot Display PROCESSO Exemplo - VHDL Bloco 8 amp 9 Revise também as páginas 208 e 209 do Livro de Acompanhamento que mencionei anteriormente. Abaixo estão 2 quotPROCESSquot exemplos que podem lhe dar algumas idéias para obter uma bola rebotando na tela. Reveja os dois exemplos, Experimente o código, manipule-o, altere-o com suas próprias idéias. Tentar coisas diferentes e ver se você pode obter uma bola para exibir e saltar na tela. Agora, para obter o Ball Collisions trabalhando com as pás. Isso pode revelar-se mais desafiador. Esperemos que estes exemplos quotPROCESSquot ajudarão você a começar e a pensar em melhores maneiras de escrever seu próprio código VHDL. NOTAS ADICIONAIS SOBRE COLISÕES DE BOLA: Os detalhes abaixo sobre colisões de pá podem ser um pouco exagerados para a maioria de vocês. No entanto, se você é um perfeccionistas e estão ficando realmente frustrado porque as colisões bola com suas pás não estão se comportando da maneira que você quer que eles. Você pode querer ler os detalhes mostrados abaixo: É importante perceber que não importa em qual direção a bola está viajando, para cima, para baixo ou em um ângulo as condições que você aplica a cada remo para uma colisão de bola cada condição fará com que o mesmo Resposta independentemente de qual lado a bola colide na pá. Isso é porque ele é único objeto. As condições de colisão para cada remo são baseadas em seu contraparo 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 bloco de exibição de Concatenação de RGBquot Este bloco é simplesmente um grupo de portas quotANDquot que unem ou quotCONCATENATEquot todas as cores RGB em conjunto em uma Saída RGB MASTER. Então, você tem essencialmente uma entrada Multi-Input quotANDquot para cada uma das Cores RGB individuais. Um para todas as cores VERMELHAS, um para todo o VERDE, e um para todo o AZUL. Por fim, esta saída MASTER RGB só pode ser ativada durante o Horário de Exibição Horizontal quotANDo o Tempo de Exibição Vertical. Assim, ainda outro quotANDquot gate é usado ativar a saída MASTER RGB. Somente quando H-DISPAYTIME amp V-DISPLAYTIME estiverem em um estado de ALTA Lógica. Altera DE1 Board - As linhas RGB não utilizadas devem ser ligadas a GND. É importante certificar-se de que você amarrar quaisquer linhas de entrada RGB não utilizadas para GND. Como estes podem às vezes causar os sinais não conectados a flutuar, produzindo interferência e ruído em seu monitor VGA. Bem, isso resume as pessoas. ) Esperemos que este Tutorial, pelo menos, levá-lo um pouco mais perto de finalizar seus projetos VHDL PONG

No comments:

Post a Comment