LABORG Parte 2 - Introdução a FPGAs e Prototipação de Hardware

Slides:



Advertisements
Apresentações semelhantes
Virtex-II Pro X Platform FPGA
Advertisements

MATRIZES DE PORTAS PROGRAMÁVEIS NO CAMPO (FPGA)
CPU: Controle e processamento
PROGRAMAÇÃO E PROJETOS COM DISPOSITIVOS FPGA (1.a parte)
Comportamento de um transistor MOS - NMOS
Circuitos Lógicos e Organização de Computadores Capítulo 3 – Tecnologia de Implementação Ricardo Pannain
Projecto de Hardware com FPGAs
Copyright (c) 2003 by Valery Sklyarov and Iouliia Skliarova: DETUA, IEETA, Aveiro University, Portugal.
Dispositivos lógicos programáveis (DLP)
Projeto de sistemas computacionais
Fernando Gehm Moraes Ney Laert Vilar Calazans
Pontifícia Universidade Católica do Rio Grande do Sul
LABORG Parte 2 - Introdução a FPGAs e Prototipação de Hardware
Fernando Moraes e Ney Laert Vilar Calazans
César Augusto Missio Marcon Ney Laert Vilar Calazans
Aula 12 – Prototipação de Processadores e Entrada e Saída LABORG 1º/junho/2009 Ney Laert Vilar Calazans.
Parte 9 – Prototipação de Processadores e Entrada e Saída LABORG 27/novembro/2009 Ney Laert Vilar Calazans.
Ney Laert Vilar Calazans
Parte 2 – Introdução a VHDL Uso de Hierarquia LABORG Fernando Gehm Moraes César Marcon Ney Laert Vilar Calazans 31/agosto/2009.
Parte 4 - Introdução a FPGAs
Modelos de Troca de Dados em Nível Elétrico
AULA 1: Introdução a Sistemas Embarcados
Unidades de Execução e de Controle Sistemas Digitais.
Arquiteturas de Processamento de Imagens e Sinais
VHDL AULA - 2.
William Stallings Arquitetura e Organização de Computadores 8a Edição
Circuitos Lógicos Sequenciais
Introdução à Informática
Aula 4 - Introdução a FPGAs (Continuação) LABORG 24/março/2008 Fernando Gehm Moraes César Augusto Missio Marcon Ney Laert Vilar Calazans.
MC542 Organização de Computadores Teoria e Prática
Dicas de Circuitos MO801/MC912.
Juliano Medeiros Coimbra
Arquiteturas Diferentes
MC542 Organização de Computadores Teoria e Prática
MC542 Organização de Computadores Teoria e Prática
Informática Industrial
Tópicos Especiais em Sistemas Digitais I
Semana de Engenharia Introdução a Linguagem de Descrição de HW VHDL a ao Projeto Baseado em Lógica de Programação ALTERA Prof. Daniel Barros Júnior
MOSTRA DE TRABALHOS DE CONCLUSÃO FACULDADE DE INFORMÁTICA PUCRS
Tolerância a falhas em Sistemas Baseados em FPGAs Reconfiguráveis
PSEUDO-ONLINE TESTING METHODOLOGIES FOR VARIOUS COMPONENTS OF FIELD PROGRAMMABLE GATE ARRAYS L. Kalyan Kumar, Aditya S. Ramani, Amol J. Mupid, V. Kamakoti*
FLI – ModelSim Pedro Velho.
Dispositivos de Lógica Programável
Dispositivos Lógicos Programáveis (PLD)
Máquina de Estados Uma máquina de estados finitos ou autômato finito é uma modelagem de um comportamento composto por estados, transições e ações Um estado.
Professor Victor Sotero
Arquitetura de Sistemas Digitais FPGA
ALTERA FLEX 10K CARACTERÍSTICAS
Sistemas Operacionais
Introdução à Programação
Engenharia de Software para Computação Embarcada
Dispositivos Lógicos Programáveis (DLP) Ideia e Arquiteturas
Placa de prototipação H.O.T. II
Rodolfo Galvão Aurélio
Projeto de Circuito Combinacional Unidade Lógica e Aritmética (ULA)
Sistemas Operacionais
Conceitos de Lógica Digital
Ney Laert Vilar Calazans
Desenvolvimento de um Controle Reconfigurável para Sistemas de Tempo Real Crítico Sistema para aplicações em Mecatrônica e Automobilística.
Organização e Arquitetura de Computadores
AULA 3 – ELEMENTOS DE INTERCONEXÃO DE REDES
Lógica Programável PTC2527 – EPUSP Guido Stolfi.
Montagem e Manutenção de Computador I Curso Técnico em Rede de Computadores Aula 05.
Dispositivos Programáveis
Projetos Grandes MO801/MC912. Roteiro Componentes Configurações Instanciação múltipla Instanciação condicional Atenção: Os exemplos são cumulativos.
Prof. Anderson Royes Terroso Abril, 2000.
Dispositivos Reconfiguráveis
Servomecanismo N7SRV Prof. Dr. Cesar da Costa
Projeto de Circuitos Integrados Semidedicados Prof. Marcio Cunha Aula 02 – Arquiteturas de Sistemas Digitais.
Arquitetura interna de FPGAs da família Virtex
Transcrição da apresentação:

LABORG Parte 2 - Introdução a FPGAs e Prototipação de Hardware Fernando Moraes e Ney Laert Vilar Calazans 24/março/2014

Teoria – Estrutura de FPGAs

Sem Projeto de Dispositivos Com Projeto de Dispositivos O Que São FPGAs? FPGAs permitem implementar circuitos digitais diretamente de HDLs, sem os custos de fabricação de chips! Projeto e Implementação de Produtos Tecnológicos Baseados em Circuitos Eletrônicos Sem Projeto de Dispositivos Com Projeto de Dispositivos Chip Sets Sistema digital dedicado, programável (microcontroladores e/ou DSPs) Sistemas computacional programável (e.g. PC) Dispositivos personalizáveis (FPGAs e CPLDs) Dispositivos projetados e fabricados sob encomenda ASIC (full custom ou standard cells) Aumento de desempenho (maior velocidade e menor potência dissipada), sigilo de projeto, custo de desenvolvimento TECNOLOGIA Diminuição da complexidade de projeto

Um Pouco de História de FPGAs Primeiro vieram PROMs e PLDs, matrizes de portas (re-) configuráveis Algumas patentes de coisas parecidas com FPGAs surgiram no final dos anos 80 e início dos anos 90 (Casselman, Page, Peterson) Os fundadores da Xilinx, Ross Freeman e Bernard Vonderschmitt, inventaram o primeiro FPGA comercial em 1985 – o XC2064 O XC2064 tinha 64 blocos lógicos configuráveis e interconexões configuráveis entre os blocos lógicos O XC2064 só tinha blocos lógicos configuráveis (CLBs), cada um com duas LUTs de 3 entradas

FPGAs – Conceitos Básicos Matriz de CLBs (configurable logic blocks) interconectados por matrizes de chaveamento Switch Blocks: ES ES ES 1 - Entradas/Saídas (Re-)Configuráveis Bloco K Bloco K Bloco K ES ES 2 - Conexões (Re-)Configuráveis Bloco K Bloco K Bloco K ES ES Bloco K Bloco K Bloco K ES ES 3 - Funções Booleanas (Re-) Configuráveis ES ES ES

FPGAs – Conceitos Básicos Exemplo de conexão entre duas redes Bloco K Bloco K Bloco K Bloco K Bloco K Bloco K Bloco K Bloco K

FPGAs – Configuração (RAM-based) FPGA deve ser visto como “duas camadas” Memória de configuração Lógica do usuário Memória de configuração define: Toda a fiação da lógica do usuário Definição das funções lógicas (LUTs) Interface externas e internas (mproc) Configuração de memórias Conteúdo de memórias Configuração dos pinos de E/S Configuration Memory Layer User Logic Layer Por exemplo, Virtex 4: memória de configuração entre 1 MB – 4 MB

Tecnologias de Configuração Algumas das diferentes tecnologias usadas para definir o comportamento de um FPGA: Antifusível (E)EPROM SRAM Configuração uma única vez Configuração um número limitado de vezes, mantida com o chip desconectado da alimentação Configuração deve ser realizada cada vez que o FPGA for alimentado

LUT – O Gerador Universal de Funções LUT – Look-Up Table – Um exemplo de Bl;oco com Função Booleana Reconfigurável Uma porção de hardware configurável/reconfigurável capaz de implementar qualquer tabela verdade de n entradas Para n=4: Altamente flexível Método mais utilizado (Xilinx, Altera e outros) 2 (2) 4 = 65.536 funções implementáveis

FPGAs – LUT – O Gerador Universal de Funções Implementação física de uma LUT4 D A C B F . ) , ( + = å 14 12 10 8 7 3 As entradas (variáveis Booleanas) controlam um multiplexador 2n:1 15 1 A tabela verdade da função é armazenada em uma memória durante a configuração do FPGA A B C D Considerando 150 transistores / LUT4 Para 50.000 LUTS  7.500.000 transistores!!!

O Mercado de FPGAs No início de 2005 PLDs FPGAs Lattice QuickLogic: 2% Xilinx Actel Other: 2% 5% 7% 58% 33% 51% 31% 11% Xilinx It is clear from these two charts that Xilinx is not only the clear leader in programmable logic products, but is also the leader in FPGA market share. This is due primarily to the fact that we produce products the meet the requirements of our customers. We understand the problems facing our customers and we make it our business to provide solutions to those problems Note: Atmel and Cypress number (each less than 1%) are not included in this calculation. Altera Altera Outros Dois fornecedores dominam, indicando um mercado maduro Fonte: Company reports Latest information available; computed on a 4-quarter rolling basis

Dispositivos XILINX e ALTERA Baixo Custo Famílias Spartan 2, Spartan 3, Spartan 6 Alto desempenho Virtex 5, Virtex 6, Virtex 7:Artix-Kintex-Virtex e Zynq (usam tecno 28nm) Altera Baixo Custo e Mid-Range Famílias Cyclone II, III, IV, V, Arria GX, II, V Stratix II, III, IV, V

Alguns Detalhes: Arquitetura Virtex II CLBs Switch Matrix CLB, IOB, DCM Switch Matrix Slice S3 Slice S2 Slice S1 Slice S0 BRAM 8 LUTs Lógica (uso primário) 128b RAM distribuída Shift registers Wide Input functions (32:1) The Virtex-II PRO will be based on the industry leading fabric of the Virtex-II family, which includes: Active Interconnect™ technology for fast, predictable routing delays due to the fully buffered, segmented routing architecture Memory rich architecture with True Dual Port embedded memory (BRAM) in 18Kbit blocks 18bx18b multipliers operating at 200+MHz pipelined And a feature rich CLB architecture optimized for wide input functions and supporting up to 128 bits of distributed RAM per CLB. Block RAM Multiplicadores 18KBits True Dual Port Up to 3.5Mbits / device 18b x 18b mult 200MHz pipelined

Arquitetura Virtex II – CLB e Interconexão DIRECT CONNECT Conexões diretas entre CLBs vizinhas Lógica de vai-um Matrix de conexão CLB às linhas de roteamento Linhas de roteamento Simples Hexas Longas Tri-state 17

Arquitetura do CLB do Dispositivo VIRTEX-II Slice Fast Carry Logic Path Provides fast arithmetic add and sub RESUMINDO O CLB 4 Slices 8 LUTS / 8 Flip-Flops 2 cadeias de vai-um 64 bits para memória 64 bits para shift-register Slice Slice Slice

Arquitetura – Metade de um Slice

Virtex2P XC2VP7 FPGA Editor View With All Wires 4,928 slices 44 BRAMs 1 PowerPC 11,627 logic sites 2,653 tiles 1,423,681 wires 544,549 segments Let’s look at a sample device. I’m going to pick a Virtex2P XC2VP7 for the sake of illustration, but the principles apply to other architectures as well. This device is relatively small, but it still includes nearly 5,000 slices, a bunch of BRAM, and a PowerPC. Since I’ve already introduced the notion of tiles, let’s zoom in on one of them.

Virtex2P XC2VP7 FPGA Editor View With All Wires Zoom de um CLB do canto superior esquerdo Muitos recursos de roteamento Grande caixa de conexões (switch box) 4 slices e 2 TBUFs This happens to be a CENTER tile. As you can see, it contains a mess of wiring, along with a big empty hold in the middle, called a switch box. That’s where most of the connections between wires occur. The tile also contains logic resources, in this case two tristate buffers and four slices. Let’s take a closer look at one of the slices.

Virtex2P XC2VP7 Visão do software FPGA Editor com todos os fios Slice da Família Virtex2Pro 2 LUTs 2 flip-flops Vários muxs Lógica de vai-um dedicada The slice shows us the kinds of things that we would expect. Two LUTs, two flip-flops, some muxes, and some dedicated carry logic.

XC2VP7 Virtex-II Pro FPGA Foto do Layout do XC2VP7 Power PC DCM (clock manager) MGTs (gigabit transceiver)

Demais Componentes de FPGA Moderno (1/2) Gerenciamento de clock Reduz escorregamento de relógio Permite multiplicar, dividir, mudar a fase da(s) freqüências de entrada Implementações digitais (DCM – Xilinx, mais baratos) e analógica (PLL – Altera, mais felxíveis) Blocos de memória embarcada Tipicamente blocos de 18kbits ou 36Kbits na Xilinx (Altera tem mais variedade de blocos de memória) Blocos DSP Multiplicadores 18bitsx18bits para funções de imagem, áudio, telecomunicações

Demais Componentes de FPGA Moderno (2/2) Processadores embarcados do tipo hard macro Xilinx disponibiliza o processador PowerPC (clock de 300-500MHz) Podem executar sistemas operacionais embarcados como Linux Transceptores Gigabit Blocos serializadores / deserializadores para receber dados em altas taxas de transmissão Virtex-4 é capaz de receber e transmitir dados em freqüências de 3.2 Gbps usando dois fios. Outros Ethernet MAC Criptografia do bitstream Controle para reconfiguração interna (de dentro do FPGA - ICAP)

Prática – Trabalhando com FPGAs - Prototipação

Utilizando o FPGA Para Prototipação Abaixo aparece um circuito somador, um daqueles visto no trabalho T1, que deve ser prototipado nesta aula (compare com a implementação daquele trabalho): library IEEE; use IEEE.Std_Logic_1164.all; use IEEE.std_logic_unsigned.all; -- Para permitir soma de std_logic entity somador is port ( A, B: in std_logic_vector(3 downto 0); Soma: out std_logic_vector(3 downto 0) ); end somador; architecture somador of somador is begin Soma <= A + B; -- Soma de dois vetores de 4 bits

Onde as Entradas e Saídas se Conectam? (1/3) Placas de prototipação têm recursos de entrada e saída: LEDs, chaves, displays, teclado, serial, USB, Ethernet... A(3 downto 0); B(3 downto 0); Soma(3 downto 0) Ao lado aparece um exemplo de atribuição de dispositivos de entrada e saída da placa Nexys2 para prototipar o somador deste trabalho

Onde as Entradas e Saídas se Conectam? (2/3) Um arquivo de projeto relaciona as entradas e saídas do VHDL com os recursos da placa Este arquivo se chama UCF (abreviatura de User Constraint File) Abrir o manual da placa no link: Nexys2_rm.pdf Ir na página 5 deste manual e achar a Figura ao lado

Onde as Entradas e Saídas se Conectam? (3/3) Criação do arquivo UCF – Arquivo que define a relação entre cada nome de fio/pino em VHDL e pinos físicos associados do FPGA ### UCF DO PROJETO SOMADOR DE 4 BITS NET "A<0>" LOC = "L14" ; # Bit 0 do vetor A NET "A<1>" LOC = "L13" ; # Bit 1 do vetor A NET "A<2>" LOC = "N17" ; # Bit 2 do vetor A NET "A<3>" LOC = "R17" ; # Bit 3 do vetor A NET "B<0>" LOC = "G18" ; # Bit 0 do vetor B NET "B<1>" LOC = "H18" ; # Bit 1 do vetor B NET "B<2>" LOC = "K18" ; # Bit 2 do vetor B NET "B<3>" LOC = "K17" ; # Bit 3 do vetor B NET "Soma<0>" LOC = "K15" ; NET "Soma<1>" LOC = "K14" ; NET "Soma<2>" LOC = "E16" ; NET "Soma<3>" LOC = "P16" ; A(3 downto 0); B(3 downto 0); Soma(3 downto 0)

Ambiente de Síntese: ISE Criar um diretório, colocando neste os arquivos VHDL (somador4.vhd) e o arquivo UCF (somador4.ucf) Abrir a ferramenta ISE como descrito nas transparências do trabalho anterior e criar um novo projeto (File  New Project), como abaixo: Cuidado: Não podem haver espaços em branco ou caracteres especiais no nome do caminho para o projeto, nem no nome do projeto, só ASCII puro

Definição do FPGA da Placa de Prototipação Para a placa que estamos trabalhando, o FPGA é um dispositivo da família Spartan3, escolher na janela como abaixo: Características do dispositivo FPGA

Inclusão dos Fontes A próxima janela é só um resumo do projeto, clicar Finish A seguir, na janela principal aparece o projeto vazio, como abaixo Deve-se então acrescentar os arquivos fonte (somador4.vhd e somador4.ucf) gerados anteriormente. Na janela Hierarchy, clicar com o botão direito no ícone do dispositivo (xc3s1200e-4fg320). No menu que surge, escolher Add Copy of Source Procurar no disco e adicionar os dois arquivos ao projeto

Ambiente ISE – Browser do Projeto Se todos os passos de criação foram corretamente seguidos, deve-se ter: Lembrem-se: aqui trabalha-se com síntese (implementação) e não com simulação Arquivo no topo da hierarquia do projeto

Passo 1 da Síntese: Síntese Lógica Transformar o VHDL em portas lógicas Para executar, dá-se duplo click em “Synthesize XST” Ao final tem-se o relatório de ocupação, ver exemplo de resultado abaixo 6 LUTs, de 17.344 disponíveis 12 pinos, de 250 disponíveis

Passo 2 da Síntese: Síntese Física Faz posicionamento e traçado de conexões dentro do FPGA Dar duplo click em “Implement Design” Em seguida, dar duplo click em “Generate Programming File”

Visualização no FPGA Selecionar FPGA Editor, executar o programa e visualizar o “layout” gerado automaticamente pelo processo de síntese 6 LUTs (em três SLICES)

Configurar o FPGA A síntese termina por gerar um arquivo com extensão .bit que pode ser usado para configurar o hardware no FPGA. Para tanto, usa-se o comando djtgcfg (Digilent JTAG Configuration Utility), instalado nas máquinas do Laboratório e no LAPRO. Executem djtgcfg ? para ver as opções do comando Conectem a placa ao computador via o cabo USB e digitem djtgcfg enum. Este comando deve comunicar-se com a placa para identificá-la e obter seus dados, que são impressos Agora digitem djtgcfg –d Nexys2 init. Este comando deve comunicar-se com a placa Nexys2 e listar os dispositivos Xilinx da mesma (o FPGA e a memória XCF04S, que pode guardar uma configuração completa do FPGA) Finalmente, para configurar o FPGA usem o comando abaixo, certificando-se de estar no diretório onde se encontra o arquivo gerado pela síntese: djtgcfg prog –d Nexys2 –i 0 –f somador4.bit O led amarelo de configuração carregada deve acender e talvez alguns leds de dados. Experimente com o projeto, certificando-se que ela faz somas de forma correta

TRABALHO A FAZER (P1) Note que este somador não tem “vai-um”. O trabalho proposto aqui é acrescentar o cálculo do vai-um no circuito Segue uma sugestão de modificações no código para resolver o problema: Modificar a saída “Soma” para ser um vetor de 5 bits Declarar dois sinais internos ‘AA’ e ‘BB’, ambos de 5 bits Fazer a “Soma <= AA + BB”, e criar ‘AA’ e ‘BB’ através de uma concatenação com ‘0’ à esquerda: AA <= ‘0’ & A; -- o símbolo & significa concatenação de caracteres ou bits em VHDL Modificar o UCF para um dos leds não usados (por exemplo o LD7) ser associado ao vai-um gerado (o quinto bit da soma) Simular o VHDL com o mesmo testbench do T1 para este novo VHDL Aplicar os passos descritos nas transparências 24-35 ao novo VHDL assim gerado, prototipando o novo hardware

TRABALHO A FAZER (P2) E se o resultado aparecesse nos mostradores de sete segmentos? Segue uma sugestão de modificação do projeto para realizar isto. Use a alteração proposta anteriormente e suponha que o resultado da soma vá ao display mais à direita da placa, e que o vai-um seja associado a algum LED (pode ser um LED não usado como LD4 a LD7 ou um ponto decimal de um dos mostradores de 7 segmentos): Ler o manual de referência para entender como funcionam os mostradores (fim da página 5 e página 6 do Nexys2_rm.pdf). Complicado? Abrir e estudar o código VHDL contido no link dspl_drv_nexys.vhd. Será dada explicação em aula sobre este VHDL. Acrescentar este arquivo no seu projeto: No ambiente ISE, ir na janela Sources (canto superior esquerdo) clicar com botão direito do mouse no ícone com o nome do dispositivo (xc3s1200E-4FG320) e escolhendo a opção de menu Add Source. Modificar o UCF para adaptá-lo ao novo formato da saída. Testar!

TRABALHO A FAZER (P2) E/A topo da hierarquia clock reset Para ajudar na compreensão desta parte do trabalho, segue abaixo um diagrama de blocos e conexões parcial do circuito resultante. Aqui, a expressão E/A corresponde a um par Entidade/Arquitetura que define um módulo de hardware descrito em VHDL Notem que se trata de uma descrição hierárquica: O somador e o driver são instanciados dentro da descrição VHDL da entidade, no topo da hierarquia de projeto Nem todos os pinos e fios estão nomeados explicitamente no diagrama. Completem-nos nos arquivo(s) VHDL E/A topo da hierarquia clock reset dec_ddp (8bits) D1 (6 bits) A (4bits) A S (4bits) D2 (6 bits) Conexões. descrevam em VHDL!! D3 (6 bits) B (4bits) an (4bits) B Vai-um D4 (6 bits) E/A somador E/A driver

(1) Módulos de base para o projeto Colocar em um diretório src os fontes do somador e o driver de display (disponível na página da disciplina) dspl_drv_nexys Somador 4 bits D1 AN 6 4 A 4 D2 6 Soma 5 D3 6 Dec_BPP B D4 8 4 6 ck reset

(2) Adicionar o arquivo UCF carry Adicionar no diretório src o arquivo UCF disponível na página dec_ddp (8bits) A (4bits) an (4bits) B (4bits) clock reset

(3) Criar um VHDL top carry PORT MAP PORT MAP SINAIS INTERNOS dec_ddp (8bits) d1 D1 AN A (4bits) 6 4 A 4 d2 D2 6 Soma soma 5 d3 D3 6 an (4bits) B (4bits) Dec_BPP B d4 D4 8 4 6 ck reset clock reset Ao se fazer os 2 port_map, sinais internos precisam ser criados

(4) Ligar os sinais internos soma(4) carry O vai-um de saída é o quinto bit da soma dspl_drv_nexys Somador 4 bits dec_ddp (8bits) D1 AN A (4bits) 6 4 A 4 D2 6 Soma 5 D3 6 an (4bits) B (4bits) Dec_BPP B D4 8 4 6 ck reset clock reset

(4) Ligar os sinais internos soma(4) carry dspl_drv_nexys Somador 4 bits dec_ddp (8bits) ‘1’& A & ‘1' D1 AN A (4bits) 6 4 A ‘1’& B & ‘1' 4 D2 6 Soma 5 Sinais de entrada para o codificador ligados (1 à esquerda), sem ponto decimal (1 à direita) D3 6 an (4bits) B (4bits) Dec_BPP B D4 8 4 6 ck reset clock reset

(4) Ligar os sinais internos soma(4) carry dspl_drv_nexys Somador 4 bits dec_ddp (8bits) ‘1’& A & ‘1' D1 AN A (4bits) 6 4 A ‘1’& B & ‘1' 4 D2 6 Soma “000000" 5 D3 6 an (4bits) B (4bits) dígito 3 apagado Dec_BPP B D4 8 4 6 ck reset clock reset

(4) Ligar os sinais internos soma(4) carry dspl_drv_nexys Somador 4 bits dec_ddp (8bits) ‘1’& A & ‘1' D1 AN A (4bits) 6 4 A ‘1’& B & ‘1' 4 D2 6 Soma “000000" 5 D3 6 an (4bits) B (4bits) '1' & Soma & '1’ Dec_BPP B D4 8 4 6 Sinal de soma ck reset clock reset

A ENTREGAR – T2 Um arquivo compactado (.zip, .rar, etc.) contendo: P1/ VHDL do somador com vai um VHDL do test bench arquivo .ucf arquivo .bit P2/ VHDL do top com instância do somador / driver VHDL do somador com vai um VHDL do driver