Sistemas computacionais Unidade Control de Unit Controlo Unidade de Execução x4 a) b) y1=0 y1,y2,y3,y4 (1) A y1,y4 (2) y3=1 x1 y1=1 y5 y6 y3=0 x1 x3 x2 y2,y4 (3) Controlo c) y1,y2,y3,y4 (1) A y2,y4 (3) x1 x2 B B y2,y3 (2) x2 a0 Begin a1 y1,y2,y3,y4 0 x2 a6 1 x1 1 a2 y1,y4 1 a3 0 0 x2 a7 0 1 x2 0 y2,y3 x1 1 a4 0 a5 y2,y4 x5 1 y7 a0 End Linguagens de alto nível (exemplos: C/C++, Java, Pascal, etc.) Linguagens de baixo nível (Assembly) Microprogramas Circuitos electrónicos Implementação em Software Flexível Reprogramável Barato etc. Mais lente; Não optimizado para aplicação; Tem grande atraso em resposta; etc. Implementação em Hardware Muito rápido; Optimizado para a própria aplicação; Eficiente do ponto de vista dos recursos e do tempo de execução; etc. Muito caro; Demora muito tempo para projectar; etc. max 1200 pinos (XC2VP125) I/O DLL1 DLL2 max 55616 slices (XC2VP125) Block RAM I/O Block RAM DLL3 DLL0 processador PowerPC max 2 (XC2VP125) multiplicação de 18 * 18 bits max 556 (XC2VP125) max 556 blocos (18 Kbits) ou 10 008 Kbits (XC2VP125) Rocket I/O transceiver blocks max 24 (XC2VP125) Fixed + Variable structure computer Processador standard F complementado com F V In/Out Um array de hardware reconfigurável V Humanos Supervisory Control G. Estrin, “Organization of Computer Systems – The Fixed Plus Variable Structure Computer”, Proc. Western Joint Computer Conf., New York, 1960, pp. 33-40. G. Estrin, “Reconfigurable Computer Origins: The UCLA Fixed-Plus-Variable (F+V) Structure Computer”, IEEE Annals of the History of Computing, 2002, pp. 3-9. 13 1947 1958 1959-1960 1962 1970 1970 1970 1971 1984 1985 1991 Shockley, et al. – primeiro transistor nos Bell Labs; Jack Kilby – primeiro circuito integrado; G. Estrin, ideia sobre computação reconfigurável; Hofstein, et al. - metal-oxide semiconductor fieldeffect transistor (MOSFET); Intel – primeira DRAM de 1024 bits; Fairchild – primeira SRAM de 256 bits; Ron Cline (Signetics) – primeiro PLD (PLA); Intel – primeiro microprocessador, 4004; Altera – primeiro CPLD; Xilinx - primeira FPGA, the XC2064™ uma forma principalmente nova para lógica reprogramável; Primeiro computador reconfigurável Algotronix CHS2X4 14 1990 1. 2. 3. 4. Virtex-4-5 1G Dual core Virtex-II Virtex-IIPro 256M Virtex-E Número de transístores 10 8 11 10 9 8 7 6 5 4 3 2 1 Memória estática FPGA da Xilinx Processadores Intel Itanium 2 (9MB cache) Itanium 2 4004 8080 8086 Intel286 Intel386 Intel486 Pentium Pentium II Pentium III (1971) – 2300; (1974) – 4500; (1978) – 29000; (1982) – 134000; (1985) – 275000; (1989) – 1.2106; (1993) – 3.1 106; (1997) – 7.5 106; (1999) – 9.5 106. 64M Virtex Pentium 4 2000 2010 Ano Revolutionary Architecture for the Next Generation Platform FPGAs, December 8, 2003. Available at: http://www.xilinx.com/company/press/kits/asmbl/asmbl_arch_pres.pdf. Moore’s low. Available at: http://www.intel.com/technology/mooreslaw/index.htm. Ralph H.J.M. Otten, Paul Stravers. Challenges in Physical Chip Design. Available at: http://delivery.acm.org/10.1145/610000/602923/p84-otten.pdf?key1=602923&key2=5142353611&coll= GUIDE&dl=GUIDE&CFID=4553126&CFTOKEN=37443806 Available at: http://conferences.ece.ubc.ca/isfpga2007/www/2006/panel.html 15 BCD segmentos abcd 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 y1 y2 y3 y4 y5 y6 y7 1111110 0110000 1101101 1111001 0110011 1011011 1011111 1110000 1111111 1111011 BCD a b c d y1 y2 BCD para segmentos 1 (y1) 2 y2 3 y3 y7 y5= abcd + abcd + abcd + abcd; 4 variáveis 16 dados BCD segmentos abcd 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 y1 y2 y3 y4 y5 y6 y7 1111110 0110000 1101101 1111001 0110011 1011011 1011111 1110000 1111111 1111011 y1 y2 y3 y4 y5 y6 y7 RAM/ROM (PROM) a b c d endereço 17 Conta o número de uns num vector binário y1 Begin a0 y2 1 a0 x1 0 End 0 y3 a1 x2 1 a3 y3,y4 a2 y1 a0 x1 x1 a2 y3 1 a1 a0 00 a1 y1 a1 01 a0 y2 a2 a3 a2 10 a0 y3 a2 a3 a3 11 a0 y3 a2 y4 a3 01 1 D2 00 10 11 00 10 11 00 10 11 D1 D1D2 D1 D1D2 D1 D1D2 x1 x1x2 x1x2 x1 x1x2 x1x2 x1 x1x2 x1x2 y2 x1 a3 y3,y4 18 x1 x2 y1 y2 y3 y4 D1 D2 F1 F2 19 DLL1 DLL1 CLB CLB PI PI CLB CLB PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB I/O I/O DLL2 DLL2 I/O RAM Block Block RAM RAM Block Block RAM I/O DLL3 DLL3 DLL4 DLL0 20 Spartan-IIE FPGA Family:. Available at: http://direct.xilinx.com/bvdocs/publications/ds077.pdf Spartan-3 Architecture Layout [1] CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB CLB CLB DCM PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB PI PI CLB CLB PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI PI CLB CLB PI PI CLB CLB PI PI CLB CLB CLB CLB PI PI CLB CLB DCM DCM PI PI PI PI CLB CLB DCM I/O I/O I/O I/O Multiplier Block RAM Block RAM Multiplier 21 1. Xilinx Spartan-3 FPGA Family: Complete Data Sheet. Available at: http://direct.xilinx.com/bvdocs/publications/ds099.pdf XC4000 FPGAs – relógio de sistema até 80 MHz [1] FPGA mais rápida de Achronix Semiconductor – até 1.93 GHz [2] Spartan FPGAs – Portas de sistema: max – 40K = 40 000 [1] Spartan-3 FPGA – Portas de sistema: max – 5M = 5 000 000 [3] 1. The Programmable Logic Data Book. Xilinx, Inc., 1999. 2. Achronix Semiconductor Announces 1.93 GHz 90nm 'ULTRA' FPGA Prototype First Silicon Success. APRIL 26 2006. Available at: http://www.dsp-fpga.com/news/db/?2614 3. Xilinx Spartan-3 FPGA Family: Complete Data Sheet. Available at: http://direct.xilinx.com/bvdocs/publications/ds099.pdf 22 16 0 0 14 0 14 0 0 12 0 12 0 0 10 0 10 0 0 It a nium - 2 800 V irt e x 2 V P 10 0 600 40 80 35 60 30 40 25 20 400 200 0 C lo c k - M H z 0 20 C o ns um o de e ne rgia - Wa t t 15 10 5 0 Peak p er f o r mance GF LOPs Sust ained p er f o r mance GF LOPs Malachy Devlin. Multi-FPGA systems for High Performance Computing applications Available at: http://www.iee.org/oncomms/sector/electronics/Articles/Object/23057E18-0825-84BD-6C1F87BD5B887FF9 Malachy Devlin, Reconfigurable Computing Architectures for High Performance Analysis. Available at: http://conferences.iee.org/medsip/Presentations/day1/Medsip-Reconfigurable-Computing-Architectures.pdf 23 FPGAs [1]: Podem ser considerados como ‘Soft’ ASICs; Introduzem um paradigma de computação novo; Não é necessário utilizar arquitectura von Neumann; Permitem aos utilizadores a implementarem algoritmos directamente no silício; Paralelismo é uma oportunidade chave; Permitem implementar qualquer interface externa. Malachy Devlin, Reconfigurable Computing Architectures for High Performance Analysis. Available at: http://conferences.iee.org/medsip/Presentations/day1/Medsip-Reconfigurable-Computing-Architectures.pdf 24 IntelR ItaniumR 2 (9MB cache) 1000000000 IntelR ItaniumR 100000000 R IntelR ItaniumR 2 R Intel Pentium 4 R R Intel Pentium II 10000000 R R Intel Pentium Intel486 1000000 Intel386 IntelI286 100000 R R Intel Pentium III TM TM 8086 10000 8080 4004 8008 1000 20 06 20 03 19 99 19 93 19 85 19 78 19 72 19 70 Dados da Intel 25 - Extende a lei de Moore a outras tecnologias Continuação da lei de Moore até 2019 vai reduzir o tamanho de transístores até uns átomos Depois uma tecnologia nova vai substituir a tecnologia actual dos circuitos integrados A lei de Moore não pode ser usada durante mais que 600 anos para qualquer tecnologia This file is licensed under Creative Commons Attribution 1.0 License 1 L.M. Krauss, G.D. Starkman, “Universal Limits of Computation”, 26 http://arxiv.org/abs/astro-ph/0404510&e=10129 Especificação Síntese Simulação comportamental Simulação funcional Verificação Implementação FPGA Simulação temporal verificação 27 Specification Specification Esquemáticos Linguagens de descrição de hardware Linguagens de especificação ao nível de sistema Linguagens de programação de uso geral Synthesis Synthesis Verification Verification Implementation Implementation FPGA 28 Specification Specification Synthesis Synthesis Celoxica DK Design Suite 1 Especificação em Handel-C Xilinx ISE 2 Especificação em VHDL ficheiro EDIF Verification Verification Implementation Implementation FPGA XST Implementação 1 http://www.celoxica.com 2 http://www.xilinx.com 29 Specification Specification Synthesis Synthesis Especificação em C/C++ Verification Verification Implementation Implementation FPGA Partição software/ hardware Simulação do algoritmo Geração do código sintetizável numa HDL Geração de interfaces software/hardware Envio para ferramentes de implementação 1 http://www.celoxica.com 2 http://www.xilinx.com 30 Complexidade de circuito (escala logarítmica) Platform FPGA Productividade de desenvolvimento (escala logarítmica) - herdado de ASIC Tempo 31 % de sistema reconfigurável 70 60 50 40 30 20 10 0 2005 2006 2007 2008 1 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 International Technology Roadmap for Semiconductors, 2005, Design 2019 2020 32 O nosso departamento tem experiência com placas do protótipo seguintes Annapolis FireFlyTM (FPGA XC6216/6264) XESS XS40 (FPGA XC4010XL) Alpha Data ADM-XRC (FPGA Virtex-EM XCV812E) Alpha Data ADM-XPL (FPGA Virtex-II Pro XC2VP7) XESS XSA100 (FPGA Spartan-II XC2S100) Trenz TE-XC2Se (FPGAs Spartan-IIE XC2S300E/400E) Celoxica RC100 (FPGA Spartan-II XC2S200) Celoxica RC200 (FPGA Virtex-II XC2V1000) Celoxica RC10 (FPGA Spartan-3 XC3S1500L) DETIUA-S3 (FPGA Spartan-3 XC3S400 ) NEXYS2 (FPGA Spartan-3E XC3s500e) FX12 (FPGA Virtex-4) XUPV5-LX110T Development System (VPGA Virtex-5 XC5VLX110T) - 1997-2001; - 1998-2002; - 2000-2003; - 2003; - 2002; - 2002; - 2002; - 2003; - 2005; - 2005; - 2008; - 2008; - 2009 A placa foi desenvolvida por Manuel Almeida Software foi desenvolvido por Bruno Pimentel 33 Address FLASH CPLD Control AM29LV160D XC9572XL FPGA Data Data Spartan-3 Control Control XC3S400 USB Interface Controller socket DLP-USB245M PC Control r Extension connectors Extension connectors 34 Bluetooth module USB module 35 a b c d e f g h i j k l 1 1 1 1 1 1 1 1 1 1 0 2 0 3 0 4 1 5 1 6 1 7 0 8 1 9 1 0 1 0 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 1 0 0 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1 0 0 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 1 36 1 2 3 4 5 6 7 8 ABCDEFG 1 - - 1 - - 1 - - 0 - 1 1 - - 1 - -; 0 1 - - - - 0 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 11 - 1 0 - 1 - 0 0 ABC DEFG 0 - 1 0 -1 37 1 2 3 4 5 6 7 8 9 10 38 1) 2) 3) 4) 5) 6) 7) 17 6 18 9 5 21 … Raíz da árvore binária 6 5 Nó esquerdo do nó 6 porque 5 < 17 e 5 < 6 Nó diréito do nó 6 porque 9 < 17 e 9 > 6 Nó direito do nó 18 porque 21 > 17 e 21 > 18 17 18 9 21 case 2: switch(state) { case 0: if (reg != lf) next_state(1); else next_state(4); break; case 1: par { next_state(2); local_stack[local_sp]= reg; local_sp++; reg=RAM[reg][2]; new_module(2); } break; case 2: par { next_state(3); output_stack[output_sp] = 000@RAM[reg][0]; output_sp++; } break; EDIF bit-stream Carregar 10 15 16 17 11 12 rc 13 18 20 mover 19 14 apagar 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 not (SW3 = '1' and SW2 = '0' and SW1 = '0') 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 a) entity led_on_off is Port ( clk : in std_logic; reset : in std_logic; led : out std_logic); end led_on_off; Pin: T9 48 MHz Pin: P15 reset c) NET "clk" LOC = "T9" ; NET "reset" LOC = "P15" ; NET “led" LOC = "C15" ; LED Pin: C15 process 25 0 d) Signal declaration architecture Behavioral of led_on_off is b) signal internal_clock : std_logic_vector (25 downto 0); begin Sensitivity list process(clk,reset) 00000000000000000000000000 begin if reset = ‘0’ then Bit-stream loading internal_clock <= (others=>’0’); elsif clk’event and clk = ‘1’ then e) internal_clock <= internal_clock+1; end if; concurrent signal end process; assignment led <= internal_clock(internal_clock’left); end Behavioral; switch on/off (~1 Hz) Synthesis Mapping, placement, routing Bit-stream generation a) c2 r3 c1 3 m2 b) Begin 7 r16 c11 r10 c12 c 4 r9 9 r13 c14 6 c5 r6 r3 r6 r10 r13 0 r15 3 6 7 9 a0 x1 1 y1,y2,m2 a1 y3 c 7 r8 d) a2 y1,y4,m2 a3 End y5 a4 switch(module) { case 0: switch(state) { // . . . . . . . . . . . . . . . . . . } break; // . . . . . . . . . . . . . . . . . . . . . .. case 2: switch(state) { case 0: if (reg != 31) next_state(1); else next_state(4); break; case 1: par { next_state(2); new_module(2); } break; case 2: par { next_state(3); } break; case 3 par { next_state(4); new_module(2); } break; case 4: par { end_module(); } break; } // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Address FLASH CPLD Control AM29LV160D XC9572XL FPGA Data Data Spartan-3 Control Control XC3S400 USB Controller PC Interface DLP-USB245M Control r Extension connectors Extension connectors Socket Hardware foi desenvolvido pelo Manuel Almeida (aluno de Mestrado) Software foi desenvolvido pelo Bruno Pimentel (aluno de doutoramento) Bluetooth module USB module Bluetooth Socket Comunicação sem fios (wireless) Bluetooth DETIUA-S3 B Comunicação sem fios (wireless) RC200 Examplo: Puzzle Processador Unidade de controlo Memória Unidade de execução Entrada e saída Processador Unidade de controlo Memória Unidade de execução Entrada e saída Linguagem C: Memória int main(int argc, char* argv[]) { int X=3, Y=4, Z; Z = X + Y; // ........ return 0; } Compilador C Assembler 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Memória 28 29 2A 2B 2C 2D 2E 2F 30 31 32 … C7 45 FC 03 00 … 2 E = 3010 = 001011102 Código decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Código Código hexadecimal binário 0 1 2 3 4 5 6 7 8 9 A B C D E F 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 C7 45 FC 03 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Processador C7 45 FC 03 Unidade de controlo Interface Memória Entrada e saída Unidade de execução 1. Ler instrução/dados; C7 45 FC 03 2. Executar instrução 3. Escrever/gravar os resultados se necessário 2. Executar instrução C7 45 FC 03 Begin Unidade de controlo 0 Operação elementar x1 1 y1,…yN x1,…xL y1,y2 y3 Unidade de execução y1,y4 End PC – 3 GHz significa 3 000 000 000 operações por segundo Memória 28 29 2A 2B 2C 2D 2E 2F 30 31 32 … C7 45 FC 03 00 … Processador Unidade de controlo Interface Unidade de execução George Boole propôs um sistema algébrico que permite tratar valores binários Agora este sistema chama-se Álgebra Booleana Álgebra Booleana permite descrever funcionamento de sistemas digitais Os leis da álgebra Booleana permitem simplificar sistemas digitais Processador e outros blocos de computador são normalmente sistemas digitais O desenvolvimento de sistemas digitais é baseado na álgebra Booleana A, B são interruptores F é uma lâmpada Tarefa: a lâmpada deve estar ligada só quando A = B = 1 A (B) = 1 V A (B) = 0 está ligada V está desligada 1. AND (e) A 0 0 1 1 B 0 1 0 1 A B V 2. OR (ou) F 0 0 0 1 A 0 0 1 1 B 0 1 0 1 A F=AB F 0 1 1 1 F=A+B (negação) B 0 1 0 1 A V A B F (ou exclusivo) F 0 1 1 0 F=A + B B A B 4. NOT A 0 0 1 1 B V 3. XOR A F 0 1 1 0 A F V F F F=A A B A(B) A(B) A Tarefa: a lâmpada deve estar ligada só quando A = B = 1 1. AND (e) A 0 0 1 1 B 0 1 0 1 V A(B) A(B) A F=AB B Circuito 2: A B V F 0 0 0 1 Circuito 1: F=AB V A A B B F F Tarefa: a lâmpada deve estar ligada só quando A = B = 1 1. AND (e) A 0 0 1 1 A B B 0 1 0 1 F 0 0 0 1 F=AB Circuito 3: V 1 KOhm 1 1 0 0 A B F=AB A Não utilizar portas lógicas 1 0 1 0 1 1 Circuito 0 A Utilizar portas lógicas 0 1 1 0 1 B 0 0 0 B 0 1 1 F=AB Circuito F=AB A Não utilizar portas lógicas 0 1 1 1 0 0 1 1 1 1 1 0 0 1 B Circuito F=AB +5V A A F1=AB B B A B GND F=F1+F2=AB+AB F2=AB F= F1F2 = F1+F2. +5V Edição de esquemas Bibliotecas de componentes Janela Timing – resultados de simulação Exemplo 1. O exemplo ilustra todos os passos necessários para construir um circuito que inclui 2 interruptores e ascende uma lâmpada quando ambos os interruptores estão ligados. 1 Seleccione uma biblioteca 2 Filtro para pré-selecção de símbolos 3 4 Agora é possível colocar o símbolo escolhido no esquema clicando para tal com o botão esquerdo do rato na zona pretendida 5 Escolha o símbolo desejado clicando sobre ele duas vezes com o botão esquerdo do rato Pode-se mudar a orientação do símbolo (enquanto não colocado) com a ajuda das teclas . 7 Para sair do modo de colocação de símbolos 8 Seleccione e coloque uma lâmpada (LED) Coloque mais uma instância do símbolo SPST switch 6 9 Mude para a biblioteca Discretes e instancie um elemento gnd Mude para a biblioteca Connectors e instancie um elemento +5V 10 11 Para mudar a posição de um símbolo basta apontá-lo com o rato e arrastar para a posição desejada. Para seleccionar o SPST Switch tem que pressionar simultaneamente a tecla SHIFT. Para interligar as portas lógicas deve primeiro seleccionar com o rato um pino clicando na sua extremidade Deste modo pode-se interligar todas as portas lógicas. A forma de qualquer ligação é modificável com a ajuda do rato. 14 11 13 Para apagar um símbolo ou uma linha completa, seleccione-o(a) e carregue na tecla DEL A seguir clica-se novamente no mesmo ponto e arrasta-se o rato até ao pino do símbolo com o qual se pretende estabelecer a ligação Para apagar um fragmento de uma linha utiliza-se o botão Zap 12 15