Upload
lethuy
View
213
Download
0
Embed Size (px)
Citation preview
Prof V Vargas, IST Registos 26/11/13, Pg 1/16
+
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…
Prof V Vargas, IST Registos 26/11/13, Pg 3/16
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’.
Prof V Vargas, IST Registos 26/11/13, Pg 5/16
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)
Prof V Vargas, IST Registos 26/11/13, Pg 7/16
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).
Prof V Vargas, IST Registos 26/11/13, Pg 9/16
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 …
Prof V Vargas, IST Registos 26/11/13, Pg 11/16
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.
Prof V Vargas, IST Registos 26/11/13, Pg 13/16
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…
Prof V Vargas, IST Registos 26/11/13, Pg 15/16
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.