Circuitos sequenciais elementares João Canas Ferreira Arquitectura de Computadores FEUP/LEIC Contém figuras de Computer Organization and esign,. Patterson & J. Hennessey, 3ª. ed., MKP ópicos Sistemas sequenciais síncronos Elementos de memória Registos e contadores Especificação de circuitos sequenciais em Verilog ArqComp: Circuitos sequenciais elementares 2/27 2006-03-13
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. ArqComp: Circuitos sequenciais elementares 3/27 2006-03-13 Sinal de relógio Sinal de relógio típico: mudanças de estado ocorrem aqui th tl Período : intervalo de repetição Frequência F: F = 1/ (Hz) ArqComp: Circuitos sequenciais elementares 4/27 2006-03-13
Organização geral de um sistema sequencial síncrono Elemento de estado 1 Circuito combinacional 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 combinacional atingir o seu valor final (estabilizar). Elemento de estado 1 Circuito combinacional Num sistema sensível ao flanco (como todos os que usaremos) um elemento de memória pode ser lido e alterado no mesmo ciclo de relógio. ArqComp: Circuitos sequenciais elementares 5/27 2006-03-13 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 combinacional leva a atingir o valor final. O valor mínimo para o período do sinal de relógio é: t setup + t pm + t pc ArqComp: Circuitos sequenciais elementares 6/27 2006-03-13
Regulação do sinal de relógio: gráficos t pm t pc Elemento de Circuito combinacional 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 7/27 2006-03-13 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 8/27 2006-03-13
O trinco tipo / 1 0 0 1 1 1 1 0 0 x anterior / anterior =1: modo transparente =0: modo de retenção ArqComp: Circuitos sequenciais elementares 9/27 2006-03-13 O trinco tipo : formas de onda C ArqComp: Circuitos sequenciais elementares 10/27 2006-03-13
O flip-flop tipo L 1 L 2 / 0 0 1 1 1 0 x 0 anterior / anterior x 1 anterior / anterior ArqComp: Circuitos sequenciais elementares 11/27 2006-03-13 O flip-flop tipo : formas de onda ArqComp: Circuitos sequenciais elementares 12/27 2006-03-13
O flip-flop tipo O flip-flop tipo troca de estado a cada ciclo de relógio. CK Por vezes, é útil ter uma entrada de habilitação (enable). O circuito só funciona quando essa entrada está activa. EN EN CK ArqComp: Circuitos sequenciais elementares 13/27 2006-03-13 O flip-flop tipo : formas de onda Flip-flop sem entrada de enable Flip-flop com entrada de enable EN ArqComp: Circuitos sequenciais elementares 14/27 2006-03-13
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,... ). Out3 Out2 Out1 Out0 FF3 FF2 FF1 FF0 CK CK CK CK In3 In2 In1 In0 ArqComp: Circuitos sequenciais elementares 15/27 2006-03-13 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 16/27 2006-03-13
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 17/27 2006-03-13 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 18/27 2006-03-13
Contador do tipo ripple counter 0 1 2 3 0 1 2 3 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 p a reagir ao flanco activo. [ p é o tempo de propagação da entrada para a saída.] ArqComp: Circuitos sequenciais elementares 19/27 2006-03-13 Contador binário síncrono 0 1 2 3 CntEN EN EN EN EN 0 1 2 3 Nesta versão, todos os flip-flops comutam simultaneamente (em p segundos). Entre flancos sucessivos, o sinal de habilitação deve propagar-se ao longa da cadeia de portas AN. ArqComp: Circuitos sequenciais elementares 20/27 2006-03-13
Verilog: Eventos Para descrever sistemas síncronos, é preciso especificar o evento de sincronização na lista de sensibilidades do(s) bloco(s) always. Exemplo: module sincrono(clk, ); input clk; always @(posedge clk) /* operações a executar sincronamente*/ 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 21/27 2006-03-13 Atribuição bloqueante arefa: 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 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 Atribuições são executadas por ordem, em um só passo. ArqComp: Circuitos sequenciais elementares 22/27 2006-03-13
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 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 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 23/27 2006-03-13 Verilog: Flip-flop Um flip-flop tipo module flop (,, ); input ; input ; output ; reg ; always @(posedge ) <= ; Um registo de 8 bits com reset module registo (, Rst,, ); input, Rst; input [7:0] ; output[7:0] ; reg [7:0] ; always @(posedge ) if (Rst) <= 0; else <= ; ArqComp: Circuitos sequenciais elementares 24/27 2006-03-13
Verilog: Outros elementos de memória rinco tipo : Flip-flop tipo com reset: module trinco (C,, ); input C, ; output ; reg ; always @(C or ) begin if (C) <= ; end module tff (, Rst, ); input, Rst; output ; reg ; always @(posedge clk) if (Rst) <= 0; else <= ~; ArqComp: Circuitos sequenciais elementares 25/27 2006-03-13 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; ArqComp: Circuitos sequenciais elementares 26/27 2006-03-13
Exemplo: Simulação de um contador de 3 bits Modelo estrutural de um contador ripple-carry: 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]); ; 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; ArqComp: Circuitos sequenciais elementares 27/27 2006-03-13