Circuitos sequenciais elementares João Canas Ferreira Arquitectura de Computadores FEUP/LEIC Contém figuras de Computer Organization and esign,. Patterson & J. Hennessey, 3 a. ed., MKP Tópicos Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 2/32 2007-02-24
Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 3/32 2007-02-24 3
efinição de circuito sequencial Circuito combinatório: o valor da saída depende apenas dos valores actuais das entradas. Circuito sequencial: o valor da saída depende dos valores actuais e de todos os valores anteriores das entradas. Estado de um circuito: conjunto de variáveis de estado que, em cada momento, contêm informação suficiente sobre o passado para permitirem a determinação do comportamento futuro (em conjunto com os valores da entrada). Em circuitos digitais, as variáveis de estado são binárias: um circuito com n variáveis de estado pode ter até 2 n estados. O valor de uma variável de estado é preservado num elemento de memória. Nos circuitos digitais síncronos, as mudanças de estado ocorrem em instantes de tempo determinados por um sinal periódico: o sinal de relógio. Um sistema síncrono pode reagir apenas aos flancos do sinal de relógio (p. ex. ao flanco ascendente) ou pode ser sensível ao nível do sinal de relógio. (Usaremos exclusivamente a primeira abordagem.) ArqComp: Circuitos sequenciais elementares 4/32 2007-02-24 4
Sinal de relógio Sinal de relógio típico (para um sistema activo ao flanco ascendente): mudanças de estado ocorrem aqui th T tl Período T : intervalo de repetição Frequência F : F = 1/T (Unidade: Hz = 1/s) T = t H + t L ArqComp: Circuitos sequenciais elementares 5/32 2007-02-24 5
Organização geral de um sistema sequencial síncrono Elemento de estado 1 Circuito combinatório Elemento de estado 2 O flanco de relógio determina quando é que os elementos de memória são modificados. O período de relógio deve ser longo o suficiente para a saída da lógica combinatória atingir o seu valor final (estabilizar). Elemento de estado 1 Circuito combinatório Num sistema sensível ao flanco (como todos os que usaremos) o valor de um elemento de memória pode ser usado para calcular o próximo valor desse mesmo elemento. A alteração só tem efeito no flanco activo seguinte. ArqComp: Circuitos sequenciais elementares 6/32 2007-02-24 6
Regulação do sinal de relógio tempo de setup: período de tempo, anterior ao flanco activo do sinal de relógio, em que a entrada de um elemento de memória deve permanecer inalterada [preparação]. tempo de hold: período de tempo, posterior ao flanco activo do sinal de relógio, em que a entrada de um elemento de memória deve permanecer inalterada [permanência]. tempo de propagação t pm : tempo (máximo) que o elemento de memória demora a reagir ao flanco activo do relógio. tempo de propagação t pc : tempo (máximo) que a saída do circuito combinatório leva a atingir o valor final. O valor mínimo para o período do sinal de relógio é: T t setup + t pm + t pc ArqComp: Circuitos sequenciais elementares 7/32 2007-02-24 7
Regulação do sinal de relógio: gráficos t pm t pc Elemento de Circuito combinatório estado 1 A B C Elemento de estado 2 t setup relógio t hold A t pm B t pc C ArqComp: Circuitos sequenciais elementares 8/32 2007-02-24 8
Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 9/32 2007-02-24 9
Realimentação positiva Uma forma de preservar valores lógicos baseia-se na utilização de realimentação positiva (i. e., que reforça o estado actual). O elemento de memória tem dois estados: elemento bi-estável. O elemento bi-estável mais simples: N 1 N 2 Mas não tem entradas... ArqComp: Circuitos sequenciais elementares 10/32 2007-02-24 10
O trinco tipo Clk Clk / 1 0 0 1 1 1 1 0 0 x anterior / anterior Clk=1: modo transparente Clk=0: modo de retenção ArqComp: Circuitos sequenciais elementares 11/32 2007-02-24 11
O trinco tipo : formas de onda C ArqComp: Circuitos sequenciais elementares 12/32 2007-02-24 12
A báscula tipo L 1 L 2 Clk Clk Clk Báscula = flip-flop Clk / 0 0 1 1 1 0 x 0 anterior / anterior x 1 anterior / anterior ArqComp: Circuitos sequenciais elementares 13/32 2007-02-24 13
A báscula tipo : formas de onda Clk ArqComp: Circuitos sequenciais elementares 14/32 2007-02-24 14
A báscula tipo T A báscula tipo T troca de estado a cada ciclo de relógio. T T CK Por vezes, é útil ter uma entrada de habilitação (enable). O circuito só muda de estado quando essa entrada está activa. EN EN T T CK ArqComp: Circuitos sequenciais elementares 15/32 2007-02-24 15
A báscula tipo T: formas de onda Báscula T sem entrada de enable T Báscula T com entrada de enable T EN ArqComp: Circuitos sequenciais elementares 16/32 2007-02-24 16
Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 17/32 2007-02-24 17
Registos e bancos de registos Registo: grupo de n elementos de memória, que são acedidos como uma única entidade. Banco de registos: conjunto de registos (de capacidade idêntica), em que cada registo individual pode ser selecionado pelo seu número de ordem (0, 1,... ). Implementação de um registo: Out3 Out2 Out1 Out0 FF3 FF2 FF1 FF0 CK CK CK CK Clk In3 In2 In1 In0 ArqComp: Circuitos sequenciais elementares 18/32 2007-02-24 18
Banco de registos multiporto Read register number 1 Read register number 2 Read data 1 Write register Write data Register file Write Read data 2 ArqComp: Circuitos sequenciais elementares 19/32 2007-02-24 19
Banco de registos: leitura Read register number 1 Register 0 Register 1... Register n Ð 2 M u x Read data 1 Register n Ð 1 Read register number 2 M u Read data 2 x ArqComp: Circuitos sequenciais elementares 20/32 2007-02-24 20
Banco de registos: escrita Write 0 1 C Register 0 Register number n-to-2 n decoder. C n Ð 1 Register 1 n. C Register nð2 C Register nð1 Register data ArqComp: Circuitos sequenciais elementares 21/32 2007-02-24 21
Contador do tipo ripple-counter Implementação: 0 1 2 3 Clk T T0 T T1 T T2 T T3 Saída: número de quatro bits: 3 2 1 0. Contador muito lento: na pior situação (mudança do bit mais significativo) um contador de n bits demora n T pt a reagir ao flanco activo. [T pt é o tempo de propagação da entrada T para a saída.] ArqComp: Circuitos sequenciais elementares 22/32 2007-02-24 22
Contador binário síncrono 0 1 2 3 CntEN EN EN EN EN T0 T1 T2 T3 Clk T T T T Nesta versão, todos os flip-flops comutam simultaneamente (em T pt segundos). Entre flancos sucessivos, o sinal de habilitação deve propagar-se ao longa da cadeia de portas AN. ArqComp: Circuitos sequenciais elementares 23/32 2007-02-24 23
Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 24/32 2007-02-24 24
Verilog: Eventos Para descrever sistemas síncronos, é preciso especificar o evento de sincronização na lista de eventos do(s) bloco(s) always. Exemplo: module sincrono(clk,...); input clk;... always @(posedge clk) /* operações a executar sincronamente */... endmodule Para circuito activo ao flanco descendente: negedge clk Como os valores devem permancer constantes entre a ocorrência dos flancos, devem usar-se variáveis do tipo reg na descrição das operações. ArqComp: Circuitos sequenciais elementares 25/32 2007-02-24 25
Atribuição bloqueante Tarefa: trocar de posição os dois bytes de uma palavra de 16 bits. Estes exemplos não funcionam correctamente: module m1(clk, palavra,...); input clk; output [15:0] palavra; reg [15:0] palavra;... always @(posedge clk) begin palavra[15:8]=palavra[7:0]; palavra[7:0]=palavra[15:8]; end... endmodule module m1(clk, palavra,...); input clk; output [15:0] palavra; reg [15:0] palavra;... always @(posedge clk) begin palavra[7:0]=palavra[15:8]; palavra[15:8]=palavra[7:0]; end... endmodule Atribuições são executadas por ordem, em um só passo. ArqComp: Circuitos sequenciais elementares 26/32 2007-02-24 26
Atribuição não-bloqueante Ambos os exemplos funcionam correctamente: module m1(clk, palavra,...); input clk; output [15:0] palavra; reg [15:0] palavra;... always @(posedge clk) begin palavra[15:8]<=palavra[7:0]; palavra[7:0]<=palavra[15:8]; end... endmodule module m1(clk, palavra,...); input clk; output [15:0] palavra; reg [15:0] palavra;... always @(posedge clk) begin palavra[7:0]<=palavra[15:8]; palavra[15:8]<=palavra[7:0]; end... endmodule Atribuições simultâneas são executadas em dois passos: 1. avaliação de todas as expressões (lado direito); 2. atribuições só são executadas após todas as avalições. Ordem das atribuições é irrelevante. Na especificação de sistemas síncronos, usa-se quase sempre a atribuição não-bloqueante. ArqComp: Circuitos sequenciais elementares 27/32 2007-02-24 27
Verilog: Báscula tipo Uma báscula tipo Um registo de 8 bits com reset module flop (Clk,, ); input Clk; input ; output ; reg ; always @(posedge Clk) <= ; endmodule module registo (Clk, Rst,, ); input Clk, Rst; input [7:0] ; output[7:0] ; reg [7:0] ; always @(posedge Clk) if (Rst) <= 0; else <= ; endmodule ArqComp: Circuitos sequenciais elementares 28/32 2007-02-24 28
Verilog: Outros elementos de memória Trinco tipo : Flip-flop tipo T com reset: module trinco (C,, ); input C, ; output ; reg ; always @(C or ) begin if (C) <= ; end endmodule module tff (Clk, Rst, ); input Clk, Rst; output ; reg ; always @(posedge clk) if (Rst) <= 0; else <= ~; endmodule ArqComp: Circuitos sequenciais elementares 29/32 2007-02-24 29
Verilog: Banco de registos module bancoregs (Read1, Read2, WriteReg, Writeata, RegWrite, ata1, ata2, clock); input [4:0] Read1, Read2, WriteReg; input [31:0] Writeata; input RegWrite, clock; output [31:0] ata1, ata2; reg [31:0] RF [31:0]; // 32 registos de 32 bits assign ata1 = RF[Read1]; assign ata2 = RF[Read2]; // leitura always @(posedge clock) // escrita síncrona if (RegWrite) RF[WriteReg] <= Writeata; endmodule ArqComp: Circuitos sequenciais elementares 30/32 2007-02-24 30
Exemplo: Simulação de um contador de 3 bits Modelo estrutural de um contador ripple-carry: Bancada de teste: module contador3(clk, rst, dados); input clk, rst; output [2:0] dados; wire tmp0, tmp1; assign tmp0 = ~dados[0]; assign tmp1 = ~dados[1]; tff ff0(clk, rst, dados[0]); tff ff1(tmp0, rst, dados[1]); tff ff3(tmp1, rst, dados[2]); endmodule; module topo; reg relogio; reg reset; wire [2:0] contagem; contador3 cont(relogio, reset, contagem); initial begin // executa 1 vez reset = 1; relogio = 0; #5 reset = 0; #100 $stop; end always // período 20 #10 relogio = ~relogio; endmodule ArqComp: Circuitos sequenciais elementares 31/32 2007-02-24 31
Elementos de consulta [Patterson & Hennessy]: Apêndice B, secções B.7, B.8 (C) [elgado & Ribeiro]: Secções 2.6.1 2.6.5 [Arroz, Monteiro & Oliveira]: Secções 6.1 6.6 ArqComp: Circuitos sequenciais elementares 32/32 2007-02-24 32