• No results found

Forsvarets etterretnings- og sikkerhetstjeneste 1950-1994

4.2.

Neste tópico são identificados e detalhados os sinais e barramentos que interligam as unidades, são também descritos alguns registos internos relevantes para a interpretação do funcionamento de cada uma das unidades. O comportamento das unidades mediante o seu estado de funcionamento é também abordado neste tópico

Estágio de Fetch 4.2.1.

Composto pela unidade funcional Fetch, e pelas unidades Program Counter e State Control, este estágio tem por função ler da memória de dados a instrução VLIW apontada pelo program counter. Como a instrução recebida tem de tamanho 128 bits, a unidade Fetch procede ao desmembramento da instrução VLIW em 4 instruções de 32 bits cada. As sílabas são colocadas nos barramentos de saída da unidade de forma a permitir a sua leitura por parte do estágio de Decode. O sinal FetchOk toma o valor ‘1’ de modo a informar a unidade State Control que o processo de fetch terminou.

A Tabela 4.2 detalha os sinais e barramentos da unidade Fetch e seu interface com as restantes unidades do microprocessador.

Tabela 4.1 - Sinais e barramentos da unidade Fetch

Nome do sinal Entrada / saída

Unidade de

interface Descrição InstrReady Entrada Instruction

Cache

Informação de que a instrução pretendida pelo Fetch, foi disponibilizada pela Cache de instruções

39

Nome do sinal Entrada / saída

Unidade de

interface Descrição InstrRequest Saída Cache de

instruções Pedido de leitura à Cache de instruções

Instr[127:0] Entrada Cache de

instruçoes Instrução VLIW de 128 bits recebida pelo Fetch

Pc[9:0] Entrada Program

Counter Valor do Program Counter

Address[31:0] Saída Cache de

instruções Endereço da instrução a ler da Cache de Instruções

Syllable_0[31:0

] Saída Decode

Instrução de 32 bits correspondente aos bits 0 a 31 da instrução VLIW

Syllable_1[31:0

] Saída Decode

Instrução de 32 bits correspondente aos bits 32 a 63 da instrução VLIW

Syllable_2[31:0

] Saída Decode

Instrução de 32 bits correspondente aos bits 64 a 95 da instrução VLIW

Syllable_3[31:0

] Saída Decode

Instrução de 32 bits correspondente aos bits 96 a 127 da instrução VLIW

State[1:0] Entrada State Control Estado de funcionamento da unidade Fetch

No estado de funcionamento “RESET” o Fetch inicializa todos os registos a zero. No estado “WAITING” o barramento Address[31:0] (endereço da instrução a ler da memória de código) é atualizado com o valor do registo program counter. No estado “EXECUTE” o sinal InstrRequest toma o valor “1” por forma a fazer um pedido de leitura à memória de código. Quando sinal de entrada InstrReady for “1” significa que a instrução VLIW requerida está disponível no barramento Instr[127:0], de imediato a unidade Fetch decompõe a instrução recebida em quatro sílabas e coloca o sinal fetchOk com valor “1” por forma a informar a unidade State Control da conclusão do processo de fetch.

40

Figura 4.2 -Comportamento da unidade Fetch

4.2.1.1. Unidade Program Counter

Esta unidade é responsável por armazenar o registo program counter bem como a lógica de actualização do mesmo. Este registo contém o endereço da posição da memória de código de onde se pretende ler a próxima instrução. Este valor é facultado à unidade Fetch através do barramento Pc[31:0] pois é na unidade Fetch que o acesso à memória de código é efetuado.

O calculo do valor que o registo program counter irá assumir no final da execução da instrução atual é feito na unidade Control e é através do barramento Pc_GoTo[31:0] que o novo valor transita da unidade Control para a unidade Program Counter. A atualização para o novo valor acontece quando autorizada pela unidade State Control por via do sinal UpdatePc.

Barramentos Entrada / Saída

Unidade de

interface Descrição Pc_GoTo Entrada Control Novo valor do program counter

UpdadePc Entrada State Control Autorização para atualização do program counter

Pc Saída Fetch

41 4.2.1.1. Unidade State Control

A unidade State Control tem por função controlar o estado de funcionamento dos 4 estágios do cluster.

Figura 4.3 - Máquina de estados da unidade State Control

A transição para o estado de funcionamento “RESET” acontece, independentemente do estado de funcionamento atual, caso se verifique um sinal de

reset ou stop, não se verificando estes sinais o estado inicial é o “FETCH”. Neste estado

a unidade Fetch é colocada no estado “EXECUTE” e todas as outras no estado “WAITING”. Este tipo de controlo do estado de funcionamento das unidades do processador é transversal a todos os estados da unidade State Control, ou seja, as unidades que assumem o estado de funcionamento “EXECUTE” serão, tal como referido, a unidade Fetch quando o estado for “FETCH”, a unidade Decode no estado “Decode”, as unidades que constituem o estágio Execute quando o estado for “EXECUTE” e a unidade WriteBack quando o estado for “WRITEBACK”, todas as outras unidades terão estado de funcionamento “WAITING”.

As condições de transição entre estados são FetchFinish igual a “1” para transição do estado “FETCH” para “DECODE”, OperandsReady igual a “1” para transição do estado “DECODE” para “EXECUTE”, ExecuteDone igual a “1” para transição do estado “EXECUTE” para “WRITEBACK” e finalmente WbFinish igual a “1” para transição do estado “WRITEBACK” para o estado “FETCH”. Mais nenhuma transição entre estados está contemplada.

42

Para garantir uma correta execução do código, o valor do program counter é atualizado pela unidade State control no estado “WRITEBACK”. Desta forma, assim que a unidade Fetch entre em modo “EXECUTE”, o valor do program counter está atualizado com o endereço da próxima instrução alvo de fetch. A máquina de estados da Figura 4.2 ilustra o funcionamento anteriormente descrito. A Tabela 4.1 descreve com pormenor os sinais e registos da unidade State Control.

Tabela 4.2 - Sinais da unidade State Control

Nome do sinal Entrada / Saída

Unidade de

interface Descrição

WbFinish Entrada WriteBack Informação de conclusão da escrita por parte da unidade WriteBack.

InstrReady_m Entrada Cache de instruções

Informação de que a nova instrução VLIW pretendida está disponível para fetch.

State_f Saída Fetch Sinal que controla o estado de funcionamento da unidade Fetch.

FetchFinish Entrada Fetch Informação de que o fetch da instrução VLIW está concluído.

State_d Saída Decode Sinal que controla o estado de funcionamento da unidade Decode.

OperandsReady Entrada Decode Conclusão do decode das sílabas.

State_ex Saída Execute Sinal que controla o estado de funcionamento da unidade Execute.

ExecuteDone Entrada Execute

Informação de que as unidades Execute, Control e Memory Control concluíram a execução das operações correspondentes e que os resultados estão disponíveis nos barramentos de saída.

State_wb Saída WriteBack Sinal que controla o estado de funcionamento da unidade WriteBack.

43