VHDL: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
 
(27 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
'''VHDL''' ('''[[VHSIC]] Hardware Description Language''') is a [[hardware description language]] used in [[electronic design automation]] to describe [[digital electronics|digital]] and [[mixed-signal integrated circuit|mixed-signal]] systems such as [[field-programmable gate array]]s and [[integrated circuit]]s. VHDL can also be used as a general purpose parallel programming language.
'''VHDL'''


== História ==
VHDL é uma linguagem de descrição de hardware que herda algumas convenções, atribuições de linguagens de programação c-like. VHDL permite que você modele eventos que ocorrem em função do tempo. VHDL é uma linguagem muito útil para descrever hardware porém mantendo uma distância maior de abordagem aos problemas que estão ligados a sínteze de hardware. A parte de sínteze é por conta do VHDL que constroi a parte mais baixo nível.




== Ferramentas ==


== Design ==
Uma boa ferramentas para se começar a sintetizar hardware em FPGA's como as da Altera, é o Quartus Web Edition https://www.altera.com/download/ é gratuíta e fácil de se instalar. É também portada para Linux/Unix e Windows, eu aconselho a versão 32 bits apesar de nunca ter tido problema com a versão 64 bits e até mesmo abrindo projetos 32 bits no Quartus 64 bits. Algumas funções que para quem trabalha realmente em projeção de hardware, não estão disponíveis no Quartus Web Edition, mas são coisas específicas que talvéz nem faça falta para a abordagem do pessoal do LabMacambira. No entanto, comprando uma placa da Altera, tipo Cyclone II acredito que o software Quartus Edição Completa, acompanha o pacote. E uma placa dessas custa em torno de 500 dólares. Existem maneiras de se comprar pela Universidade e reduzir esse preço. De qualquer maneira Universidades geralmente tem um conjunto de placas FPGA's em laboratórios de sínteze de hardware. Outro Software é o ModelSim Altera, que também é gratuíto pelo mesmo link, e de extrema importância na sinteze de hardware. Uma vez que não tem como um hardware mais complexo, sintetizado em alto nível passar sem antes for executada uma bateria de testes pesada sobre ele para que ele realmente de todos os erros para que sejam corrigidos após Testes e Validações.


== Vantagens ==
Outra ferramenta que eu recomendo fortemente é o Sigasi http://www.sigasi.com/, um plugin para Eclipse. Na verdade é uma ferramenta poderosa para descrever em VHDL. Ela é gratuíta para estudantes universitários, basta se cadastrar colar o link na sessão de updates de plugins no Eclipse, instalar e programar em VHDL de uma maneira muito mais prática. Eu recomendo o Sigasi, pois VHDL é uma linguagem bastante propensa a erros de sintaxe.


== Desvantagens ==
=== Altera FPGAs ===


<source lang="VHDL">
A Altera faz fpgas, asics. Fpgas são placas com circuito mapeados para se combinar sob demanda da descrição VHDL que será programada na FPGA com a ajuda do Quartus. As placas da ALTERA(R) Cyclone 2 são bastante robustas e eficazes vale a pena comprar uma para efetuar testes, estudar.
-- (this is a VHDL comment)


-- import std_logic from the IEEE library
[[Arquivo:fpga_comum.jpg]]
library IEEE;
use IEEE.std_logic_1164.all;


-- this is the entity
Duas FPGAS que recomendo são C6 e C7.
entity ANDGATE is
  port (
    I1 : in std_logic;
    I2 : in std_logic;
    O  : out std_logic);
end entity ANDGATE;


-- this is the architecture
Part Number EP2C35F672C6
architecture RTL of ANDGATE is
Description IC CYCLONE II FPGA 672FBGA
begin
  O <= I1 and I2;
end architecture RTL;
</source>


(Notice that <code>RTL</code> stands for ''[[Register transfer level]]'' design.) While the example above may seem verbose to HDL beginners, many parts are either optional or need to be written only once. Generally simple functions like this are part of a larger behavioral module, instead of having a separate module for something so simple. In addition, use of elements such as the <tt>std_logic</tt> type might at first seem to be an overkill. One could easily use the built-in <tt>bit</tt> type and avoid the library import in the beginning. However, using this [[Multi-valued logic|9-valued logic]] ([[IEEE 1164|<tt>U</tt>,<tt>X</tt>,<tt>0</tt>,<tt>1</tt>,<tt>Z</tt>,<tt>W</tt>,<tt>H</tt>,<tt>L</tt>,<tt>-</tt>]]) instead of simple bits (0,1) offers a very powerful simulation and debugging tool to the designer which currently does not exist in any other HDL.
http://www.buyaltera.com/scripts/partsearch.dll?Detail&name=544-1087-ND


=== Synthesizable constructs and VHDL templates ===
Part Number EP2C35F672C7
Description IC CYCLONE II FPGA 672FBGA


=== MUX template ===
http://www.buyaltera.com/scripts/partsearch.dll?Detail&name=544-1088-ND


The [[multiplexer]], or 'MUX' as it is usually called, is a simple construct very common in hardware design. The example below demonstrates a simple two to one MUX, with inputs <tt>A</tt> and <tt>B</tt>, selector <tt>S</tt> and output <tt>X</tt>. Note that there are many other ways to express the same MUX in VHDL.
Cyclone 2 Handbook


<source lang="VHDL">X <= A when S = '1' else B;</source>
http://www.altera.com/devices/fpga/cyclone2/cy2-index.jsp


=== Latch template ===
=== Nios(R) II ===


A [[transparent latch]] is basically one bit of memory which is updated when an enable signal is raised. Again, there are many other ways this can be expressed in VHDL.
Nios is a soft processor that can be incorporated in systems implemented on an FPGA device by using the Qsys System Integration tool or the SOPC Builder tool.


<source lang="VHDL">
=== Padrões de Projeto ===
-- latch template 1:
Q <= D when Enable = '1' else Q;


-- latch template 2:
Um padrão de projeto em VHDL é BC-BO. Onde se cria um BC.VHDL e um BO.VHDL além das subpartes que provavelmente serão criadas para compor esses dois. Um exemplo de projeto de um multiplicador https://gist.github.com/tonussi/5822655 utilizando BC-BO.
process(D,Enable)
begin
  if Enable = '1' then
    Q <= D;
  end if;
end process;
</source>


== References ==
=== Temas para Projetos Práticos de Sistemas Digitais ===


<references />
1. SAD
Cálculo da soma das diferenças absolutas entre os pixels de duas imagens. Há uma matriz de nxn pixels, armazenados em uma memória (M1) e uma matriz de nxn pixels, armazenados em uma outra memória (M2). Deve ser calculada a diferença absoluta entre os pixels das duas imagens, par a par. O resultado é acumulado em um registrador e mostrado ao final do cálculo. M1 e M2 devem ser internas ao FPGA. Considerar que cada pixel está codificado com 8 bits.


== Further reading ==
2. Compensador de Movimento
Recebe o valor de dois vetores de movimento (valores inteiros) e acessa uma memória onde está armazenado um bloco de nxn pixels (bloco de referência). Com base nos pixels do bloco de referência e nos vetores de movimento, remonta um bloco. Há duas memórias: M1, que armazena o bloco de referência, e M2, na qual deve ser escrito o bloco remontado. Ambas memórias devem poder armazenar nxn pixels. Considerar que cada pixel está codificado com 8 bits.


* Bryan Mealy, Fabrizio Tappero (February 2012). [http://www.freerangefactory.org/dl/free_range_vhdl.pdf Free Range VHDL]. The no-frills guide to writing powerful VHDL code for your digital implementations. [http://www.freerangefactory.org freerangefactory.org].
3. Detector de Bordas
* {{cite news|title=Comparing Verilog to VHDL Syntactically and Semantically|author=Johan Sandstrom|publisher=EE Times|date=October 1995|work=Integrated System Design|url=http://www.sandstrom.org/systemde.htm}} &mdash; Sandstrom presents a table relating VHDL constructs to [[Verilog]] constructs.
Recebe o valor de uma máscara (matriz 3x3 de inteiros) e acessa uma memória onde está armazenado um bloco de nxn pixels (imagem de referência). Com base nos pixels da imagem de referência e na máscara, remonta uma imagem com cada pixel multiplicado pela máscara. Há duas memórias: M1, que armazena a máscara de referência, e M2, na qual deve ser escrita imagem processada. Ambas memórias devem poder armazenar nxn pixels. Considerar que cada pixel está codificado com 8 bits.
* {{cite journal|url=http://www.eda.org/rassp/vhdl/guidelines/vhdlqrc.pdf|format=PDF|title=VHDL quick reference card|publisher=Qualis Design Corporation|author=Qualis Design Corporation|date=2000-07-20|version=1.1}}
* {{cite journal|url=http://www.eda.org/rassp/vhdl/guidelines/1164qrc.pdf|format=PDF|title=1164 packages quick reference card|publisher=Qualis Design Corporation|author=Qualis Design Corporation|date=2000-07-20|version=1.0}}
* Janick Bergeron, "Writing Testbenches: Functional Verification of HDL Models", 2000, ISBN 0-7923-7766-4. (The HDL Testbench Bible)


== External links ==
4. Multiplicação e Divisão Inteiras
ULA capaz de realizar a multiplicação e a divisão de forma eficiente de números inteiros. Recebe dois números inteiros (com ou sem sinal), a operação a ser realizada (multiplicação ou divisão) e um sinal para início do cálculo. Realiza a operação solicitada de forma eficiente e disponibiliza o resultado na saída, sinalizando quando ela está pronta.


{{Commons category}}
5. Adição e Subtração em FP
{{wikibooks|Programmable Logic|VHDL}}
ULA capaz de realizar adição e subtração em ponto flutuante segundo o padrão IEEE 754. Esta ULA Dever haver sinalização de overflow e de underflow. Recebe dois números em ponto flutuante, a operação a ser realizada (adição ou subtração) e um sinal para início do cálculo. Realiza a operação solicitada e disponibiliza o resultado na saída, sinalizando quando ela está pronta.
* [http://www.eda.org/twiki/bin/view.cgi/P1076/WebHome IEEE VASG (VHDL Analysis and Standardization Group)], the official VHDL working group
* The VHDL newsgroup ''comp.lang.vhdl'' on [news://comp.lang.vhdl Usenet] and the [http://groups.google.com/group/comp.lang.vhdl/topics web] and their [http://www.vhdl.org/comp.lang.vhdl/ Frequently Asked Questions And Answers]
* [http://cseweb.ucsd.edu/classes/sp13/cse140-a/lectures/chap-rtl.pdf Máquinas de Estado de Alto Nível (tips and tricks)].


{{DEFAULTSORT:Vhdl}}
6. Multiplicação em FP
[[Category:Ada programming language family]]
ULA capaz de realizar a multiplicação em ponto flutuante segundo o padrão IEEE 754. Recebe dois números em ponto flutuante e um sinal para início do cálculo. Realiza a multiplicação e disponibiliza o resultado na saída, sinalizando quando ela está pronta.
[[Category:Hardware description languages]]
 
7. Divisão em FP
ULA capaz de realizar a divisão em ponto flutuante segundo o padrão IEEE 754. Recebe dois números em ponto flutuante e um sinal para início do cálculo. Realiza a multiplicação e disponibiliza o resultado na saída, sinalizando quando ela está pronta.
 
8. Ordenador de Vetores
Recebe a posição inicial de vetor armazenado numa memória e a quantidade de elementos nesse vetor. Quando sinalizado, reordena os elementos do vetor em ordem crescente, na mesma memória.
 
9. Controlador Programável de Interrupções
Recebe sinais de interrupção de até 8 dispositivos. As interrupções que não tiverem sido mascaradas são colocadas num registrador de interrupções pendentes. O controlador seleciona a interrupção mais prioritária e ativa o sinal de interrupção da CPU. Ao receber uma solicitação externa, responde com o número do dispositivo que gerou aquela interrupção. Ao receber o sinal de término de atendimento da CPU, exclui a interrupção pendente e ativa um sinal avisando dispositivo correto.
 
10. Memória Cache
Recebe uma requisição de leitura de um endereço na memória. Verifica se o endereço requisitado já foi armazenado na cache. Se foi, então há um acerto na cache o respectivo dado armazenado na cache é retornado. Se o endereço não está armazenado na cache, então é feita a leitura a esse endereço numa memória M1. O dado lido de M1 é armazenado na cache juntamente com seu endereço, e o dado é retornado.
 
== Bons Livros (Recomendados) ==
 
* "Digital Design: With RTL, VHDL, and Verilog" Vahid, F. (2nd ed, Wiley, 2010); Plus "VHDL for Digital Design" / "Verilog for Digital Design" (Wiley 2007)
* "RTL HARDWARE DESIGN USING VHDL Coding for Efficiency, Portability, and Scalability" PONG P. CHU Cleveland State University"
 
== Links Uteis ==




* [http://cseweb.ucsd.edu/classes/sp13/cse140-a/ CSE140: Components and Design Techniques for Digital Systems].
* [http://esd.cs.ucr.edu/labs/tutorial/ VHDL Tutorial: Learn by Example -- by Weijun Zhang, July 2001].


<__tonussi> automata, você me perguntou de refs do meu estudo em vhdl, basicamente isso é o que eu consigo fazer de mais alto nível http://cseweb.ucsd.edu/classes/sp13/cse140-a/lectures/chap-rtl.pdf livro para estudar que é ótimo Frank Vahid - Digital Systems (te da uma noção mt boa)


{{DEFAULTSORT:Vhdl}}
[[Category:Ada programming language family]]
[[Category:Hardware description languages]]
[[Category:Lab Macambira]]
[[Category:Lab Macambira]]

Edição atual tal como às 19h00min de 31 de julho de 2013

VHDL

VHDL é uma linguagem de descrição de hardware que herda algumas convenções, atribuições de linguagens de programação c-like. VHDL permite que você modele eventos que ocorrem em função do tempo. VHDL é uma linguagem muito útil para descrever hardware porém mantendo uma distância maior de abordagem aos problemas que estão ligados a sínteze de hardware. A parte de sínteze é por conta do VHDL que constroi a parte mais baixo nível.


Ferramentas

Uma boa ferramentas para se começar a sintetizar hardware em FPGA's como as da Altera, é o Quartus Web Edition https://www.altera.com/download/ é gratuíta e fácil de se instalar. É também portada para Linux/Unix e Windows, eu aconselho a versão 32 bits apesar de nunca ter tido problema com a versão 64 bits e até mesmo abrindo projetos 32 bits no Quartus 64 bits. Algumas funções que para quem trabalha realmente em projeção de hardware, não estão disponíveis no Quartus Web Edition, mas são coisas específicas que talvéz nem faça falta para a abordagem do pessoal do LabMacambira. No entanto, comprando uma placa da Altera, tipo Cyclone II acredito que o software Quartus Edição Completa, acompanha o pacote. E uma placa dessas custa em torno de 500 dólares. Existem maneiras de se comprar pela Universidade e reduzir esse preço. De qualquer maneira Universidades geralmente tem um conjunto de placas FPGA's em laboratórios de sínteze de hardware. Outro Software é o ModelSim Altera, que também é gratuíto pelo mesmo link, e de extrema importância na sinteze de hardware. Uma vez que não tem como um hardware mais complexo, sintetizado em alto nível passar sem antes for executada uma bateria de testes pesada sobre ele para que ele realmente de todos os erros para que sejam corrigidos após Testes e Validações.

Outra ferramenta que eu recomendo fortemente é o Sigasi http://www.sigasi.com/, um plugin para Eclipse. Na verdade é uma ferramenta poderosa para descrever em VHDL. Ela é gratuíta para estudantes universitários, basta se cadastrar colar o link na sessão de updates de plugins no Eclipse, instalar e programar em VHDL de uma maneira muito mais prática. Eu recomendo o Sigasi, pois VHDL é uma linguagem bastante propensa a erros de sintaxe.

Altera FPGAs

A Altera faz fpgas, asics. Fpgas são placas com circuito mapeados para se combinar sob demanda da descrição VHDL que será programada na FPGA com a ajuda do Quartus. As placas da ALTERA(R) Cyclone 2 são bastante robustas e eficazes vale a pena comprar uma para efetuar testes, estudar.

Fpga comum.jpg

Duas FPGAS que recomendo são C6 e C7.

Part Number EP2C35F672C6 Description IC CYCLONE II FPGA 672FBGA

http://www.buyaltera.com/scripts/partsearch.dll?Detail&name=544-1087-ND

Part Number EP2C35F672C7 Description IC CYCLONE II FPGA 672FBGA

http://www.buyaltera.com/scripts/partsearch.dll?Detail&name=544-1088-ND

Cyclone 2 Handbook

http://www.altera.com/devices/fpga/cyclone2/cy2-index.jsp

Nios(R) II

Nios is a soft processor that can be incorporated in systems implemented on an FPGA device by using the Qsys System Integration tool or the SOPC Builder tool.

Padrões de Projeto

Um padrão de projeto em VHDL é BC-BO. Onde se cria um BC.VHDL e um BO.VHDL além das subpartes que provavelmente serão criadas para compor esses dois. Um exemplo de projeto de um multiplicador https://gist.github.com/tonussi/5822655 utilizando BC-BO.

Temas para Projetos Práticos de Sistemas Digitais

1. SAD Cálculo da soma das diferenças absolutas entre os pixels de duas imagens. Há uma matriz de nxn pixels, armazenados em uma memória (M1) e uma matriz de nxn pixels, armazenados em uma outra memória (M2). Deve ser calculada a diferença absoluta entre os pixels das duas imagens, par a par. O resultado é acumulado em um registrador e mostrado ao final do cálculo. M1 e M2 devem ser internas ao FPGA. Considerar que cada pixel está codificado com 8 bits.

2. Compensador de Movimento Recebe o valor de dois vetores de movimento (valores inteiros) e acessa uma memória onde está armazenado um bloco de nxn pixels (bloco de referência). Com base nos pixels do bloco de referência e nos vetores de movimento, remonta um bloco. Há duas memórias: M1, que armazena o bloco de referência, e M2, na qual deve ser escrito o bloco remontado. Ambas memórias devem poder armazenar nxn pixels. Considerar que cada pixel está codificado com 8 bits.

3. Detector de Bordas Recebe o valor de uma máscara (matriz 3x3 de inteiros) e acessa uma memória onde está armazenado um bloco de nxn pixels (imagem de referência). Com base nos pixels da imagem de referência e na máscara, remonta uma imagem com cada pixel multiplicado pela máscara. Há duas memórias: M1, que armazena a máscara de referência, e M2, na qual deve ser escrita imagem processada. Ambas memórias devem poder armazenar nxn pixels. Considerar que cada pixel está codificado com 8 bits.

4. Multiplicação e Divisão Inteiras ULA capaz de realizar a multiplicação e a divisão de forma eficiente de números inteiros. Recebe dois números inteiros (com ou sem sinal), a operação a ser realizada (multiplicação ou divisão) e um sinal para início do cálculo. Realiza a operação solicitada de forma eficiente e disponibiliza o resultado na saída, sinalizando quando ela está pronta.

5. Adição e Subtração em FP ULA capaz de realizar adição e subtração em ponto flutuante segundo o padrão IEEE 754. Esta ULA Dever haver sinalização de overflow e de underflow. Recebe dois números em ponto flutuante, a operação a ser realizada (adição ou subtração) e um sinal para início do cálculo. Realiza a operação solicitada e disponibiliza o resultado na saída, sinalizando quando ela está pronta.

6. Multiplicação em FP ULA capaz de realizar a multiplicação em ponto flutuante segundo o padrão IEEE 754. Recebe dois números em ponto flutuante e um sinal para início do cálculo. Realiza a multiplicação e disponibiliza o resultado na saída, sinalizando quando ela está pronta.

7. Divisão em FP ULA capaz de realizar a divisão em ponto flutuante segundo o padrão IEEE 754. Recebe dois números em ponto flutuante e um sinal para início do cálculo. Realiza a multiplicação e disponibiliza o resultado na saída, sinalizando quando ela está pronta.

8. Ordenador de Vetores Recebe a posição inicial de vetor armazenado numa memória e a quantidade de elementos nesse vetor. Quando sinalizado, reordena os elementos do vetor em ordem crescente, na mesma memória.

9. Controlador Programável de Interrupções Recebe sinais de interrupção de até 8 dispositivos. As interrupções que não tiverem sido mascaradas são colocadas num registrador de interrupções pendentes. O controlador seleciona a interrupção mais prioritária e ativa o sinal de interrupção da CPU. Ao receber uma solicitação externa, responde com o número do dispositivo que gerou aquela interrupção. Ao receber o sinal de término de atendimento da CPU, exclui a interrupção pendente e ativa um sinal avisando dispositivo correto.

10. Memória Cache Recebe uma requisição de leitura de um endereço na memória. Verifica se o endereço requisitado já foi armazenado na cache. Se foi, então há um acerto na cache o respectivo dado armazenado na cache é retornado. Se o endereço não está armazenado na cache, então é feita a leitura a esse endereço numa memória M1. O dado lido de M1 é armazenado na cache juntamente com seu endereço, e o dado é retornado.

Bons Livros (Recomendados)

  • "Digital Design: With RTL, VHDL, and Verilog" Vahid, F. (2nd ed, Wiley, 2010); Plus "VHDL for Digital Design" / "Verilog for Digital Design" (Wiley 2007)
  • "RTL HARDWARE DESIGN USING VHDL Coding for Efficiency, Portability, and Scalability" PONG P. CHU Cleveland State University"

Links Uteis