• Aucun résultat trouvé

Os sistemas computacionais, bem como outros tipos de dispositivos digitais que realizam processamento de dados, podem ser decompostos numa unidade de execução e numa unidade de controlo [GajVahNarGon94, Micheli94] (ver Figura 1.6). O exemplo mais comum deste tipo de dispositivos é o microprocessador. Ambas as unidades podem possuir entradas e saídas que ligam a outros componentes do sistema (ex. memórias e periféricos), ou a outros dispositivos existentes no ambiente onde o sistema está inserido, como por exemplo, sensores e actuadores. Enquanto as linhas de entrada e saída da unidade de controlo são tipicamente sinais de um só bit (ex. linhas de interrupção e de controlo de memória), no caso da unidade de execução são sinais multi-bit, (ex. barramentos de dados e endereços). As duas unidades estão interligadas por intermédio de linhas de controlo e linhas de estado, cuja função será explicada mais à frente.

A unidade de execução realiza o processamento propriamente dito e é constituída por registos, multiplexadores e unidades funcionais, tais como unidades aritméticas e lógicas, multiplicadores e deslocadores. Numa operação típica da unidade de execução, os operandos são lidos dos respectivos registos, o resultado é calculado nas unidades funcionais e por último escrito no registo de destino. Consoante a arquitectura do dispositivo, os registos que armazenam os operandos e o resultados das operações podem ser internos à unidade de execução ou pertencentes a uma memória externa. Normalmente esta memória está ligada à unidade de execução por intermédio de barramentos. O estado interno da unidade de execução, tais como resultados de comparações ou condições de erro, é comunicado à unidade de controlo por intermédio das linhas de estado.

A unidade de controlo, estabelece a sequência de operações realizadas pela unidade de execução e é normalmente modelada por uma máquina de estados finitos. A sua estrutura baseia-se num registo de estado que armazena o estado actual, na lógica de estado seguinte que calcula o novo estado que será armazenado no registo de estado e por último, na lógica de saída que determina o valor das saídas da unidade de controlo em função do estado actual e das entradas.

Numa máquina de estados finitos, a transição entre estados é realizada por um sinal de relógio que assegura a sincronização correcta do circuito. A unidade de controlo realiza um conjunto de instruções que depende dos valores dos seus sinais de entrada, ou seja, das entradas de controlo do sistema e dos sinais de estado da unidade

de execução. A geração dos sinais de controlo da unidade de execução bem como das saídas de controlo do sistema depende das instruções executadas. A função dos primeiros é definir as operações realizadas na unidade de execução bem como os respectivos operandos.

Alguns dos aspectos mais importantes do projecto de uma unidade de controlo, nomeadamente as arquitecturas de implementação e os processos de especificação e de síntese serão abordados nos capítulos 3, 4 e 5 desta dissertação.

Entradas de dados do sistema Entradas de controlo do sistema Saídas de dados do sistema Saídas de controlo do sistema Sinais de controlo Sinais de estado

Unidade de Controlo Unidade de Execução

Figura 1.6 – Estrutura de um sistema computacional.

1.3 Objectivos do Trabalho

Este trabalho tem como objectivos principais a investigação de modelos, a concepção de arquitecturas e o desenvolvimento de ferramentas para o projecto e implementação de unidades de controlo complexas, flexíveis, extensíveis e reutilizáveis. Actualmente, com as elevadas capacidades de integração disponíveis, a complexidade crescente dos projectos e finalmente a necessidade de tempos de desenvolvimento cada vez menores, os objectivos referidos acima descritos são bastante importantes.

No caso particular das unidades de controlo, a flexibilidade significa a possibilidade de modificar o comportamento definido, num reduzido período de tempo e com o mínimo de esforço. Quanto à extensibilidade, é uma medida da facilidade com que se pode ampliar o comportamento da unidade de controlo após o seu projecto inicial, de forma a melhorá-lo ou acrescentar funcionalidades. Por último, a reutilização torna possível a incorporação em novos projectos de componentes desenvolvidos e testados em projectos anteriores, aumentando a qualidade do produto final e reduzindo o tempo de desenvolvimento [MicGup97]. Nenhum destes objectivos é alcançável com a utilização do modelo tradicional de descrição de unidades de controlo, a máquina de estados finitos [Kohavi70]. Isto deve-se ao facto de qualquer alteração que se pretenda realizar no comportamento da unidade de controlo, implicar a repetição de todos os passos de projecto. Por outro lado, o modelo de máquinas de estados finitos também não é indicado para a descrição de unidades complexas, uma vez que quando o número de estados, transições, entradas ou saídas é elevado, as descrições baseadas neste modelo são de difícil realização e análise [GajVahNarGon94], sendo portanto imprescindível a adopção de outros modelos mais

apropriados. Uma das abordagens mais conhecidas para vencer a complexidade é baseada no principio “dividir para conquistar”, o que neste caso se traduz na utilização de um método de especificação que suporte uma decomposição hierárquica do algoritmo que descreve o comportamento da unidade de controlo, em sub-algoritmos de menor complexidade, logo mais tratáveis e em certos casos também reutilizáveis.

Ainda quanto à flexibilidade e extensibilidade, pretende-se também que estas propriedades sejam utilizadas dinamicamente, isto é, que possamos alterar o comportamento da unidade de controlo em pleno funcionamento, através da modificação de sub-algoritmos existentes, ou da adição de novos sub-algoritmos. De notar que estes procedimentos não devem conduzir a um comportamento imprevisível da unidade de controlo, pelo que uma das possibilidades é permitir somente a modificação de sub-algoritmos que não se encontrem activos. Este objectivo tem implicações na metodologia de projecto e na arquitectura de implementação, as quais devem promover a independência e modularidade de cada sub-algoritmo quer durante o projecto, quer na sua realização física. As tecnologias utilizadas na implementação do circuito possuem também um papel fundamental, devendo os respectivos dispositivos, ser reconfiguráveis dinâmica e parcialmente, isto é, permitirem a modificação da funcionalidade implementada em determinadas partes do dispositivo sem que seja necessário suspender completamente a sua operação para realizar uma reconfiguração completa. Os dispositivos que preenchem estes requisitos são algumas das FPGAs com memória de configuração do tipo RAM estática [Xilinx97a]. A utilização deste tipo de dispositivos tem também outra potencialidade que interessa explorar: a implementação de unidades de controlo complexas com recursos de hardware limitados, mantendo na FPGA somente os circuitos que implementam os sub- algoritmos necessários em cada momento. A informação de configuração dos restantes sub-algoritmos está armazenada numa memória de configuração externa, mais económica que uma FPGA, sendo transferida para a memória de configuração da FPGA somente quando necessária. Devido à sua semelhança com os sistemas de memória virtual, os circuitos que utilizam estas facilidades, são normalmente designados por sistemas de hardware virtual [KurBagAthMuñ00]. No caso particular dos circuitos de controlo, são denominados unidades de controlo virtuais.