tcpipchip escreveu:O Marcelo S. pode dar a opnião.
eu? mas eu nao conheco quase nada de ARM e menos ainda de NXP... bom, mas se for para chutar, eu diria que talvez seja similar aos coprocessadores de IO da freescale. no caso da freescale, eu considero o conceito realmente muito bom e acho que soh perde mesmo para um conceito de IO packetizado. os primeiros coprocessadores de IO que eu conheco da antiga motorola surgiram em 1990 na familia 683xx. na epoca eles lancaram muitas aberracoes malucas, como coprocessador de IO para graficos vetoriais, mas a maioria era para clientes especificos e com o tempo os produtos morreram... porem pelo menos dois modelos de coprocessadores de IO sobreviveram ateh os dias de hoje: o TPU e o CPM.
o TPU eh uma especie de coprocessador de IO generico:

a ideia eh simples: um pequeno core RISC executa um microcodigo otimizado que desempenha funcoes de IO genericas sem intervencao no core principal (68k, coldfire ou powerpc). o pulo do gato eh a flexibilidade: vc programa o core RISC para imitar certa interface, entao, enquanto os tradicionais fabricantes cabeca-ocas entopem os chips de interfaces e mesmo assim sempre falta uma, vc tem a flexibilidade de tirar da cartola qualquer interface possivel mexendo no microcodigo do core RISC. de certa forma, eh um meio termo entre um hardware dedicado e uma FPGA, pq vc tem liberdade para escolher as funcionalidades. e tem gente que pensa que o supra-sumo do IO eh usar DMA para ativar GPIOs. sim, eh rapido, mas o DMA nao tem capacidade de decisao: ele vai transferir um bitmap fixo e a capacidade de decisao depende da performance do core principal. eh um pouco melhor do que ficar fazendo toggle em pino de GPIO, mas dependendo do caso vc joga fora a performance soh para fazer isso. com um coprocessador de IO como o TPU, vc tem alguma capacidade de decisao e isso flexibilida bastante as coisas: o core RISC dedicado para o IO vai fazer a parte chata e o core principal fica livre para fazer outras coisas.
soh para ilustrar, aqui tem alguns exemplos de variados da TPU:
http://www.eslave.net/tpu/source/source.shtmlpara ter uma ideia da capacidade da TPU original de 1990, ela podia tocar 13 transmissores e 3 receptores a 9600 bps ao mesmo tempo. nem eh muito, mas pense bem: isso eh tirado do nada, no aspecto que nao tem hardware de UART ali dentro. quanto a eTPU usada nos powerpcs e coldfires, aparentemente ela tem o dobro de canais e roda com um clock muito maior. mas para a mesma aplicacao, ao inves da quantidade eles indicam a velocidade, sendo 1.4Mbps no powerpc e 830 kbps no coldfire. imagino que a NXP esta oferecendo algo bem similar e essas estimativas de performance devem dar uma ideia se eh isso mesmo e se a performance deles eh boa ou nao.
aqui tem algumas aplicacoes da eTPU dos dias de hoje:
http://www.freescale.com/webapp/etpu/jah o conceito do CPM eh muito similar ao TPU, contudo, a coisa nao apenas comecou mais complexa e especializada, como evoluiu em uma escala realmente impressionante em termos de funcionalidade. quando surgiu em 1990, o CPM era baseado em um core RISC que falava com o core 68k hospedeiro atraves de uma memoria RAM dual-port:
http://www.freescale.com/webapp/sps/sit ... de=MC68302era dificil estimar precisamente onde comecava e termina o hardware do CPM, mas procurando pistas nas analises de performance, era facil perceber que o hardware realmente nao fazia muito mais que serializar e de-serializar as FIFOs e todo o resto era feito pelo core RISC, incluindo o DMA, que jah operava com multiplos canais e ring-buffers em 1990, em uma epoca que os PCs ainda precisavam gerar uma interrupcao no fim do frame recebido para reprogramar o controlador de DMA para apontar para um novo frame... em termos de protocolos, inicialmente eles suportavam protocolos simples, como HDLC, UART e outros menos importantes, bem como interfaces fisicas nao-multiplexadas e multiplexadas (TDM, CGI e IDL). mais tarde surgiram variacoes com mais interfaces e mais protocolos, incluindo ethernet, ATM e capacidade para HDLC e PPP multicanal em cima de TDM. essencialmente era o mesmo chip rodando com clock maior e com um patch no microcodigo para mais opcoes de protocolos e interfaces.
soh para ilustrar a flexibilidade de adicionar um novo protocolo, aqui tem o manual do patch para ATM:
http://cache.freescale.com/files/32bit/ ... TOM1UM.pdfpor exemplo, na pagina 32 ele comenta sobre o scrambler para a linha ATM... obviamente isso nao pode ser feito por hardware, pq eh uma caracteristica que foi adicionada pelo suporte a ATM, que originalmente nao existia. isso mostra a flexibilidade de se ter isso feito por um coprocessador de IO. a grosso modo, ali onde ele fala em performance de interfaces HDLC, ATM e ethernet, ele esta considerando a performance do core RISC em cima destes protocolos.
isso ilustra o que um coprocessador de IO consegue fazer e qual eh o caminho para obter um equilibrio perfeito entre hardware e software: como suportar protocolos futuros? atraves de software. mas o software nao vai ter performance suficiente para, por exemplo, serializar e deserializar uma interface fisica ATM... entao a solucao foi desenvolver um hardware que serializa e de-serializa um frame generico, deixando justamente a montagem do frame para o software. claro, se vc jah tem ideia do que vai precisar em termos de hardware, vc pode suprir, por exemplo, o timeslot assigner para interface fisica TDM eh um hardware especializado pq opera bit a bit e isso mataria o core RISC.
aqui comeca a surgir a diferenca entre o TPU (bem generico) e o CPM (bem especializado). mas ateh onde pode chegar o nivel de especializacao? bom, o cara que substitui o CPM hoje em dia com o mesmo conceito, mas bastante melhorado, eh o QUICC engine:
http://cache.freescale.com/files/ftf_20 ... _F0420.pdfno MPC8569E, o coprocessador de IO possui quatro cores RISC operando a 667MHz e muitos layers especializados para canalizar interfaces fisicas de forma eficiente. por exemplo, vc pode programar uma UCC para trabalhar com 128 canais HDLC. o core RISC vai cuidar da parte de bus master, DMA e provavelmente protocolo HDLC, enquanto a UCC vai serializar/de-serializar isso e canalizar em timeslots atraves do TSA e chegar ao mundo externo atraves de uma das interfaces TDM.
e olha que, de forma alguma, o CPM ou QUICC engine sao a ultima palavra em coprocessador de IO: em certo aspecto, parte do conceito do QUICC engine esta ficando obsoleto a medida que as interfaces de IO comecam a se concentrar em torno de interfaces packetizadas (PCI-express, GbE, etc). note como o QUICC engine, apesar da complexidade, eh apenas uma caixinha discreta e miuda dentro do MPC8569E:

mas daih eh outro patamar e vamos ficar por hora entre o TPU e CPM. bom, em "escala PIC de complexidade", implementar um TPU em FPGA eh como colocar um homem no espaco e implementar um CPM em FPGA eh como colocar um homem em marte. eu ateh diria que jah consegui colocar um pedaco de um cara na lua, mas tah dificil mandar o resto... e pela minha experiencia, sem partir para um core RISC fazendo coprocessamento de IO, nao tem como chegar lah.
mas o CPM eh especializado demais, entao eu chutaria que a NXP tem algo parecido com o TPU mesmo, pq eh mais o foco dos clientes deles. e se for verdade, eu realmente tenho que dar os parabens a eles, pq mesmo sendo algo generico e estando 20 anos atrasados, eh um passo em direcao a qualidade, flexibilidade e performance... quem sabe um dia eles oferecam algo do porte do CPM.