A placa Raspberry PI4B possui um circuito integrado BCM711, que possui 4 processadores ARM de 64 bits. Nesta seção veremos os registradores do processador bCM711 e como utilizar um simulador para observar seus resultados.

 

 


| Clique na imagem para ampliar |

 

A grande maioria dos equipamentos e cartões eletrônicos são baseados em tensões analógicas e digitais. Um sinal analógico varia em muitos níveis de tensão ao longo do tempo e um sinal digital apresenta apenas 2 estados ou níveis de tensão ao longo do tempo: “alto” ou “baixo”. Observe a figura a seguir:

 


| Clique na imagem para ampliar |

 

Em uma agenda futura, vamos nos aprofundar nas tensões analógicas. Por enquanto, é preciso entender os sinais digitais, pois os processadores são circuitos integrados construídos com circuitos digitais.

Circuitos e sistemas digitais, como o processador BCM2711, funcionam com base em tensões digitais. Como dito anteriormente, as tensões digitais possuem apenas 2 níveis: “alto” ou “baixo”. Observe a figura a seguir:

 


 

 

 

Em muitos livros e textos, eles usam algumas palavras para representar esses dois estados, como:

"alto baixo"

H      L

1      0

High Low

Verdadeiro Falso

VCC  GND

Mas todos esses nomes se referem à mesma coisa, ou seja: alto nível e baixo nível. Observe a seguinte imagem:

 


 

 

 

Isso dá origem à aritmética e à lógica binárias, o que significa que temos apenas dois números: “0” e “1”. Na próxima seção, vamos nos aprofundar na aritmética binária. Nesta seção veremos os registradores do processador BCM2711. Observe este processador do Raspberry PiB4 na imagem a seguir:

 


| Clique na imagem para ampliar |

 

O papel de um processador é executar instruções. Veremos essas instruções nas próximas seções. Observe no diagrama de blocos a seguir, a composição interna do processador BCM2711:

 


| Clique na imagem para ampliar |

 

 

O diagrama de blocos a seguir mostra o processador BCM2711 com mais detalhes:

 

 

 

Podemos notar que cada núcleo (núcleo) ou processador possui memória cache para dados e instruções. A memória cache é utilizada para tornar mais rápido o acesso aos dados e instruções pelo processador.

O diagrama de blocos a seguir mostra as partes internas do processador com mais detalhes:

 

 

A grande maioria desses blocos são gerenciados e controlados automaticamente ou controlados pelo sistema operacional. Embora existam vários registros do sistema, ou seja, para controlar os processadores (multitarefa ou multiprocesso), do ponto de vista prático, para os projetos eletrônicos com a placa Raspberry PiB4, os programadores devem conhecer os seguintes blocos e como programá-los com instruções:

 

 

O circuito integrado BCM2711 possui 4 núcleos, ou seja, 4 processadores ou CPUs. Cada processador possui 31 registradores de 64 bits. Os registradores são construídos com um circuito digital chamado "flip-flop data" e seu símbolo eletrônico pode ser visto na imagem a seguir:

Podemos assimilar este componente como uma célula de informação por um bit, que pode conter: ou um zero (0) ou um (1). Na imagem a seguir representamos de forma mais resumida um "flip-flop data", que possui o valor "1" armazenado:

 

 

O funcionamento de um "flip-flop data" é baseado no armazenamento ou registro de um valor, que é mantido memorizado. O valor armazenado é carregado ou registrado na saída: “Q”. Para o exemplo de “dados flip-flop” acima, “Q” seria igual a “1”. A linha de entrada: "D", é onde é colocado o valor a ser armazenado no flip-flop ou registrador. A linha “D” pode mudar seu valor, de: “0” para “1”, ou de: “1” para “0”, mas isso não afeta a saída “Q”. A saída “Q” só é afetada ou muda de valor quando a linha “Clock” muda seu estado de nível baixo para nível alto. Essa mudança é conhecida como borda positiva. Assim, o “Dados do flip-flop”, armazenará o valor encontrado na linha de entrada: “D”, quando houver uma mudança de nível baixo para alto, ou borda positiva, na entrada: “Clock”. Em microprocessadores, o processo descrito acima é conhecido como: carregamento de registrador ou movimentação de dados para registrador.

Quando juntamos mais de um “dado flip-flop”, damos origem aos registros. Os registradores podem ser qualquer quantidade de dados do flip-flop. Por exemplo, o seguinte é um registrador de 2 bits:

 

Sua representação resumida seria assim:

 

 

Lembre-se: cada célula de um registrador pode armazenar um bit, e o valor deste bit pode ser: nível alto (1) ou nível baixo (0). Na imagem a seguir temos um registrador de 8 bits:

 

O processador BCM2711 possui 31 registradores de 64 bits, conforme figura a seguir:

 

Cada registro tem um nome. No caso do processador BCM2711, os registradores são nomeados de: X0 a X30. Todos esses registradores são de 64 bits. A imagem a seguir mostra um registro com suas respectivas 64 células:

Como nos sistemas decimais, binários, hexadecimais, etc., os números têm um peso ou valor de acordo com sua posição, é preciso se acostumar a ler os registradores conforme a imagem a seguir:


| Clique na imagem para ampliar |

 

Além disso, devemos nos acostumar a nomear a primeira célula de um registro com o índice “0”. Isso significa que a última célula do registro tem o índice de "63", mas permanecem as 64 células (bits), conforme a imagem a seguir:


| Clique na imagem para ampliar |

 

Lidar com bits desse tamanho (64 bits), visualizá-los em uma única linha ou array, conforme mostrado na figura acima, fica um pouco complicado. Para facilitar a escrita, leitura e gerenciamento de registradores de 64 bits, os programadores os dividem em grupos de 4 bits, conforme a imagem a seguir:


| Clique na imagem para ampliar |

 

Cada grupo recebe o nome de: "nibble". Assim, em um registrador de 64 bits, teríamos um total de 16 nibbles, conforme a figura a seguir:


| Clique na imagem para ampliar |

 

 

Dessa forma, dividindo-os em nibbles, fica mais fácil carregar ou mover dados para um registrador de 64 bits. A imagem a seguir mostra os 31 registradores de 64 bits, sem dividir os registradores:

 


| Clique na imagem para ampliar |

 

Os valores armazenados em cada registro são aleatórios, qualquer valor foi dado para representar os dados em cada registro. A figura a seguir mostra os 31 registradores de 64 bits, mas divididos em nibbles:


| Clique na imagem para ampliar |

 

 

Depois de entender o que é um "registrador" (dados do flip-flop), o próximo passo é conhecer as instruções que podem ser executadas nos registradores de 64 bits. A lista a seguir mostra as instruções que podem ser executadas em registradores de 64 bits:

1- Instruções para movimentações de dados em registradores.

2- Instruções lógicas.

3- Instruções aritméticas.

4- Instruções de salto.

5- Escrever/ler instruções na memória RAM.

Nas seções a seguir veremos essas instruções e como executá-las em registradores de 64 bits. Por enquanto, entenda que essas instruções são armazenadas na RAM e, portanto, os barramentos de acesso à RAM também devem ser de 64 bits. Observe a figura a seguir:


| Clique na imagem para ampliar |

 

Com o conhecimento prévio sobre registradores de 64 bits, podemos começar a executar instruções neles.

 

 

SIMULADOR GRÁFICO DO PROCESSADOR BCM2711.

Para iniciar a programação dos registradores (X0 a X30) do processador BCM2711, a empresa ARM desenvolveu um simulador gráfico para fins de ensino, aprendizado e estudo de professores e alunos. O simulador pode ser encontrado em sites de busca na Internet, digitando as palavras-chave:

“arquitetura do simulador gráfico LEGv8”

O simulador pode ser baixado na seguinte página do github:

https://github.com/arm-university/Graphical-Micro-Architecture-Simulator 

Você pode baixar o simulador em um arquivo compactado conforme a imagem a seguir:

 

 

Após baixar e descompactar o arquivo, aparecerão as seguintes pastas conforme a imagem a seguir:


 
 

 

 

Para rodar o simulador, vá até a pasta: “LEGv8_Simulator/war” e clique duas vezes no arquivo: “LEGv8_Simulator.html” conforme a imagem a seguir:

 

 

 

Aparecerá uma janela semelhante à mostrada na imagem a seguir:


| Clique na imagem para ampliar |

 

 

 

 

Este simulador permite que alunos e professores comecem a usar as instruções orientadas a 64 bits, de forma gráfica. Observe que o simulador possui: um editor de texto onde você pode escrever as instruções, um conjunto de registradores e sinalizadores (flags) onde podemos ver os resultados e um gráfico mostrando o caminho dos dados (datapath) que as instruções seguem. Na parte superior direita, existe um botão: "Ajuda" que dá indicações deste simulador. Observe na imagem a seguir os registradores X0 a X30 do processador:

 

Na figura a seguir, escrevemos uma instrução no editor de texto e a executamos. A instrução:

0x211
0x211

 

carrega o registrador: “X0”, com o valor 0x211. Observe a instrução e o registrador X0, na imagem a seguir:


| Clique na imagem para ampliar |
 

 

A imagem a seguir mostra a instrução e o registrador afetado pela instrução:

 


 

Conclusão

Como conclusão, podemos dizer que o primeiro passo para começar a programar o BCM2711 da placa Raspberry PiB4 é conhecer seu conjunto de registradores. Embora seja possível iniciar a programação da placa Raspberry PiB4, com uma linguagem de alto nível como: C/C++ ou Python, é recomendável do ponto de vista da arquitetura do processador, estudos de informática e eletrônica, conhecer a linguagem assembly, assim, consegue-se um melhor uso e conhecimento das linguagens de alto nível.