tutorial)*)xilinx)ise - del.ufrj.br mario.filho/  · 4.)vhdl)básico ’...

Download Tutorial)*)Xilinx)ISE - del.ufrj.br mario.filho/  · 4.)VHDL)Básico ’ VHDL’é’uma’linguagem’de’descrição’de’hardware’que’…

Post on 26-Jan-2019

214 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

Tutorial - Xilinx ISE

Universidade Federal do Rio de JaneiroEscola Politcnica

Departamento de Eletrnica e Computao

Autores: Orientador:Artur Lemos Mrio VazIoav LichtensteinThiago Lobo

ndice:1. Introduo 32. Instalao 43. Criando um novo projeto 54. VHDL Bsico 85. Simulando um projeto 156. Criando um DCM 237. Implementando um projeto na FPGA 268. Exemplos de Cdigo 27

2

1. Introduo O ISE (Integrated Software Environment) um software criado pela Xilinx para sntese e anlise de modelos HDL. O usurio poder escrever, compilar, realizar anlises temporais (utilizando diferentes estmulos como entrada) e/ou configurar FPGAs com o modelo criado. Este tutorial visa fornecer ao usurio uma viso geral do software, mostrando, de forma simples, desde a ativao do programa at a compilao, visualizao de diagramas RTL e configurao da FPGA Spartan 3AN com cdigos VHDL. Desenvolveremos o tutorial baseando-nos num mdulo divisor de freqncia, e forneceremos outros exemplos de cdigo na ltima sesso.

3

2. Instalao Para ativar o ISE, deve-se baixar os arquivos no link https://www.del.ufrj.br/pastas-das-disciplinas/eel480 -sistemas-digitais, garantir que esto na pasta ~/Downloads e executar a seguinte instruo no Terminal: cd ; tar xvf /Downloads/Xilinx.tar ; ./ise.sh Feito isso, o ISE dever estar ativado e para execut-lo, deve-se utilizar o seguinte comando, tambm no Terminal: ise & O que nos leva tela principal do programa:

4

https://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitaishttps://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitaishttps://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitaishttps://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitaishttps://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitaishttps://www.del.ufrj.br/pastas-das-disciplinas/eel480-sistemas-digitais

3. Criando um novo projeto Na tela principal do ISE, devemos comear pelo menu File > New Project e a janela New Project Wizard ser aberta. Campos:Name - nome do projetoLocation - localizao onde o projeto ser salvo*Description - descrio do projeto

* - utilizaremos a pasta /tmp, pois eventualmente, o ISE pode gerar arquivos de projeto muito grandes, os quais excederiam o limite por usurio da rede. Para garantir que os arquivos sejam guardados, devemos utilizar o comando Archive, como mostraremos posteriormente.

5

Feito isso, clicar em Next. Agora, devemos escolher outros parmetros de projeto:Evaluation Development Board - Spartan 3AN Starter KitSynthesis Tool - XSTPrefered Language - VHDLVHDL Source Analysis Standard - VHDL-93

Aps clicar, mais uma vez, em Next, uma janela que resume os parmetros do projeto ser exibida. Confira os dados e caso estejam corretos, clique em Finish. Agora, temos um projeto (.xise) pronto, basta adicionar cdigos-fonte VHDL e poderemos trabalhar com os modelos. Para importar um cdigo VHDL j escrito, devemos acessar o menu Project > Add Copy of Source, navegar at o arquivo e selecion-lo. Isso copiar o arquivo para o workspace do projeto e permitir sua edio. Sempre que a edio dos arquivos estiver concluda, devemos utilizar o menu Project > Archive, para salvar o projeto na pasta do

6

usurio em formato .zip. Para utilizar esse projeto posteriormente, basta descompactar o .zip gerado dentro da pasta /tmp e abri-lo na primeira tela do ISE (Open Project).

7

4. VHDL Bsico VHDL uma linguagem de descrio de hardware que foi inicialmente utilizada para documentar componentes digitais e acabou sendo aproveitada para simulaes/implementaes em FPGA desses mesmos componentes. Um arquivo VHDL deve conter, no mnimo, uma entity e uma architecture. A entity consiste na descrio da interface do mdulo como uma caixa preta: especificando apenas as entradas e sadas. A architecture descreve o funcionamento do mdulo, propriamente dito. Costumamos separar architectures em duas classes: comportamentais e estruturais. As comportamentais servem para definir como um mdulo funcionar e as estruturais servem para definir como um mdulo de alta hierarquia interliga diferentes mdulos menores (o que no deixa de ser seu funcionamento). A utilizao de mdulos j prontos dentro de uma architecture se assemelha instanciao de um objeto em uma linguagem Orientada a Objetos: especifica-se o tipo do objeto (sua Entity), escolhe-se um nome e mapeia-se suas entradas e sadas (semelhante ao construtor de classes em Java). Dentro da architecture utilizamos sinais (signals) para intercomunicar mdulos. aplicvel um paralelo com as variveis de um programa em Java. Comentrios so feitos utilizando-se um --, por exemplo: -- Isso um comentrio e no ser utilizado na sntese

8

Segue um exemplo bsico: uma porta lgica AND:1. -- importando std_logic da biblioteca IEEE2. library IEEE;3. use IEEE.std_logic_1164.all;4. 5. -- essa a entidade (entity)6. entity ANDGATE is7. port ( 8. I1 : in std_logic;9. I2 : in std_logic;10. O : out std_logic);11. end entity ANDGATE;12. 13. -- essa a arquitetura comportamental (architecture)14. architecture behavioral of ANDGATE is15. begin16. O

Agora, podemos analisar o divisor de freqncia clk_div:

18. library IEEE;19. use IEEE.STD_LOGIC_1164.ALL;20. use ieee.numeric_std.ALL;21. 22. entity clk_div is23. generic (n : integer := 4);24. port (clk_in : in std_logic; 25. div : out std_logic;26. div2 : out std_logic );27. end clk_div;28. 29. architecture divide of clk_div is30. signal cnt, cnt1 : integer := 0;31. signal div_temp, div_temp2 : std_logic := '0';32. 33. begin34. div = n then48. cnt1

substitudo em todos os lugares que aparece no cdigo por 4. Trata-se de uma constante. Dentro da architecture, vemos um process, que como uma funo em C. Todo processo leva uma lista de sensibilidade, que no caso (clk_in). Isso indica que sempre que clk_in for atualizado, o process ser executado. H, tambm, 4 signals: 2 contadores e 2 temporrios que so mapeados s sadas do bloco, como indicam as linhas:

57. div

Agora, podemos analisar o outro mdulo, base_tempo, que utiliza o mdulo clk_div para dividir a frequncia do sinal de entrada clk. Vale ressaltar o fato de que um DCM (Digital Clock Manager foi necessrio, voltaremos a falar sobre ele na sesso 5):

59. library IEEE;60. use IEEE.STD_LOGIC_1164.ALL;61. use ieee.numeric_std.ALL;62. library UNISIM;63. use UNISIM.Vcomponents.ALL;64. 65. entity base_tempo is66. generic (n: integer := 2);67. port (clk : in std_logic;68. clk_out : out std_logic;69. clk_out_2 : out std_logic;70. locked : out std_logic);71. attribute LOC : string ;72. attribute LOC of clk : signal is "E12";73. attribute LOC of locked : signal is "W21";74. attribute LOC of clk_out : signal is "Y22";75. attribute LOC of clk_out_2 : signal is "Y18";76. end entity;77. 78. 79. architecture estrutural of base_tempo is80. component clk_div81. port (clk_in : in std_logic; 82. div : out std_logic;83. div2 : out std_logic);84. end component;85. 86. COMPONENT dcm187. PORT(CLKIN_IN : IN std_logic;88. CLKFX_OUT : OUT std_logic;89. CLKIN_IBUFG_OUT : OUT std_logic;90. CLK0_OUT : OUT std_logic;91. LOCKED_OUT : OUT std_logic);92. END COMPONENT;93. 94. signal clk_int : std_logic;95. 96.97.98.99.

12

100.begin101.clk_divider : clk_div port map 102. (clk_in => clk_int, 103. div => clk_out, 104. div2 => clk_out_2);105. 106.Inst_dcm1 : dcm1 PORT MAP (107. CLKIN_IN => clk,108. CLKFX_OUT => clk_int,109. CLKIN_IBUFG_OUT => open,110. CLK0_OUT => open,111. LOCKED_OUT => locked);112.end estrutural;

Comearemos a anlise pela entity: como esperado, h uma entrada clk e duas sadas clk_out e clk_out_2. H uma sada extra chamada locked, que simplesmente diz se o DCM est ou no sincronizado. As linhas 113-117 associam sinais da entity a componentes da FPGA na qual o cdigo ser carregado. Exceto por E12, todos os sinais so mapeados a LEDS ou contatos, que podem ser identificados pelos mesmos nomes na placa fsica:113.attribute LOC : string ;114.attribute LOC of clk : signal is "E12";115.attribute LOC of locked : signal is "W21";116.attribute LOC of clk_out : signal is "Y22";117.attribute LOC of clk_out_2 : signal is "Y18";

A achitecture, como de se esperar, estrutural, pois base_tempo trata-se de um mdulo que unifica pequenos mdulos (clk_div e dcm1). Para instanciarmos mdulos, devemos antes fazer uma declarao do tipo COMPONENT nome ... END COMPONENT;. Isso foi feito para o clk_div e o dcm1. Feito isso, podemos finalmente mapear as portas dos componentes (tal como inicializar um objeto em Java atravs de seu construtor) a sinais ou entradas/sadas da entidade.

13

No caso, utilizamos um sinal interno clk_int, que serve como sada do dcm1. No podemos utilizar diretamente o clock da placa (50mHz), pois h problemas como capacitncias parasitas que prejudicariam o funcionamento do circuito. De fato, resolvemos esse problema atravs do dcm1, que coloca uma frequncia menor em clk_int para que essa seja utilizada como entrada para o clk_div. As sadas do clk_div so intuitivamente mapeadas s sadas clk_out e clk_out_2 da base_tempo. Acreditamos que a esse ponto, o leitor j adquiriu certa noo de cdigo VHDL e de seu funcionamento, sendo capaz de continuar por si s utilizando referncias online para funes mais complexas.

14

5. Simulando um projeto Completados os cdigos VHDL, podemos realizar simulaes e visualizar seu diagrama RTL atravs do ISE.