Lomadee, uma nova espécie na web. A maior plataforma de afiliados da América Latina.

quinta-feira, 24 de novembro de 2011

...com Verilog, fazendo uma FIFO Síncrona!

E ai meu povo... fim de semestre chegando, cheio de trabalhos e provas pra estudar mas... estou aqui pra compartilhar algumas coisas estressantes (estressante é pouco).
Bom, primeiro vou explicar pq não tava postando nada:
  1.  Sem tempo;
  2.  Não tinha nada de tão interessante pra dizer;
  3.  As coisas interessantes eu não tinha certeza se estava fazendo certo;

Então... bora começar a reza, e vamos falar de coisa boa, vamos falar de Verilog!

É isso ai gente boa, Verilog!! Pois é né?? E então?? (Desembucha logo pow!!)

Calma geeeeeeeente!! Hehehe....

Vamos começar pelo começo, calma, espera, não precisa procurar no Google o que é Verilog o tio aki diz (vou procurar no wikipédia):

Segundo descrição do Wikipédia:

Verilog é uma linguagem de descrição de hardware usada para modelar sistemas eletrônicos. Esta ferramenta suporta o design, verificação e implementação de projetos analógicos, digitais e circuito híbridos em vários níveis de abstração. Com placas especiais é possível descarregar o código gerado nessa linguagem em matrizes de portas denominadas FPGA's (field programmable gate array ou matriz de portas programáveis). Essas placas são constituídas por milhares de transistores e fazem basicamente o que vários circuito integrados fazem, com a diferença de que a matriz é reprogramável.”

Podem acreditar... é isso ai mesmo! Ai vc como um crítico nato q deve ser, vai se perguntar: O que é q eu tenho a v com isso? Ai eu digo: Nada!

Mas a melhor parte é: Fiz três trabalhos em Verilog e vou postar, Rá!

Eu uso o Model Sim pra fazer essas paradinhas, mas podem usar o Quartus que fica legal Tb, porém o teste Bench (oi?) tem que ser feito no model sim. Ta bom, ta bom.... vou explicar o que é teste bench.

O teste bench é um programa que vc faz pra testar outro programa, ou seja, o nosso teste bench vai gerar umas entradas no programa que esta sendo testado a fim de verificar se as saídas correspondem a essas entradas.

if(entendeu==sim)
 printf(“Continue lendo”);
else
printf(“Wikipédia”);


1º - FIFO Síncrona:

A descrição é bem simples e corresponde ao que o próprio nome diz. Em poucas palavras, o primeiro que entra é o primeiro que sai. Essa FIFO tem capacidade para 128 palavras, sendo cada uma de 8 bits. Sabendo disso e de olho na Figura 1 podemos começar.
 Figura 1. Arquitetura da FIFO.

O programa é bem simples, teremos as seguintes entradas:

clock: sinal de clock;
rst: sinal de reset;
r_en: requisição de leitura;
w_en: requisição de escrita;
din: dados de entrada;

e as seguintes saídas:

dout: dados de saída;
empty: sinal de vazio;
full: sinal de cheio.

E essa outra variável auxiliar:

cont: contador para identificar se a memória está cheia ou vazia;

Pronto, ai tipo o programa ta todo comentado a baixo, e é auto explicativo:


Figura 2. Código FIFO (clique na figura pra ampliar).

Sim ai vc pode não ta entendendo o que é essa parte:

Figura 3.Bloco chama SRAM.

Enfim... essa parte é o seguinte, a FIFO ela só gerencia os dados que serão escritos e lidos, porém devemos ter uma memória para guardar os dados. A memória é chamada na FIFO por essa função ai que ta na Figura 3.

O código da memória é ilustrado na Figura 4.


Figura 4. Código memória.

Por fim... temos que testar pra v se ta tudo blz... ai entra o teste bench, q tb está comentado pra vcs se deliciarem. Esse monitor ai vai imprimir o estado de todas as variáveis que estão servindo como parâmetro pra ele, a cada mudança de qualquer uma. Ai é so vc testar se ta saindo tudo certo.
Figura 5. Teste Bench.
Bom, por hj é só!!
Vc: mas, mas, mas... mas vc disse que ia mostrar os três programas que vc fez!
Eu: calma véi.... quer tudo de uma vez! Os outros ficam pra outros posts, mas posso adiantar que um é um BlackJack e o outro uma FIFO Assíncrona.
Valeu!

domingo, 21 de agosto de 2011

...tentando configurar o ZigBee nos modos AT e API.


Comandos AT
Os comandos AT possuem uma estrutura como a ilustrada na Figura 1.


Figura 1. Estrutura dos comandos AT.

Antes de enviar os comandos AT é preciso que o módulo ZigBee esteja no modo comando. Para o dispositivo entrar em modo comando digita-se os caracteres do sinal de soma três vezes (+++) e espera uma resposta OK do dispositivo. Após o dispositivo enviar o sinal OK, os comandos AT já podem ser enviados para a configuração. Após o envio da resposta OK, se nenhum comando for enviado durante um período de aproximadamente 10 segundos para o módulo ele entrará no estado idle (estado pronto para transmitir e receber dados). A Tabela 1 lista alguns comandos AT utilizados para programar os dispositivos.

Tabela 1. Comandos AT para programação do XBee/XBee-ProTM.
COMANDO
RESPOSTA DO XBEE/XBEE-PROTM
SIGNIFICADO
+++
OK <CR>
Faz o módulo XBee/XBee-Pro entrar no modo comando (os caracteres "+++" devem ser digitados num intervalo de 1 segundo).
Após o OK, se nenhum comando for digitado num intervalo de +/- 10 segundos, o módulo volta ao estado idle (pronto para transmitir ou receber).
ATDL5001 <ENTER>
OK <CR>
Altera o endereço destino (DL) do módulo local para 5001.
ATDL <ENTER>
5001 <CR>
Lê o endereço destino (DL) do módulo local.
ATMY5000 <ENTER>
OK <CR>
Altera o endereço fonte (MY) do módulo local para 5000.
ATMY <ENTER>
5000 <CR>
Lê o endereço fonte (MY) do módulo local.
ATWR <ENTER>
OK <CR>
Grava as modificações efetuadas, na memória não volátil (Flash) do módulo.
ATCN <ENTER>
OK <CR>
Fecha o modo comando e volta ao estado idle (pronto para transmitir ou receber)
ATNI Nome_do_Modulo <ENTER>
OK <CR>
Atribui um nome para o módulo XBee-XBee-Pro - "Nome_do_Modulo". Pode usar até 20 caracteres ASCII para nomear o módulo.
ATNI <ENTER>
Nome_do_Modulo <CR>
Retorna o nome do módulo XBee/XBee-Pro.
ATVR <ENTER>
10C0 <CR>
Retorna a versão do firmware gravado no módulo XBee/XBee-Pro.
ATHV <ENTER>
180B<CR>
Retorna a versão do hardware do módulo XBee/XBee-Pro.
ATBD3 <ENTER>
OK <CR>
Muda a velocidade do módulo para trabalhar com 9600bps.
  
Comandos API
Para iniciar a configuração do modo API deve-se selecionar o valor um para o parâmetro AP, fazendo com que o módulo fique habilitado. Os comandos API podem agora ser enviados aos módulos remotos. Cuidado é essencial na construção dos frames, pois um frame construído errado será descartado pelo módulo local sem ao menos ser enviado. A Figura 2 ilustra um frame de dados no modo API.


Figura 2. Frame de dados no modo API.

         O frame é constituído por:
·        Start Delimiter: delimitador de inicio. Qualquer dado recebido antes dele é descartado;
·        Length: tamanho do pacote;
·        Frame Data: dados que estão sendo transmitidos;
·        Cheksum: calculado para verificar a integridade dos dados.

Com o ZigBee configurado no modo API tem-se, entre outras, as seguintes vantagens: a possibilidade de transmitir dados para múltiplos destinos sem ser necessário entrar no modo comando; os dispositivos recebem estados de sucesso ou falha para cada pacote transmitido; é possível identificar o endereço de onde partiu cada pacote.

Breve vou postar como configurar no modo API....quando eu aprender é claro...heheheh... o/