http://www.freescale.com/webapp/sps/sit ... B&tid=m8Hp
como vc pode ver, o bus clock eh de 20MHz a partir de um clock de referencia de 40MHz, tal qual eu indiquei.
agora se liga nesse aqui entao:
http://www.freescale.com/webapp/sps/sit ... M&tid=m8Hp
aqui vc tem um clock de referencia de 48MHz para gerar um clock do core a 24MHz, portanto o tempo seria de 208ns para MUL e 291ns para DIV!

se vc olhar o tempo de execucao das instrucoes vai encontrar varias que operam apenas em registros e requerem 1 clock. o fato de varias instrucoes requerem varios clocks refere-se ao fato do HCS08 nao ser arquitetura de harvard e portanto serializar os acessos. a diferenca eh nitida:
INCA e INCX consomem 1 clock, mas INC de memoria para memoria consome 5 clocks, pq a carga da propria instrucao consome 3 clocks (1 byte do operando + 2 bytes do ponteiro 16 bits), enquanto a carga, incremento e armazenamento consomem mais 2, resultado do HCS08 nao possuir arquitetura de harvard e nao ser uma arquitetura tipo load/store.
agora, eu nao conheco o AVR e nao sei dizer se ele precisa sempre carregar as coisas em registros (gastando instrucoes load/store extras) ou se ele pode fazer tudo diretamente na memoria tambem. se vc tem um pino de GPIO, seria chato ter q manipular ele em um registros, pois certamente iria demorar mais!
existe tambem a questao do enderecamento, que vao gerar tempos diferentes:
inerente, 8 ou 16 bits imediado, 8 bits direto, 16 bits extendido, 16 bits indexado, 16 bits indexado com pos-incremento, 16 bits indexado com offset, 16 bits indexado com offset e pos-incremento, 16 bits indexado com offset de 16 bits, offset relativo de 8 bits, stack pointer com offset 8 bits e stack pointer com offset 16 bits.
com isso, um ADD entre acumulador e memoria vai variar de 2 a 5 clocks, conforme o modo de enderecamento utilizado.
nao conheco os modos de enderecamento disponiveis no AVR, mas obviamente vc vai consumir ciclos de clock de acordo com o tipo de modo de enderecamento utilizado, nao tem milagres e a muito tempo os 68k mostraram-se melhores que muitos outros processadores quando aboliram as instrucoes INC em favor de integrar modos de enderecamento avancados com pos-incremento e pre-decremento. no lugar de um par MOV/INC, vc tem um MOVE que faz tudo com menos ciclos.
por exemplo, um strcpy() no 68k (um 680x0 qualquer com hw otimizado) seria:
loop:
move %a0@+,%a1@+; // equivale a (*p++=*q++)
bnz loop; // se nao passar um '\0', ele fica no loop
se vc imaginar que "nao existem milagres", a instrucao move de memoria para memoria vai consumir pelo menos 3 clocks. supondo que ele nao incrementa os ponteiros ao mesmo tempo, vc tem mais 2 clocks. mas nisso vc jah fez praticamente tudo, gastando mais 1 clock para o branch e totalizando 6 clocks. e se ele conseguir incrementar os dois ponteiros ao mesmo tempo, vc fecha com 5 clocks.
jah num processador RISC tradicional hipotetico:
loop:
ld %r0@,%r2; // tmp = *q
sto %r2,%r1@; // *p = tmp
inc %r0; // p++
inc %r1; // q++
tst %r2; // testa tmp
bnz loop; // senao passar um '\0', ele fica no loop
vc certamente vai gastar 2 clocks para ld e 2 para sto, mais um par para os incs, 1 para o tst e 1 para o branch, totalizando 8 clocks.
chutando para ambos um clock de 50MHz, vc teria no 68k CISC uma performance de 33MB/s contra 25MB/s para o outro processador RISC hipotetico orientado a load/store.
em contrapartida, o impacto da implementacao CISC do 68k reflete em um chip com area maior e portanto mais caro que seu concorrente RISC. microcodigo e conjunto de instrucoes RISC obviamente nao sao equivalentes, pq instrucoes de microcodigo podem ter largura realmente muito grande, portanto com funcionalidade cavalarmente maior que instrucoes RISC mais compactas (daih o reflexo em area no chip).
mas eh soh uma dica mesmo... eu acho o HCS08 interessante, particularmente acho perda de tempo usar um processador 8 bits hoje em dia quando vc pode usar um processador de 32 bits pelo menos preco!

RobL escreveu:BSETn DIR 4 5
BCLRn DIR 4 5
CPHX DIR 4 5
NEG DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
COM DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ASL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ASR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
LSL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
LSR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ROL DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
ROR DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
DEC DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
INC DIR,IX,IX1,SP1 4,3,4,5 5,4,5,6
TST DIR,IX,IX1,SP1 3,2,3,4 4,3,4,5
JSR DIR,EXT,IX 4,5,4 5,6,5
JMP DIR,EXT,IX 2,3,2 3,4,3
BSR REL 4 5
Div2 vs. Div4
On M68HC08 MCUs, the output of the primary clock source (whether it is an external crystal, PLL,
internal oscillator, etc.) is divided by four to create the system bus clock. To obtain an 8-MHz bus clock,
the oscillator must run at 32 MHz.
On the HCS08 MCUs, the clock source is divided by two instead of four. So to obtain the same 8-MHz
bus, only a 16-MHz oscillator is required.
Leitores, estamos falando do HCS08 e não de um AVR.
Acima, esses números seguidos 2,3,4,5,6, são número de ciclos dessas intruções (do HCS08). Obviamente os AVRs fazem isto com 1 ciclo no máximo 2, sem divisão de clock.
Refazendo suas "contas": 20MHz clock -> Bus = 10MHz DIV 7 ciclos = 700ns (e não 350ns). Aqui foi só uma distração do grande Marcelo Sam, pois o cara sempre sabe o que fala (só as vezes exagera mas vale).
Isto se usar uma só vez DIV para seu bloco de divisão, o que é pouco provável.
Observando que a maioria das insturções levam mais que 2 ciclos 3,4,5e6 ciclos, a linha HCS08 é boa para programar mas em velocidade, fica somente melhor que os 8051.
É preciso cuidado com o aumento de velocidade, na linha HCS08 em relação a M68HC (clock /4), pois nos HCS08, quase todas instruções tiveram no mínimo 1 ciclo a mais.
Olha esse negócio de propaganda enganosa![]()
Fora a velocidade, os modelos Freescale são muito interessantes (mais uma vez).
Resumo: 8bits velocidade é com AVR.
Bateria : XMEGA bate qualquer 32bits em performance / consumo energia.
Pô, não vale comparar com PICs.