25 / 63 · Prática
Prática: teste exaustivo do MUX e análise da saída registrada
Aplique as mesmas entradas aos caminhos combinacional e registrado e verifique pela tabela-verdade e pelos instantes de captura.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
Circuito e condições de observação
Com sel=0, y recebe a; com sel=1, recebe b. sampled_y armazena y na borda de subidaBorda de subida Instante em que o clock passa de 0 para 1. É diferente do nível alto, que abrange todo o intervalo com CLK=1. Saiba mais e se mantém até a próxima, mesmo que as entradas mudem.
Antes de começar
Prepare um projeto Desktop do Digital Design Studio e as permissões necessárias para executá-lo. Salve cada exemplo como rtl/top.sv em uma pasta independente.
Primeiro faça a e b diferentes. Confira se sel=0 seleciona a e sel=1 seleciona b e compare cada linha do arquivo de entradas.
y = sel ? b : a
Código SystemVerilog
module top (
input logic clk,
input logic a,
input logic b,
input logic sel,
output logic y,
output logic sampled_y
);
assign y = sel ? b : a;
// Explicit observation register: y remains purely combinational.
// The register makes this design eligible for logic-netlist-1 simulation.
always_ff @(posedge clk) sampled_y <= y;
endmoduleExecução
Em New analysis, selecione Two-state single-clock v1. Configure Clock port como clk e o período como 1000ps. Com os valores abaixo, execute Preflight e depois Run RTL simulation; compare os resultados.
| Configuração | Valor |
|---|---|
| Valores iniciais dos registradores, a partir do LSB | [false] |
| Reset port | Vazio |
| Maximum cycles / time | 8 / 8000ps |
Cada coluna representa uma entrada do arquivo abaixo. A y combinacional esperada é 0,0,0,1,1,0,1,1. A figura prevê a função na ordem das entradas; não mostra quando sampled_y é atualizado.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| a | 0...1... | |
| b | 0.1.0.1. | |
| sel | 01010101 | |
| y esperado | 0..1.01. |
Estímulos de entrada
[
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
true
]
}
}
]Comparação dos resultados
8 cycles · y=1 · sampled_y=1. Confira se, em 3000ps, y=1 e sampled_y=0.
Esta prática usa RTL 0/1 de um único clock, sem testbenches com #delay, initial ou X/Z. Marcar a aula como concluída é um registro de aprendizagem, não um resultado real de simulação.
Escreva primeiro os resultados esperados
Antes de executar, calcule y para a sequência dada: . São verificadas as oito combinações possíveis, evidência mais forte do que acertar apenas o valor final.
A saída do registradorRegistrador Circuito que armazena vários bits de estado. Os registradores síncronos deste curso capturam a entrada especificada na borda de clock. Saiba mais muda na borda de subida, não ao aplicar um estímulo. Anote separadamente y logo antes da borda e a saída registrada logo depois.
As entradas capturadas em k definem o estado posterior , chamado sampled_y. Mesmo que compartilhem a coordenada temporal, confira a ordem da aplicação das entradas e da atualização do registrador.
Três verificações para distinguir os defeitos
- Seleção invertida: antes de mudar para
sel ? a : b, preveja o primeiro vetor que falha. Vetores com não detectam esse erro. - Confusão no ponto de observação: explique por que comparar imediatamente
sampled_y, em vez dey, com a referência combinacional pode reprovar um circuito correto. - Manutenção diante de entradas não selecionadas: mude apenas a entrada não escolhida e confira se y é mantido. Se a escolhida mudar, y deve acompanhá-la.
Registre, para cada falha, entrada, instante, valor esperado e valor real. «A forma de onda está estranha» não distingue erro de seleção de latência de um ciclo.
Ampliação
Com dados de quatro bits, o espaço combinacional é . Ainda é viável testar tudo, mas use primeiro 0, máximo, 0101, 1010 e padrões walking-one para revelar erros de posição. Atualize também configuração e arquivo de entradas para a nova largura.
Experimente
Após capturar numa borda de subida, apenas muda para 1 antes da próxima. Calcule após o atraso lógico e sampled_y antes e depois da próxima borda.
Ler a explicação
A saída combinacional é . sampled_y mantém 0 até a próxima borda de subida e nela captura 1. Pressupõe-se que as entradas fiquem estáveis pelo tempo necessário à captura.