Altifigence Academy

9 / 36 · Практика

Практика симуляции MUX

Сравните выходы с помощью предоставленных файлов.

Чему вы научитесь

When sel is 0, y follows a; when sel is 1, it follows b. sampled_y stores y at the rising clock edge and holds that value until the next rising edge.

Перед началом

Подготовьте проект Digital Design Studio Desktop и права запуска. Сохраните каждый пример в отдельной папке как rtl/top.sv.

SystemVerilog source

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;
endmodule

Запуск примера

В New analysis выберите Two-state single-clock v1, задайте Clock port=clk и период 1000ps. С указанными ниже значениями выполните Preflight, затем Run RTL simulation и сравните результат.

ПараметрЗначение
Начальные значения регистра (младший бит первым)[false]
Порт сбросаОставить пустым
Максимум циклов / времени8 / 8000ps

Input stimulus

json
[
  {
    "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
      ]
    }
  }
]

Сравните результат

После 8 циклов y=1, sampled_y=1. В 3000ps сравните y=1 и sampled_y=0.

Практика использует двухсостоянийный RTL с одним тактом. Не добавляйте #delay, initial или тестбенчи X/Z. Учебный прогресс не подтверждает запуск симулятора.

Lesson files

mux-top.sv ↓mux-inputs.json ↓

Выбор действует в этом браузере. Его можно изменить внизу страницы.