16
Prof V Vargas, IST Registos 26/11/13, Pg 1/16 +

Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

  • Upload
    lethuy

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 1/16

+

Page 2: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 2/16

Registos / 19aº Projecto

Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico designa de Registers –, e

buses. Como todas as outras Sessões, ir-se-á desenrolar a partir de um Projecto concreto...

Considere um dispositivo que vai registando, hora a hora, a temperatura local… Admita, para simplificar, que

basta um dígito para a representar. São exibidas em dois LEDs de 7-segmentos as temperaturas medidas nas

últimas 2 horas…

Ao lado, esquematiza-se a arquitectura do sistema… Admita-se que acaba de soar o gong das 12:00; então, o

termómetro apresenta algum valor de temperatura, seja 8º – que é memorizado num contentor apropriado, ‘R0’;

uma hora depois (isto é: às 13:00), o termómetro apresenta algum outro valor, seja 5º, que é memorizado no

mesmo contentor ‘R0’ – enquanto, ao mesmo tempo, o valor que lá estava memorizado é copiado em paralelo para

um outro contentor similar, ‘R1’. Com isso, quem consultar o painel onde se exibem as temperaturas, observará

dois LEDs, mostrando os valores, 8º e 5º, medidas nas duas últimas horas… Intui-se o que sucederá ao irem

batendo as horas seguintes…

Pressupondo que se dispõe já de um descodificador de 7-segmentos, resta, é claro, a construção dos contentores

{R0 e R1}… A esse respeito, será pacífico que, na transferência da Informação de ‘R0’ para ‘R1’, o tratamento

dado ao bit mais à esquerda (por exemplo), deverá ser idêntico àquele conferido ao bit mais à direita – e, aliás, a

qualquer outro bit: o bit de maior peso de ‘R0’ (seja ‘R3(0)’) vai ocupar a posição de maior peso de ‘R1’ (‘R3(1)’) –

enquanto ao mesmo tempo o bit de menor peso de ‘R0’ irá ocupar a posição de menor peso de ‘R1’… Assim sendo,

bastará discernir como memorizar 1 bit – que de imediato se ficará sabendo como memorizar 4, ou 8, ou 16, ou

seja lá que número de bits for…

O diagrama de estados de um circuito sequencial síncrono capaz de memorizar um bit de informação genérico

‘I’ (‘0’ ou ‘1’) apresenta-se pacífico: ele terá somente dois estados, Q0/0 e Q1/1; e deverá ser tal que, quando lhe

for forçado à entrada o valor ‘0’, ele transite para o estado Q0 – e, quando lhe for forçado à entrada o valor ‘1’, ele

transite para o estado Q1 (e isso independentemente do estado em que se encontrava antes do flanco de comutação

do relógio).

De posse do Diagrama de Estados, e da correspondente Tabela de Estados – e procedendo à codificação

{Q0→0, Q1→1} a que a lei do menor esforço conduz –, a pergunta que sobra será: a que tipo de flip-flop recorrer,

para lograr a solução mais simples? Não custa decidi-lo:

– o recurso a um flip-flop T obriga a usar um XOR na entrada ‘T’, vidé ao lado;

– o recurso a um flip-flop JK obriga a usar um inversor na entrada ‘K’;

– o recurso a um flip-flop SR obriga também a usar um inversor na entrada ‘R’;

– o recurso a um flip-flop D não obriga a usar mais nada: basta forçar na entrada ‘D’ o bit de informação ‘I’ – e

aguardar pelo flanco de comutação do relógio…

Assim, da mesma maneira que no desenho de contadores se preferiu recorrer a flip-flops T, assim agora, para

desenhar elementos de memória – isto é, capazes de memorizar 1 bit de informação –, se prefere recorrer a flip-

flops D: não será de admirar que, ao longo desta sessão, os circuitos se virem a suportar todos em flip-flops D…

Page 3: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 3/16

Page 4: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 4/16

Registos / Registos

Decidido como memorizar 1 bit, pode imediatamente levar-se por diante o desenho de cada um dos contentores

{R0 e R1} requeridos pelo 19aº Projecto: porquanto cada um se destina a memorizar um dígito – cujo código se

basta em 4-bits –, bastará justapor 4 flip-flops D, seja {Q3, Q2, Q1, Q0}, uns ao lado dos outros (ou, como se

patenteia ao lado, uns por cima dos outros, à maneira de um edifício de vários andares), em que

– as suas entradas clock são alimentadas pelo mesmos impulsos de relógio: o circuito é síncrono;

– a cada entrada de dados, ‘Dk’, fica aplicado um valor de informação específico, ‘Ik’ (com k=3, 2, 1, 0).

– se existentes, as entradas assíncronas de clear/reset são alimentadas pelo mesmo sinal.

A um circuito digital assim, dá-se o nome de Registo – designando-se de palavra o conjunto de bits que ele

contém. No caso, trata-se de um Registo de 4-bits, ou seja: destinado a memorizar palavras com um comprimento

de 4-bits. Mas, se se quisera um Registo para palavras com um comprimento maior, intui-se como fazê-lo:

aumentar o número de andares do Registo, pela simples política de justapor os flip-flops D necessários…

Ao lado, encontra-se o desenho do sistema correspondente ao 19aº Projecto, onde são visíveis os contentores

{R0 e R1}, agora e doravante denominados Registos, e a interligação entre as várias partes:

– pressupõe-se que as saídas do termómetro são dígitos codificados em BCD: {I3, I2, I1, I0};

– elas encontram-se ligadas às entradas dos flip-flops do Registo R0 – com o que, aquando do clock que marca a

passagem de uma hora mais, os valores {I3, I2, I1, I0} advêm memorizados/escritos em R0;

– tendo decorrido já ao menos o intervalo de tempo tpLH/tpHL, as saídas dos flip-flops advêm estáveis – e o novo

valor de temperatura, seja 8, aplicado ao descodificador de 7-segmentos, vem a ser adequadamente visualizado no

LED de 7-segmentos em cima…

– ao passar de mais uma hora, acontece o seguinte: por um lado, as saídas do termómetro {I3, I2, I1, I0} com um

novo valor de temperatura, seja 5, mantêm-se ligadas às entradas dos flip-flops do Registo R0; por outro lado, as

saídas deste Registo R0 com o precedente valor de temperatura encontram-se ligadas às entradas dos flip-flops do

Registo R1;

– com o que, aquando do clock que marca a passagem da hora, a temperatura actual advém escrita em R0 – e,

ao mesmo tempo, a temperatura precedente advém escrita em R1;

– e, tendo decorrido já ao menos o intervalo de tempo tpLH/tpHL, as saídas dos flip-flops advêm estáveis – e

ambos os valores de temperatura, o actual e o precedente, vêm a ser visualizados…

– esta dupla escrita (e esta dupla leitura) à passagem de cada hora acontece, é claro, para todas as horas, desde

que se faça o power-on ao circuito… E cá está a pergunta da praxe: quando se faz o power-on aos Registos, qual o

estado em que eles ingressam? A resposta é: não se sabe! Quiçá se justifique então, a existência de uma entrada

Clear, que, quando activada, inicializa todos os flip-flops dos Registos a ‘0’...

Recapitulando: no Projecto entre mãos, não se requerem interligações entre os diversos flip-flops de um

Registo: as únicas operações admissíveis são então as assim designadas escrita e leitura em paralelo (e Clear)

– Escrita em paralelo (Parallel-In ou Load, no jargão anglo-saxónico): para memorizar/escrever uma palavra

de informação no Registo, bastará aplicar os respectivos bits {I3, I2, I1, I0} nas entradas D dos flip-flops, e aguardar

pelo flanco de comutação do relógio: quando acontecer, todos os flip-flops mudam de estado – ao mesmo tempo! –,

as suas saídas vindo a tomar precisamente aqueles valores {I3, I2, I1, I0};

– Leitura em paralelo (Parallel-Out): para conhecer/ler a palavra de informação actualmente memorizada no

Registo, bastará consultar as saídas ‘Q’ dos flip-flops – não sendo preciso aguardar por qualquer flanco do

relógio: desde que tenha já decorrido ao menos o intervalo de tempo tpLH/tpHL desde o último flanco de comutação

do relógio, pode saber-se o estado de todos eles de uma vez só – ao mesmo tempo!

Ao lado, apresenta-se o símbolo IEC de um Registo com a estrutura de R0 ou R1. Não detém qualquer título. A

‘cave’ do símbolo especifica que contém 4 flip-flops, com uma mesma especificação (pelo que ela é inscrita apenas

no flip-flop de cima): as entradas e saídas, ambas activas a High, são acessíveis externamente; “1D” afirma que são

flip-flops D, o prefixo ‘1’ clarificando que reagem aos impulsos recebidos na entrada de clock ‘C1’ (no seu flanco

descendente); esta é comum aos 4 flip-flops. Disponibiliza também uma entrada de reset assíncrono, qualificada

com ‘R’, que é activa a High: quando se lhe força um nível High, o registo é reposicionado a ‘0000’.

Page 5: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 5/16

Page 6: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 6/16

Registos / 19bº Projecto (Registos com Load/Enable)

Modifique-se agora o 19aº Projecto, do seguinte modo: em vez de se indicarem as temperaturas nas duas

últimas horas, pretende-se que seja apresentada, num LED de 7-segmentos, a temperatura máxima já alguma vez

atingida (desde o último reset). Para simplificar, continua a admitir-se que basta um dígito para a representar…

Ao lado, esquematiza-se a arquitectura do sistema: como anteriormente, o valor de temperatura apresentado

pelo termómetro, seja T, é aplicado a um registo – cujas saídas são aplicadas a um codificador de 7-segmentos;

mas, porquanto o objectivo é visualizar a temperatura máxima já atingida, ele só será escrito nesse registo se

exceder o valor, seja TMax, que ele então memoriza… Para o efeito, recorre-se a um Comparador aritmético de 4-

bit: aplicando T e TMax nas suas entradas ‘P’ e ‘Q’, a saída ‘P>Q’ advém activa se e só se T > TMax; se isso

suceder, o registo deverá passar a conter o novo valor de temperatura, T; caso contrário, deverá manter-se

inalterado. A questão é: como alterar o registo que se desenhou já, por forma a satisfazer esse requerimento?

Visto de uma maneira mais global, o que se pretende é um registo que, aquando da ocorrência do clock, e

consoante uma variável externa, assim:

– se mantenha inalterado, se ela estiver inactiva;

– carregue em paralelo o valor nas suas entradas de dados, se ela estiver activa.

Ora, este tipo de comportamento soa a algo conhecido: o que se pretende é um registo com uma entrada enable!

De posse de tal registo, o logigrama para o Projecto entre mãos volver-se-á na aplicação a tal entrada Enable da

saída ‘P>Q’ do Comparador… pelo que resta discernir: como será a estrutura interna de tal registo com Enable?

Considerando que o que faz “mexer” o registo são os impulsos na sua entrada clock, uma resposta imediata

será: interpor um AND entre a entrada Enable e essa entrada clock: somente quando ela advir activa é que os

impulsos de relógio alcançam os flip-flops do registo…

Mas esta resposta não é pacífica: ela conduz a atrasar no tempo a mudança das saídas do registo – o que, no

contexto de uma solução síncrona, é de todo desaconselhável: imaginando sistemas algo mais complexos, em que

os flip-flops em que se concretizam os registos coexistem com outros flip-flops, há que garantir que, aquando de

um clock, todos eles reajam em simultâneo! O desafio é, portanto: como proceder ao enabe/disable do registo sem

interferir nas linhas que transportam os impulsos de relógio?

A única resposta possível é, obviamente, agir sobre a entrada ‘D’ dos flip-flops – na prática através de um

multiplexer com uma entrada de selecção, a que se aplica a entrada Enable, vidé ao lado:

– na entrada ‘1’, seleccionada quando ela está activa, força-se o novo valor de informação a escrever no registo;

– na entrada ‘0’, seleccionada quando ela está inactiva, aplica-se o próprio valor memorizado no Registo.

Prevendo a necessidade de inicializar o Registo, convirá, é claro, dotá-lo de uma entrada Clear, que, quando

activada, inicializa todos os flip-flops do Registo a ‘0’...

Ao lado, apresenta-se o símbolo IEC de um Registo com a estrutura ao lado. Não detém qualquer título. A

‘cave’ do símbolo apresenta 4 flip-flops, com uma mesma especificação: as entradas e saídas, ambas activas a

High, são acessíveis externamente; ‘1D’ afirma que são flip-flops D, o prefixo ‘1’ clarificando que reagem aos

impulsos recebidos na entrada de clock ‘C1’ (no seu flanco descendente); esta é comum aos 4 flip-flops.

Disponibiliza também uma entrada de reset assíncrono, qualificada com ‘R’, que é activa a High: quando se lhe

força um nível High, o registo é reposicionado a ‘0000’. Disponibiliza enfim uma entrada, ‘M2’, para providenciar

a escolha entre dois modos de funcionamento:

– quando ‘M2’ está activa – modo de funcionamento dito de “Load/Carregamento em Paralelo” –, é escrito no

registo o valor que se encontrar nas entradas dos flip-flops (vidé qualificador ‘1,2D’);

– caso contrário – modo de funcionamento dito de “Hold/Manutenção” –, o registo mantém-se tal como era.

(Abra-se um parêntesis: em si, o logigrama final viola a geografia habitual – de dispor à esquerda os flip-flops:

à esquerda estão multiplexers… Em rigor, eles fazem parte da lógica do estado seguinte… mas a sua implantação à

esquerda quiçá torne visualmente mais explícita a sua razão de existir: concretizar o enable/disable do registo)

Page 7: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 7/16

Page 8: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 8/16

Registos / 19cº Projecto (Registo de Deslocamento / Shift Register)

Nos registos até agora considerados, os flip-flops evoluem independentemente uns dos outros: não há ligações

entre eles. Já vai sendo hora de considerar registos em que os flip-flops estão interligados entre si… E não será

despropositado fazê-lo a partir de um Projecto concreto...

Considere-se um automóvel cujas luzes traseiras, através de que o condutor manifesta a sua vontade em mudar

de direcção, são de facto constituídas por dois blocos de 4 lâmpadas com o funcionamento esquematizado ao lado:

– para mudar para a direita, acende-se primeiro a lâmpada mais à esquerda, depois a que lhe está adjacente à

direita (e só ela), e assim sucessivamente, até se acender a lâmpada mais à direita;

– para mudar para a esquerda, acende-se primeiro a lâmpada mais à direita, depois a que lhe está adjacente à

esquerda (e só ela), e assim sucessivamente, até se acender a lâmpada mais à esquerda.

O desenho do circuito ficaria simplificado se se dispusera dum registo preparado para deslizar o seu conteúdo

para a direita ou para a esquerda: bastaria inicializá-lo a ‘1000’ ou ‘0001’ (consoante a mudança de direcção em

vista), que depois, aquele ‘1’ iria deslizando ao longo do registo, ao ritmo dos impulsos de relógio…

A um registo com tal capacidade dá-se o nome de Registo de Deslocamento (Shift Register) – e é claro que os

flip-flops já não são independentes: o estado seguinte de qualquer deles depende do estado actual dos que lhe são

adjacentes… Mas, perguntar-se-á: e quanto aos flip-flops das ‘pontas’ do registo? A opção mais interessante será:

– quando o conteúdo do registo está deslizando para a direita, o estado seguinte do flip-flop mais à esquerda

passará a ser uma informação externa, seja ‘ID’;

– quando o conteúdo do registo está deslizando para a esquerda, o estado seguinte do flip-flop mais à direita

passará a ser uma informação externa, seja ‘IE’.

Isto significa um modo mais de escrever no registo: já não paralela, mas em série (Serial-In), pelas ‘pontas’.

O logigrama de um registo assim – dito de Registo Multimodo ou Universal – afigura-se deveras pacífico:

partindo do logigrama do registo ultimamente considerado, bastará que o multiplexer à entrada de cada flip-flop

passe a oferecer duas entradas de selecção, ‘M0’ e ‘M1’, vidé ao lado – para viabilizar o escolher entre quatro

modos de funcionamento (Hold e Load, e também Right Shift e Left Shift), como adiante se explica.

Apresenta-se também o símbolo IEC correspondente ao logigrama. O título é ‘SRG’. Explicita 4 flip-flops,

cujas entradas e saídas, activas a High, são acessíveis externamente; trata-se de flip-flops D, que reagem aos

impulsos recebidos na entrada de clock ‘C4’ (no seu flanco descendente). Oferece uma entrada de reset

assíncrono, ‘R’, activa a High. Oferece duas entradas, ‘M0’ e ‘M1’, para seleccionar o modo de funcionamento:

– quando {M1, M0} são ‘00’/0 (‘M1’ e ‘M0’ estão, ambas, inactivas) – modo de funcionamento dito de “Hold” –

, o registo permanece inalterado;

– quando {M1, M0} são ‘11’/3 (‘M0’ e ‘M1’ estão, ambos, activos) – modo de funcionamento dito de “Load” –,

é escrito no registo, em paralelo, o valor que se encontrar nas entradas dos flip-flops qualificadas com ‘1,4D’;

– quando {M1, M0} são ‘01’/1 (só ‘M0’ está activo) – modo de funcionamento dito de “Right Shift” –, o registo

desloca à direita (vidé qualificador ‘1→’) – sendo que no flip-flop mais à esquerda é escrito o valor de ‘ID’ ;

– quando {M1, M0} são ‘10’/2 (só ‘M1’ está activo) – modo de funcionamento dito de “Left Shift” –, o registo

desloca à esquerda (vidé qualificador ‘2←’) – sendo que no flip-flop mais à direita é escrito o valor de ‘IE’ .

Agora, são diferentes as especificações concernindo os flip-flops – pelo que, em vez de se especificar só o do

topo, há que especificar cada um em separado, e tendo em conta os valores de ‘M0’ e ‘M1’:

– quanto ao flip-flop ‘Q0’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q0’, ou em ‘ID’, ou em

‘Q1’ ou em ‘I0’ (vidé ‘1,4D’ e ‘3,4D’, qualificadores das entradas onde se aplica ‘ID’ e ‘I0’ , respectivamente);

– quanto ao flip-flop ‘Q1’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q1’, ou em ‘Q0’, ou em

‘Q2’ ou em ‘I1’ (vidé ‘3,4D’, qualificador da entrada onde se aplica ‘I1’);

– quanto ao flip-flop ‘Q2’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q2’, ou em ‘Q1’, ou em

‘Q3’ ou em ‘I2’ (vidé ‘3,4D’, qualificador da entrada onde se aplica ‘I2’);

– quanto ao flip-flop ‘Q3’, a sua entrada poderá agora volver-se na sua própria saída, ‘Q3’, ou em ‘Q2’, ou em

‘IE’ ou em ‘I3’ (vidé ‘2,4D’ e ‘3,4D’, qualificadores das entradas onde se aplica ‘IE’ e ‘I3’ , respectivamente).

(Conquanto o deslocamento seja dito à-direita/à-esquerda, no logigrama – e no correspondente símbolo IEC –,

ele é, de facto, e respectivamente, para-baixo/para-cima; ao lado, apresentam-se os diagramas temporais das

saídas do registo quando, partindo da mesma situação (‘1011’), se força o deslocamento à direita/para-baixo,

entrando ‘1’ à esquerda, e o deslocamento à esquerda/para-cima, entrando ‘0’ à direita).

Page 9: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 9/16

Page 10: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 10/16

Registos / 19dº Projecto (Usando um multiplexer por destino)

O Projecto, com que esta sessão se iniciou, envolve a transferência de informação (valores de temperatura)

entre dois registos; decorrendo ela em paralelo, subentende-se que a saída de cada um dos flip-flops de ‘R0’ se liga

à entrada do correspondente flip-flop de ‘R1’… Muitos contextos há, porém, onde a transferência de informação

envolve bem mais registos – e uma solução assim já não serve. Um Projecto simples poderá testemunhá-lo…

Considere-se um cinema com 4 salas; os títulos dos filmes encontram-se memorizados em outros tantos

conjuntos de registos. Todavia, o visor disponível apenas permite publicar dois deles de cada vez. De 15 em 15

segundos, o visor é refrescado… Pretende-se a estrutura de interligação dos registos que memorizam os títulos aos

registos que alimentam o visor.

Ao lado, esquematiza-se o objectivo em vista: encontram-se à esquerda registos – contendo, para cada sala, a

sua identificação e o Título do filme nela em exibição –, e à direita encontram-se registos que ‘alimentam’ o visor

onde aqueles se publicam… Pretende-se que o conteúdo de um qualquer dos registos à esquerda (ditos

fonte/source) advenha transferido/transmitido (copiado) para um qualquer dos registos à direita (ditos

destino/sink). Globalmente, isso significa 8 (=4*2) transferências possíveis… e é claro que está proibido ligar

directamente as saídas dos flip-flops fonte às entradas dos flip-flops destino: sob pena de um pivete a queimado (e

se se não usar 3-state), não se podem soldar duas saídas de chips ao mesmo fio...

Para simplificar, considerar-se-ão só os registos relativos à identificação (numérica) das salas (crendo que tal

bastará para o leitor defrontar a interligação dos restantes registos)… Sejam então {W3, W2, W1, W0} os registos

com essa identificação, e {E1, E0} aqueles para onde ela é transferida – e restrinja-se a atenção a um flip-flop de

destino, seja o flip-flop ‘Q0’ do registo ‘E0’; o desafio é providenciar para que ele possa vir a tomar o valor na

saída do flip-flop ‘Q0’ de um dos registos {W3, W2, W1, W0}… Isso volve-se em implantar um multiplexer, ‘M00’,

cuja saída é aplicada na entrada do flip-flop ‘Q0’ do registo ‘E0’, com duas entradas de selecção, {E01, E00}, e

quatro entradas de dados – a que se aplicam precisamente as saídas dos flip-flops ‘Q0’ dos registos fonte…

Por um raciocínio análogo, dever-se-á implantar um multiplexer, ‘M01’, cuja saída é aplicada na entrada do flip-

flop ‘Q1’ do registo ‘E0’, com as mesmas entradas de selecção, {E01, E00}, e em cujas entradas de dados se aplicam

as saídas dos flip-flops ‘Q1’ dos registos fonte… Idem para os restantes flip-flops destino, ‘Q3’ e ‘Q2’: aplica-se, na

entrada de cada um, um multiplexer, respectivamente ‘M03’ e ‘M02’ – e não valerá a pena dizer mais nada…

Com isso, {E01, E00} seleccionam o registo fonte cujo conteúdo é transferido para (os flip-flops de) ‘E0’: se, por

exemplo, forem ‘01’, é transferido o conteúdo do registo ‘W1’…

Doravante, e por mor de simplicidade,

– usar-se-á a expressão “o registo é transferido” em vez de “o conteúdo do registo é transferido”;

– condensar-se-ão as expressões ‘registo fonte’ e ‘registo destino’ em, respectivamente, fonte e destino.

O que se afirma acima vale também para o registo ‘E1’: os seus flip-flops volvem-se na implantação de outros

tantos multiplexers, {M13, M12, M11, M10}, com entradas de selecção {E11, E10}: estas seleccionam o registo fonte

que é transferido para ‘E1’: se, por exemplo, forem ‘11’, é transferido o registo ‘W3’…

Globalmente, pois, o circuito está capacitado para efectuar duas transferências em simultâneo; por exemplo,

para transferir ‘W1’ para ‘E0’ e, ao mesmo tempo, ‘W3’ para ‘E1’, bastará forçar as entradas de selecção a serem

{E01=0, E00=1} e {E11=1, E10=1} – que, no próximo clock, se consumarão tais transferências.

(Nota breve, por mor de completude: as transferências acima decorrem em paralelo; mas uma outra solução

seria viável – baseada em transferências em série: garantindo necessariamente que os registos (fonte e destino)

eram, todos eles, registos de deslocamento, proceder-se-ia à transferência de um bit após outro; a propósito, por

exemplo, da transferência de ‘W1’ para ‘E0’, o bit mais à direita de ‘W1’ – que é ‘Q3’ – seria transferido para o bit

mais à esquerda de ‘E0’ – que é ‘Q0’… Isto excede o horizonte deste itinerário, pelo que não será discutido)

Não há dúvida que o logigrama cumpre os requisitos do enunciado – e será pacífico generalizá-lo a um maior

número de registos fonte e/ou de registos destino. Mas, a um olhar atento não escapará que as entradas de ‘M00’

são as mesmas que estão aplicadas a ‘M10’; idem para entradas de ‘M01’ e ‘M11’; para as de ‘M02’ e ‘M12’ e para as

de ‘M03’ e ‘M13’. Daí, uma suspeita: haverá outra solução não tão gastadora de multiplexers? É o que se vai ver …

Page 11: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 11/16

Page 12: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 12/16

Registos / Bus

Para um sistema envolvendo a transferência entre 2M

registos fonte e 2N registos destino, deduz-se:

– cada multiplexer tem M entradas de selecção e 2M

entradas de dados;

– com a filosofia de associar um multiplexer a cada entrada dos 2N registos destino, monta a 2

N o número total

de multiplexers que se ligam a qualquer dos flip-flops fonte; porquanto as suas entradas são as mesmas para todos

eles, esses números merecem que se investigue a possibilidade de uma solução mais económica.

Tendo como pano de fundo o 19dº Projecto, o ponto de partida será, naturalmente, colapsar os multiplexers

{M13, M12, M11, M10} e {M03, M02, M01, M00} num conjunto {M3, M2, M1, M0} – preservando as interligações que

detêm com os registos fonte {W3, W2, W1, W0}, vidé ao lado.

Posto que as saídas dos multiplexers {M13, M12, M11, M10} e {M03, M02, M01, M00} se ligam às entradas dos

destinos {E1, E0}, será natural que as saídas dos multiplexers {M3, M2, M1, M0} advenham ligadas às entradas de

todos os destinos.

As entradas de selecção dos multiplexers {M3, M2, M1, M0} já não se denominam de {E11, E10} e {E01, E00},

mas de {S1, S0} – mas detêm o mesmo papel: o de seleccionar o registo fonte a ser transferido…

Considere-se, então, que se deseja transferir o registo ‘W1’ para ‘E0’ e o registo ‘W3’ para ‘E1’.

Pretendendo-se transferir o registo ‘W1’, então as entradas de selecção dos multiplexers deverão tomar os

valores {S1=0, S0=1}. Mas, estando as suas saídas ligadas a ambos os destinos, {E1, E0}, o resultado (após o flanco

descendente do clock) será este: ambos os registos irão ficar com uma cópia de ‘W1’; ora, não é isso que se deseja:

tem-se em vista a transferência de ‘W1’ para, apenas, ‘E0’. Donde a pergunta: como garantir que somente ‘E0’ irá

receber o conteúdo de ‘W1’? A resposta volve-se em dois cuidados:

– dotar os registos destino duma entrada, ‘M2’, para providenciar a escolha entre dois modos de funcionamento:

– quando ‘M2’ está activa – modo de funcionamento dito de “Load” –, é escrito no registo o valor que se

encontrar nas entradas dos flip-flops (vidé qualificador ‘1,2D’);

– caso contrário – modo de funcionamento dito de “Hold” –, o registo não sofre qualquer alteração.

– controlar essa entrada ‘M2’, implantando um descodificador, no caso com uma única entrada de selecção,

‘D’: conforme ela for ‘0’ ou ‘1’, assim o destino seleccionado será ‘E0’ ou ‘E1’.

Então, para lograr a transferência de ‘W1’ para ‘E0’, bastará forçar {S1=0, S0=1} e D=0: com este valor de ‘D’,

a saída do descodificador que advém activa é aquela numerada ‘0’ – e portanto somente no registo ‘E0’ é que

ficará activado o modo de funcionamento “Load”: somente ele é que receberá o conteúdo de ‘W1’; por um

raciocínio análogo, para lograr a transferência de ‘W3’ para ‘E1’, bastará forçar {S1=1, S0=1} e D=1.

De realçar no logigrama ao lado aquilo a que se chama de barramento (bus): um conjunto de linhas ‘paralelas’

transportando sinais do mesmo tipo, que no caso são os bits que compõem o conteúdo da fonte seleccionada –

para os tornar acessíveis aos vários destinos.

Será pacífico generalizar a solução a que se chegou, concretizada no logigrama ao lado, a um maior número de

registos fonte e/ou de registos destino… Todavia, é importante realçar a diferença que existe entre ela e a

precedente, com um-multiplexer-por-destino: antes, conseguia-se proceder a duas transferências em simultâneo,

mas agora só é possível executar uma transferência de cada vez; aplicado ao Projecto entre mãos: refresca-se

primeiro o registo de destino ‘E0’, e somente depois se refresca o registo ‘E1’.

Essa limitação é a contrapartida da economia feita em termos dos multiplexers… Haverá Projectos em que ela é

inaceitável – pelo que se deverá optar pela solução “um-multiplexer-por-destino”; mas haverá outros em que o não

é, isto é: é aceitável executar uma transferência de cada vez – pelo que a melhor solução será, com grande

probabilidade, fazê-lo mediante um “bus”.

Ainda assim, a um olhar atento não escapará que ela envolve multiplexers com 2M

entradas de dados. Daí, uma

suspeita: haverá outra solução não tão gastadora de multiplexers? É o que se vai ver.

Page 13: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 13/16

Page 14: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 14/16

Registos / Bus e 3-State

No sentido de simplificar ainda mais o logigrama a que se chegou, convirá recordar as “Saídas 3-state / Alta

Impedância” abordadas a propósito de multiplexers:

Uma saída 3-state é uma saída que, além dos níveis eléctricos {Low, High} representando os valores lógicos ‘0’

e ‘1’, apresenta um terceiro estado, de alta impedância, equivalente a um circuito aberto: por aquela saída não

flui “nenhuma” corrente eléctrica, é como se ela, internamente, não estivesse ligada a nada!

Naturalmente, é mister controlar essa saída, isto é: forçá-la a funcionar em 3-state ou como saída “normal” de

bits; isso é feito mediante uma entrada comummente designada de output-enable: sse ela estiver inactiva, a saída é

considerada no estado de alta impedância.

Isto recordado, e tendo como ponto de partida o logigrama com bus a que se chegou, poderão eliminar-se os

multiplexers desde que se tomem as duas seguintes medidas:

– prover os flip-flops dos registos fonte com saídas 3-state (repare-se no símbolo que qualifica as suas saídas:

um triângulo “de cabeça para baixo”); e dotá-los de uma entrada, ‘EN’, comummente designada de output-enable:

sse ela estiver inactiva, essas saídas são consideradas no estado de alta impedância…

– controlar essa entrada ‘EN’, implantando um descodificador, no caso com duas entradas de selecção, {S1,

S0}: conforme os seus valores, assim a fonte seleccionada será uma entre {W3, W2, W1, W0}.

Globalmente, pois, o logigrama fica com dois descodificadores:

– um, mais à esquerda, ‘S’, que selecciona a fonte/source, entre {W3, W2, W1, W0};

– um outro, mais à direita, ‘D’, que selecciona o destino, entre {E1, E0}.

De novo, para lograr a transferência de ‘W1’ para ‘E0’, bastará forçar {S1=0, S0=1} e D=0: com aqueles valores

de {S1, S0}, a saída do descodificador ‘S’ que advém activa é aquela numerada ‘1’ – e portanto somente no registo

‘W1’ é que ficará activada a entrada EN/output-enable: somente ele é que apresentará na saída o seu conteúdo.

Quantos aos demais registos, as suas entradas EN ficarão inactivas – e portanto as suas saídas ficarão em alta-

impedância.

As consequências vêm a ser as seguintes: no bus, apenas se vislumbram os bits que provêm do registo ‘W1’ –

que é o que se pretende: transferir para ‘E0’ o conteúdo de ‘W1’. Mas, perguntar-se-á: será lícito ignorar as saídas

dos outros registos fonte? A resposta é: sim, é lícito – pois que estão em alta-impedância: nesse estado, não

interferem com coisa nenhuma, é como se não estivessem lá, nem sequer existissem!

De realçar no logigrama ao lado que as linhas do bus são marcadas com setas para cima e para baixo – para

denotar que a informação provinda de um registo se propaga em ambos os sentidos – com isso ficando acessível a

todos os destinos (cujas entradas lhe estejam ligadas)

Será pacífico generalizar a solução a que se chegou a um maior número de registos fonte e/ou destino: ligam-se

ao bus as saídas de todas as fontes e as entradas de todos os destinos – e recorre-se a dois descodificadores, ‘S’ e

‘D’, para seleccionar os parceiros da transferência…

Page 15: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 15/16

Page 16: Prof V Vargas, IST Registos 26/11/13, Pg 1/16web.ist.utl.pt/~D898/public/sd/pdfs/Reg_all.pdf · Esta sessão versa Registos (‘contentores’ de informação) – que o calão anglo-saxónico

Prof V Vargas, IST Registos 26/11/13, Pg 16/16

Registos / Bus-bidireccional

Até agora, os logigramas envolveram dois tipos de registos: registos fonte e registos destino.

Há casos, entretanto, onde convém que o mesmo registo seja fonte-e-destino! Apreendidas as metodologias

abordadas até agora para transferir um registo fonte para um registo destino, será trivial generalizá-las a esses

casos assim. Entretanto, para ilustrar um desses casos, será oportuno um novo Projecto…

Para construir um jogo de xadrez electrónico, um projectista decidiu recorrer a um conjunto de 8×8 registos

para memorizar a posição corrente das peças. Cada registo codifica em 4-bits a peça (rei, rainha, bispo, cavalo,

torre, peão, e respectiva côr: branca-ou-preta) que ocupa uma casa do tabuleiro… Pretende-se a estrutura de

interligação dos registos.

Poder-se-á contestar a opção do Projectista, que se poderá imaginar algum outro modo de fazer as coisas… mas

ela basta para o objectivo em mente: ilustrar um caso em que cada registo ‘funciona’ como fonte e como destino…

Neste Projecto, existem 64 registos, cada um podendo funcionar como fonte e destino; por exemplo, a dama

pode movimentar-se de uma qualquer casa/registo para ‘qualquer’ outra casa/registo… Isso significa a necessidade

de 6 entradas para seleccionar a fonte (o registo onde está actualmente a dama), e outras tantas para seleccionar o

destino (o registo para onde a dama se vai movimentar).

Isso remete para dois descodificadores 6:64 – cada um dos quais se pode resolver sob a forma de uma árvore de

descodificadores 3:8; esta estratégia facilita aliás o interpretar essa árvore como plasmando dois níveis de

selecção: selecciona-se a linha da casa/registo alvo, e, no seio dela, selecciona-se a coluna dessa casa/registo…

Ao lado, encontra-se um logigrama conforme essa estratégia:

– a parte central é um bus (cuja parte ‘média’ está ‘subentendida’);

Subentende-se que as linhas do bus são bidireccionais: a informação provinda da fonte seleccionada propaga-

se em ambos os sentidos – com isso ficando acessível a todos os destinos;

– a esse bus, e pois que todos os registos podem ser fonte, encontram-se ligadas as saídas de todos os flip-flops;

de notar que essas saídas são 3-state e que os registos têm uma entrada EN/output-enable;

– a esse bus, e pois que todos os registos podem ser destino, encontram-se também ligadas as entradas dos seus

flip-flops; de notar que os registos têm uma entrada, ‘M2’, que necessita estar activa para que o registo carregue em

paralelo o valor que se encontrar nessas entradas;

(Por mor de não carregar desnecessariamente o logigrama, ‘subentenderam-se’ as linhas que alimentam as

entradas clock dos registos – que, como se intui, se ligam directamente ao mesmo gerador de impulsos de relógio)

– para seleccionar o registo fonte, implantou-se uma árvore de descodificadores, de dois níveis:

– no nível de topo: ‘S’, que selecciona a linha em que ele se encontra, entre {0, 1, 2, …, 7};

– no nível inferior:

– ‘S0’, que, da linha ‘0’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7};

– ‘S1’, que, da linha ‘1’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7}…

– para seleccionar o destino, implantou-se uma outra árvore de descodificadores, de dois níveis:

– no nível de topo: ‘D’, que selecciona a linha em que ele se encontra, entre {0, 1, 2, …, 7};

– no nível inferior:

– ‘D0’, que, da linha ‘0’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7};

– ‘D1’, que, da linha ‘1’, selecciona a coluna em que o registo se encontra, entre {0, 1, 2, …, 7}…

Então, para levar por diante o movimento de uma peça de um registo para um outro registo, bastará aplicar as

‘coordenadas’ da fonte nas (6) entradas da árvore que selecciona a fonte, e aplicar as ‘coordenadas’ do destino nas

(6) entradas da árvore que selecciona o destino… Com isso, ficarão activas a entrada EN/output-enable da fonte e

a entrada ‘M2’ do destino: no clock seguinte, este passará a conter o que estava na fonte (deixando-se ao leitor

discernir como fazer para que o registo fonte advenha ‘em branco’…).

Porventura contestará o leitor que não há de novo… e de facto quiçá a única novidade seja a seguinte: por mor

de diminuir o esforço do Projectista, já o mercado disponibiliza registos em que as entradas e saídas dos seus flip-

flops se encontram internamente soldadas, vidé ao lado. Oferecem saídas 3-state, e entradas clock, EN/output-

enable e ‘M2’, e um conjunto de pinos de entrada-e-saída (IO: Input-Output), dito de Bus-bidireccional.