1 Outline Hardware reconfigurável (FPGA); Placas de desenvolvimento ; Ferramenta ISE 6.x. Exemplos de desenvolvimento de circuitos; Interface entre FPGAs e dispositivos periféricos; Tutorias 2 I/O I/O DLL1 Block RAM DLL2 Block RAM DLL3 DLL0 3 Xilinx Spartan-II Xilinx Spartan-IIE Xilinx Spartan-3 Xilinx Virtex-II Xilinx Virtex IIPro 4 CLBs 95 625 1536 237.5 62.5 14000 12000 10000 XC4010XL Spartan-IIe Virtex-II Virtex-IIP 8000 6000 4000 2000 0 1st Qtr 5 I/O Block RAM I/O DLL2 Block RAM DLL3 DLL concede 4 fases do sinal de relógio principal, podendo duplicar o relógio ou dividí-lo por 1.5, 2, 2.5, 3, 4, 5, 8, 16. DLL1 CLK0 CLK90 CLK180 CLK270 I/O DLL0 I/O Look-Up Table Package Pin Programmable Bias and ESD Network Carry and Control Logic S l i c e Package Pin Programmable Output Buffer Internal Reference Look-Up Table Programmable Delay Programmable Input Buffer To Next I/O To other External VREF Inputs of Bank Package Pin Carry and Control Logic 2 Slice 1 6 Package Pin Programmable Bias and ESD Network Package Pin Programmable Output Buffer Internal Reference Programmable Delay Programmable Input Buffer Package Pin To Next I/O To other External VREF Inputs of Bank 7 Logic Cell (LC) Slice S l i c e 2 Slice 1 CLB 1 CLB = 2 Slices = 4 LC 8 9 16-bit shift register 16 x 1 bit synchronous RAM 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 f f f f f f f f f f f f f f f f 10 16 x 2-bit or 32 x 1-bit synchronous RAM or 16 x 1-bit dual-port synchronous RAM 11 5 9 1 ? 1 4:1 multiplexer 12 6 19 1 ? 1 8:1 multiplexer 13 14 DLL concede 4 fases do sinal de relógio principal, podendo duplicar o relógio ou dividí-lo por 1.5, 2, 2.5, 3, 4, 5, 8, 16. CLK0 CLK90 CLK180 CLK270 15 16 I/O Block RAM I/O DLL2 Block RAM DLL3 DLL concede 4 fases do sinal de relógio principal, podendo duplicar o relógio ou dividí-lo por 1.5, 2, 2.5, 3, 4, 5, 8, 16. DLL1 CLK0 CLK90 CLK180 CLK270 I/O DLL0 I/O Look-Up Table Package Pin Programmable Bias and ESD Network Carry and Control Logic S l i c e Package Pin Programmable Output Buffer Internal Reference Look-Up Table Programmable Delay Programmable Input Buffer To Next I/O To other External VREF Inputs of Bank Package Pin Carry and Control Logic 2 Slice 1 17 max 1200 pins (XC2VP125) I/O DLL1 DLL2 max 55616 slices (XC2VP125) Block RAM I/O Block RAM DLL3 DLL0 PowerPC processor blocks max 4 (XC2VP125) 18*18 bit multiplier blocks max 556 (XC2VP125) max 556 blocks (18 Kbits) or 10 008 Kbits (XC2VP125) Rocket I/O transceiver blocks max 24 (XC2VP125) 18 19 Memória Flash 64 Mbit JTAG Alimentação Porta paralela 12 V CPLD XCR3128XL relógio 80 MHz Interruptor de alimentação SRAM 0 256K x 36 bit SRAM 1 256K x 36 bit Vídeo DAC VGA FPGA XC2S200 -5-FG456 Descodificador de entrada de vídeo Conector de expansão 20 E22 - clock F20 - sync R[7:0] K22,K21,K19,L22,L21,L18,L17,L20 G[7:0] H19,H21,J19,J22,J18,J20,K18,J21 B[7:0] F21,F19,F22,G19,G20,G18,G21,H18 DAC R G B A10 F18 - blank relógio B10 H-sync V-sync relógio F11 8 10 12 14 18 20 22 24 28 30 32 34 38 40 42 44 47 45 43 41 37 35 33 31 27 25 23 21 17 15 13 11 5 FPGA E21 D22 E11 W18 AA20 Y18 V17 AA19 AB20 W17 AA18 V16 Y17 AB19 AB18 W16 AA17 Y16 V15 AB17 AB16 Y15 AA15 AB15 W15 Y14 V14 AA14 W14 AB14 V13 Y13 AA13 AB13 W13 Y11 V13 W18 W13 AB14 AA19 AA20 AB20 W14 AA14 Y18 U20 W11 A11 A22 Enable V17 80 MHz AB13 W17 AA18 V20 LEDs Enable FPGA Conector de expansão AA13 Y13 21 FPGA Memória Flash Data(15:8): E20,D21,C22,B19,C18,D17,A19,B18 Data(7:0): Interruptores Porta paralela Data Control Status Y21,T22,R21,N22,K20,H20,H22,D20 FP_RW FP_COM[2:0] CPLD FP_PARPORT_MASTER AA12 Y12 V12 ZZ,ADSP AA10 Y10 (0) BWE ler-1/ escrever-0 clock Output enable (OE) Chip enable (CE) ADV Data Address (17:0) RAM estática (banco 1) V11,Y8,W8,W7,AA7 AB6,AA6,V8,AB5 AA5,Y7,W6, AB4, AA4,Y6,V7,AB3,W5 P(3:0): L5,L1,L3,L4 C8: B3(7:0): F1,F2,H5,G3,G4,E1,E2,F3 B8: B2(7:0): G5,F4,E3,D2,F5,C1,E4,B1 D9: B1(7:0): L6,K2,K4,K3,K1,K5,J1,J3 A8: B0(7:0): J2,J5,H1,J4,H2,H3,G1,H4 A5,D6,C6,B5,E7,A4 E6,B4,A3,B3,D5,C5 Address (17:0) A9,E8,D8,C7,D7,B6 D10 A7 E9 C9 E10 (0) (0) (0) Data ADV Chip enable (CE) Output enable (OE) RAM estática (banco 0) clock ler-1/ escrever-0 BWE A20 U12 address(23:0): E15,A17,D15,C16,D14,E14,A16, C15,B15,E13,A15,F12, C14,B14,A14,D13,C13,B13,E12, A13,B12,D12,C12,D11 C10 ZZ,ADSP B9 (0) FPGA FPGA STS:D16, Byte:E16, CE:B17, OE:C17, WE:A18 AB10 W10 AB8 V9 AA9 (0) (0) (0) V4,V3,W3,Y2 P(3:0) P3,P5,R1,P4,P2,N5,P1,N4 B3(7:0): W9 N3,N2,M5,N1,M4,M3,M6,M1B2(7:0): AB9 22 W2,Y1,U4,V2,W1,T4,T3,U2B1(7:0): Y9 T5,V1,R5,U1,T2,R4,T1,R2 B0(7:0): V10 Controlo de USB USB RS232 Controlo de VGA Interruptor de alimentação on RAM estática 256Kx16-bit FPGA XC2S300E -6FT256 off VGA Memória Flash 1Mx8/512Kx16-bit Botões, interruptores, LEDs LED L5 LED de alimentação JTAG Oscilador de utilizador 25MHz CPLD Oscilador XC9572XL PRR USB 48MHz D7 D6 Barramento de memória PROGRAM RUN RESET 23 N16 N14 N15 Write Enable VP VM RCV transmissor/ VPO receptor FSEO de USB OE Address (2:0) Botão de reset P15 25 MHz B8 48 MHz T9 D16 Byte Address(21:1): Memória P9 A(19:1) Enable Flash N9 Chip Enable 1Mx8/ R14 Data(15:0): 512Kx16-bit Ready/Busy D(15:0) J13 T14 P10 G12 J16 R10 F13 J15 T11 F12 D(15:0)K13 R11 D+ K12 P12 USB E14 RAM E13 L12 T12 D- J22 estática D15 A(18:1) K16 R12 D14 256K P11 C16 K15 T13 x16-bit BLE:L15, BHE:K14 P16 R13 L16 M11 LEDs: 1 – on 0 - off L13 P13 DIP 0 J14 N12 1 1 D(7:0) G15 N11 0 F14 CPLD N10 E15 B1 LEDs XC9572XL A(2:1) B16 M10 T10 D(7:0) (H15,F16,H13) G13 G14 CS:M13, OE:L14 E10 CON E# D9 C9 B9 E11 D12 R G B VGA HSYNC VSYNC E A8 R9 Output D10 C10 A11 B11 C11 D11 B10 A10 M14 B4 LED L5 C15 RS232 24 Chip select Read/Write M16 M15 B13 C12 Oscilador 100 MHz Porta paralela 4 interruptores Memória Flash 256 KByte Alimentação 9V Display de segmentos Botão CPLD XC9572XL FPGA XC2S100 (Spartan-II) RAM estática 16 MByte 25 CLBs Número máximo de pinos de I/O RAM distribuída (bits) Blocos de RAM (Kbits) XC2S15 XC2S30 8x12 12x18 86 132 6 144 13 824 16 24 XC2S50E* 16x24 182 24 576 32 XC2S100E* 20x30 202 38 400 40 XC2S150E* 24x36 265 55 296 48 XC2S200E* 28x42 289 75 264 56 XC2S300E 32x48 329 98 304 64 XC2S400E 40x60 410 153 600 160 XC2S600E 48x72 514 221 184 288 FPGA Array de 26 Tabela 1 – FPGAs das famílias Spartan-II/Spartan-IIE da Xilinx 27 28 FPGA HGS ISE 5.x VHDL Hardware templates DK1 Placas de protótipo Teoria de projecto lógico Handel-C Interacção com os dispositivos periféricos: rato, teclado, monitor, LCD, RAM,29etc. 30 II. Hardware reconfigurável e placas de desenvolvimento A. FPGAs de famílias Spartan-II/Spartan-IIE B. A placa RC100 da Celoxica C. A placa TE-XC2Se da Trenz Electronic D. A placa XSA100 da XESS III. Ferramenta ISE 6. Exemplos de desenvolvimento de circuitos para as FPGAs da família Spartan-IIE A. Ferramenta ISE e os passos básicos de desenvolvimento B. Desenvolvimento de um circuito trivial C. Interacção com os botões, interruptores e LEDs através do CPLD D. Interacção com o LCD E. Projecto de MEFs e simulação F. Uso de DLLs IV. Exemplos de desenvolvimento de circuitos para as FPGAs da família Spartan-II A. Projecto de um conversor de códigos B. Interacção com o rato C. Interacção com a RAM estática D. Exemplo de projecto baseado em EDIF 31 Projecto baseado em VHDL incluíndo os tópicos seguintes: • criação do módulo VHDL no nível superior da hierarquia; • geração do ficheiro de restrições do utilizador (User Constraints File - UCF); • implementação de módulos VHDL sintetizáveis descritos a nível comportamental; • implementação de módulos VHDL sintetizáveis descritos a nível estrutural; • ligação de módulos de biblioteca para possibilitar o desenvolvimento hierárquico; • ligação com as bibliotecas VHDL; Projecto esquemático incluíndo os tópicos seguintes: • criação de módulos no editor esquemático; • geração de módulos de biblioteca para possibilitar o desenvolvimento hierárquico; • utilização de bibliotecas esquemáticas; 32 33 Simulação em ModelSim incluíndo os pontos seguintes: • criação de ficheiros com entradas de teste (testbenches); • fluxo de simulação funcional; Desenvolvimento de máquinas de estados finitos (MEF) Utilização da ferramenta Core Generator Implementação do projecto 34 10 15 16 17 11 12 rc 13 18 20 mover 19 14 apagar 35 criar código VHDL adicionar um estado simular a MEF adicionar uma transição adicionar o sinal reset inserir comentários ldb adicionar um vector lb 36 = '0') not (SW3 = '1' and SW2 = '0' and SW1 Uma área diferente que é extremamente importante hoje em dia, é o projecto a partir das linguagens de especificação a nível de sistemas, tais como SystemC, Handel-C e muitas outras. Para a leccionação foi escolhida a linguagem Handel-C e o ambiente DK1 desenvolvido por Celoxica. Esta escolha é fundamentada pelas razões seguintes: todas as ferramentas necessárias para o desenvolvimento imediato de sistemas digitais baseados em FPGA podem ser facil e rapidamente recebidos da Celoxica juntamente com manuais e exemplos compreensivos; as ferramentas são directamente integráveis com ISE 6 da Xilinx; por exemplo, é possível construir no ambiente DK1 os módulos VHDL a partir da sua especificação em Handel-C e utilizá-los posteriormente como componentes de biblioteca em ISE 6; a Celoxica fornece alguns componentes complementares que são úteis para o desenvolvimento de sistemas digitais, tais como os controladores para dispositivos periféricos (monitor VGA, teclado, rato, memória, etc.), a biblioteca de macros Handel-C, as ferramentas de depuração e simulação, etc.; finalmente a nossa própria experiência indica que as ferramentas da Celoxica permitem resolver problemas de projecto bastante complicados. 37 V.Sklyarov, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente Johnny Santos, Nuno Duarte, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente (Projecto 1) Diogo Gomes e Nuno Carvalho, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente (Projecto 2) Cláudio Teixeira e João Girão, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente (Projecto 3) João Paulo Barraca e Nuno João Sénica, Síntese e Implementação de Circuitos Digitais Reconfiguráveis Dinamicamente (Projecto 4) Todos os 4 projectos estão apresentados na WebCT: Página http://webct.ua.pt, "2º Semestre", a disciplina "Computação Reconfigurável". 38 Computação Reconfigurável. WebCT, Tutorias e Projectos V. Sklyarov, I. Skliarova Utilização da linguagem Handel-C na criação e implementação de um Gap Puzzle Bruno Pimentel Desenvolvimento de um circuito em Handel-C para experiências com máquinas de estados finitos Joel Arrais Desenvolvimento de um circuito para operações sobre vectores booleanos e ternários Bruno Pereira Desenvolvimento de uma calculadora baseada numa FPGA e num touch panel Rui Costa, João Limas, Inês Oliveira 39 Pedro Almeida, Manuel Almeida, Desenvolvimento de um circuito aritmético a partir da sua especificação em 40 41 32 bits, 66 MHz Programming and alternative data exchange through USB port Expansion connector Data exchange Programming and alternative data exchange through a parallel port 42 start bit 4 7 8 data bits stop bit 6 8-11 5 1 2 3 4 5 6 7 8 11 0 RS232out <= line_RS(ind)(tmp); lclk if rising_edge(lclk) then subtype word10 is std_logic_vector (9 downto 0); type serial_pac is array (11 downto 0) of word10; constant line_RS : serial_pac := ( x"1B"&"01", x“54"&"01", 2) touch command x“48"&"01", 3) horizontal labeling 4) upper left touch field x“0D"&"01", 5) lower right touch field x“19"&"01", 6) return code x“41"&"11", 7) key with frame x"02"&"01", 8-11) the world STOP x“53"&"01",x“54"&"01",x“4F"&"11“,x“50"&"11“, 12) end 43 x“00"&"11“); 0 9 44 45 46 47 48 Exemplo 1. Projecto simples implementado em VHDL O exemplo demonstra todos os passos necessários para descrever, sintetizar e implementar em FPGA um circuito simples que controla um LED ligado a um pino da FPGA, ligando e desligando-o com uma frequência de ~1 Hz. FPGA da família Spartan-IIE: XC2S300E Divider LED clk Pino: T9 Pino: C15 led reset Pino: P15 RESET 48 MHz 49 entity led_on_off is Port ( clk : in std_logic; reset : in std_logic; led : out std_logic); end led_on_off; Pino: T9 48 MHz Pino: P15 RESET LED architecture Behavioral of led_on_off is signal internal_clock : std_logic_vector (25 downto 0); begin process(clk,reset) begin if reset = ‘0’ then internal_clock <= (others=>’0’); elsif clk’event and clk = ‘1’ then internal_clock <= internal_clock+1; end if; end process; led <= internal_clock(internal_clock’left); end Behavioral; 50 Código VHDL do divisor 1 segundo 25 10 0 architecture Behavioral of led_on_off is signal internal_clock : std_logic_vector (25 downto 0); begin process(clk,reset) 00000000000000000000000000 begin if reset = ‘0’ then internal_clock <= (others=>’0’); elsif clk’event and clk = ‘1’ then internal_clock <= internal_clock+1; end if; end process; led <= internal_clock(internal_clock’left); end Behavioral; 51 Fontes do projecto. Exemplos: ficheiros VHDL, esquemáticos, ficheiros de biblioteca, etc. Processos para a fonte corrente. Exemplos: modelação, síntese, implementação, edição, geração de símbolos da biblioteca, geração de bitstreams, etc. Edição de ficheiros diferentes. Exemplos: código VHDL, ficheiros de restrições do utilizador, etc. Resultados dos processos activos. Exemplo: resultados de síntese do código VHDL 52 Comece aqui 1 2 3 53 Slide seguinte 3 4 5 6 7 Slide seguinte 54 7 Fontes do projecto. Exemplos: ficheiros VHDL, esquemáticos, ficheiros de biblioteca, etc. 55 Fontes do projecto. Exemplos: ficheiros VHDL, esquemáticos, ficheiros de biblioteca, etc. 9 Slide seguinte 8 56 12 11 9 10 57 13 14 15 16 17 18 58 18 59 library IEEE; process(clk,reset) use IEEE.STD_LOGIC_1164.ALL; begin use IEEE.STD_LOGIC_ARITH.ALL; if reset = ‘0’ then use IEEE.STD_LOGIC_UNSIGNED.ALL; internal_clock <= (others=>’0’); elsif clk’event and clk = ‘1’ then entity led_on_off is Port ( clk internal_clock : in std_logic;<= internal_clock+1; if; reset : in end std_logic; end process; led : out std_logic); led <= internal_clock(internal_clock’left); end led_on_off; architecture Behavioral of led_on_off is signal internal_clock : std_logic_vector (25 downto 0); begin end Behavioral; 60 my_in_bus 7 6 5 4 3 2 1 0 my_out_bus 2 3 4 5 61 19 62 20 22 21 23 63 Slide seguinte 24 25 26 27 28 Clique duas vezes com 64 o botão esquerdo do rato 29 30 Desloque o cursor e carregue no botão direito do rato 65 33 32 31 66 37 34 35 48 MHz HIGH 50% 40 38 36 39 NET "clk" TNM_NET = "clk"; TIMESPEC "TS_clk" = PERIOD "clk" 48 MHz HIGH 50 %; 67 41 44 seleccione 43 duas vezes no 42 Carregue botão direito do rato 68 48 45 47 44 46 69 49 50 70 52 51 54 Seleccione Carregue duas vezes no 53 botão direito do rato 55 71 Utilização da placa de protótipo TE-XC2Se da Trenz para testar o circuito 58 57 Pressione 72 60 LED 59 Pressione 61 Pressione para inicializar 73 74