O processo de gravação de microcódigo para a memória de controle da unidade central de processamento de um computador é chamado de microprogramação. O microcódigo para a memória de controle é gerado após a configuração de um computador e sua unidade de controle microprogramada. A memória de controle faz parte da unidade de controle que armazena todos os microprogramas que não podem ser modificados com frequência. Cada linha do micro programa representa uma microinstrução que especifica uma ou mais micro operações. Existem duas maneiras distintas de organizar microinstruções: horizontal e vertical. As microinstruções horizontais representam várias micro-operações que são executadas ao mesmo tempo. No entanto, em casos extremos, cada microinstrução horizontal controla todos os recursos de hardware do sistema. Pelo contrário, a microinstrução vertical se assemelha ao formato de linguagem de máquina convencional que compreende uma operação e alguns operandos. Ao contrário das microinstruções horizontais, a microinstrução vertical representa microoperações únicas.
Na microprogramação horizontal, cada bit é identificado especificamente com um único ponto de controle, o que indica que a micro operação correspondente deve ser executada. Como cada microinstrução é capaz o suficiente para controlar vários recursos simultaneamente, possui a vantagem potencial de uma utilização mais eficiente do hardware e, além disso, requer um número menor de microinstruções por microprograma. Permite um maior grau de paralelismo com uma quantidade mínima de codificação e campos de controle separados. No entanto, o desenvolvimento de microprogramas que utilizam recursos de maneira ideal ou eficiente é uma tarefa complexa. A microprogramação horizontal oferece grande flexibilidade porque cada bit de controle é independente um do outro. Tem um comprimento maior e, portanto, geralmente contém mais informações do que as microinstruções verticais.
A microprogramação vertical emprega um formato variável e um maior grau de codificação, em oposição à microprogramação horizontal. Ele não apenas reduz o comprimento da microinstrução, mas também evita que a capacidade crescente de memória afete diretamente o comprimento da microinstrução. Cada microinstrução vertical geralmente representa uma única micro operação. Um código é usado para cada micro operação a ser executada e o decodificador converte o código em sinais de controle individuais. Como apenas a micro operação a ser executada é especificada, os campos de microinstrução são totalmente utilizados. Além disso, os microprogramas verticais são mais fáceis de escrever do que seus equivalentes horizontais. A microinstrução vertical se assemelha ao formato de linguagem de máquina convencional, que compreende uma operação e alguns operandos. Consequentemente, é fácil de usar para microprogramação. Geralmente consiste em quatro a seis campos que requerem aproximadamente 16 a 32 bits por instrução.
A microprogramação vertical emprega um formato variável e um maior grau de codificação, em oposição à microprogramação horizontal. Na microprogramação vertical, os bits de controle são codificados com cada código usado para cada ação a ser executada e um decodificador de instruções decodifica o código em vários sinais de controle. Pelo contrário, a microprogramação horizontal envolve microinstruções horizontais que não usam nenhuma codificação. Eles representam cada bit de controle no caminho de dados atribuído com um bit separado no formato de microinstrução. Cada bit no campo de controle é anexado a uma linha de controle.
A microprogramação horizontal geralmente segue uma abordagem seqüencial para especificar a próxima microinstrução em um microprograma, semelhante ao formato de linguagem de máquina convencional. Cada bit é identificado especificamente com um único ponto de controle, o que indica que a micro operação correspondente deve ser executada. Microinstruções de ramo condicionais e incondicionais especiais são necessárias para interromper a sequência. A microprogramação vertical pode usar um esquema de endereçamento relativamente no qual são necessários alguns bits para especificar um salto relativo para frente ou para trás. Isso requer computação de endereço a cada passo.
- Os microprogramas verticais têm uma melhor densidade de código, o que é benéfico para o tamanho do armazenamento de controle. A microinstrução vertical se assemelha ao formato de linguagem de máquina convencional, que compreende uma operação e alguns operandos. Cada microinstrução vertical representa uma única micro operação, enquanto os operandos podem especificar o coletor e a fonte de dados. Os microprogramas horizontais, por outro lado, geralmente representam múltiplas micro-operações que são executadas ao mesmo tempo. Em casos extremos, cada microinstrução horizontal controla vários recursos de hardware simultaneamente.
- Microprogramas horizontais oferecem maior flexibilidade porque cada bit de controle é independente um do outro. Seu comprimento é maior, geralmente contém mais informações do que as microinstruções verticais. As microinstruções horizontais com 48 ou mais bits são bastante comuns. Os microprogramas horizontais têm a vantagem potencial de utilizar o hardware com mais eficiência e, além disso, requer um número menor de microinstruções por microprograma. As microinstruções verticais, por outro lado, são mais compactas, mas menos flexíveis que as microinstruções horizontais. A abordagem vertical é consequentemente fácil de usar para microprogramação.
Ao contrário das microinstruções horizontais, a microinstrução vertical representa microoperações únicas. Os microprogramas horizontais permitem um maior grau de paralelismo com uma quantidade mínima de codificação e campos de controle separados, enquanto os bits de controle são codificados em microprogramas verticais. A escolha entre as duas abordagens precisa ser feita com cuidado. No entanto, na prática, os designers usam uma combinação de formatos de microinstrução horizontal e vertical para que a estrutura resultante seja compacta e eficiente.