20 / 20 · Conceito
Revisão de integração RTL e extensões
Conecte o modelo didático às interfaces RTL e às evidências de verificação.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Divida as responsabilidades do núcleo e do módulo envolvente
O núcleo da matriz trata encaminhamento registrado de operandos, MACs com sinal, valid/etiquetas e advance global. O módulo envolvente trata start/clear, dimensões das matrizes, coordenadas dos blocos, fornecimento defasado na fronteira, coleta mascarada de resultados e handshakes de saída. Defina cada responsabilidade com nomes de sinais e um contrato de bordas.
Um módulo envolvente simples usa IDLE, CLEAR, RUN, COLLECT e SEND. CLEAR garante uma borda de inicialização antes dos dados. RUN avança os passos lógicos de zero a K+2N−3. Os resultados ficam completos imediatamente após a última borda RUN; COLLECT os copia na borda seguinte. Isso evita copiar o acumulador anterior na mesma borda de sua atualização não bloqueante final.
Resolva um exemplo de latência de integração
Para N=K=2, clear ocorre em E−1 e o cálculo em E0..E3. Suponha que E4 copie quatro resultados em paralelo para um buffer de resultados. Uma saída de um resultado por borda com ready sempre verdadeiro envia dezenove, vinte e dois, quarenta e três e cinquenta em E5..E8, na ordem por linhas. Medir de clear até a transferência final inclui dez bordas de subida E−1..E8, em comparação com quatro bordas de cálculo. O bloqueio da saída prolonga SEND sem alterar os valores concluídos.
O conteúdo dos resultados precisa de job e coordenadas globais, além de uma representação bruta ou quantizada definida. Não limpe um acumulador até que seu resultado tenha sido copiado ou consumido com segurança. Sobrepor o próximo cálculo a SEND exige definir a posse dos buffers e separar os trabalhos.
Revise os contratos ao estender o projeto
Um multiplicador em pipeline altera a temporização da acumulação, das etiquetas e da conclusão. Dividir a redução em blocos exige manter somas parciais e uma nova análise de largura. Sobrepor trabalhos exige estado de acumulação separado. Uma FIFO armazena value, valid e etiquetas como um único conteúdo e exige verificações de overflow/underflow.
A documentação de arquitetura do Gemmini oferece um exemplo de fonte primária em que armazenamento local e movimento de dados acompanham a matriz. Nossa máquina de estados e nosso exemplo de temporização são contratos didáticos especificados de forma independente.
Entregue dimensões, larguras, cronograma da fronteira, definição de conclusão, política de pausa/reset, ordem das saídas e logs do scoreboard. Verificações em Node estabelecem o comportamento do modelo de referência. Simulação RTL, síntese, fechamento de temporização e integração do produto precisam de seus próprios comandos executados e evidências antes de afirmar sucesso.
Experimente
No exemplo de integração, bloqueie ready por duas bordas após E6. Qual passa a ser a borda de transferência final e a quantidade total de bordas medidas?
Ler a explicação
Espere em E7 e E8 e depois envie os dois resultados restantes em E9 e E10. A última transferência é E10; medir E−1..E10 inclui doze bordas. O cálculo continua com quatro bordas E0..E3, e os dados bloqueados devem ser mantidos.