25 / 63 · Практика
Практикум: исчерпывающая проверка MUX и анализ выхода регистра
Подайте одинаковые входы на комбинационный и регистровый пути и проверьте результаты по таблице истинности и моменту выборки.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Объект эксперимента и условия наблюдения
При sel=0 на y выходит a, при sel=1 — b. sampled_y сохраняет y на положительном фронтеПоложительный фронт — момент перехода такта из 0 в 1. Его следует отличать от уровня, означающего весь интервал CLK=1. Подробнее. Изменение входов не меняет sampled_y до следующего положительного фронта.
Перед началом
Подготовьте Desktop-проект Digital Design Studio и действующее разрешение на выполнение. Сохраните каждый пример как rtl/top.sv в отдельной папке.
Сначала задайте разные a и b. Проверьте, что при sel=0 выходит a, при sel=1 — b, затем сопоставьте с каждой строкой входного файла.
y = sel ? b : a
Исходный код 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 и сравните результаты.
| Параметр | Значение |
|---|---|
| Начальные значения регистров, от LSB | [false] |
| Reset port | Оставить пустым |
| Maximum cycles / time | 8 / 8000ps |
Каждый столбец соответствует одному элементу входного файла ниже. Ожидаемые комбинационные y: 0,0,0,1,1,0,1,1. Это функциональный прогноз по порядку входов; моменты обновления sampled_y на рисунке не показаны.
Показать данные диаграммы
| Сигнал | Диаграмма | Значения шины |
|---|---|---|
| a | 0...1... | |
| b | 0.1.0.1. | |
| sel | 01010101 | |
| y ожидаемое | 0..1.01. |
Входные воздействия
[
{
"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 cycles · y=1 · sampled_y=1. В момент 3000ps проверьте y=1 и sampled_y=0.
Практикум использует однотактовый RTL 0/1. Тестбенч с #delay, initial, X/Z не входит в него. Отметка завершения урока фиксирует обучение, а не фактический результат симуляции.
Сначала запишите ожидаемые результаты
До запуска симулятора вычислите комбинационный для указанной последовательности. Ожидаемая строка: . Она проверяет все восемь входных комбинаций и даёт более сильное свидетельство, чем совпадение одного конечного значения.
Выход регистраРегистр хранит многобитное состояние. Синхронные регистры в этом курсе записывают определённый вход на фронте тактового сигнала. Подробнее обновляется на положительном фронте, а не в момент смены воздействия. Отдельно записывайте комбинационный выход перед фронтом и регистровый выход после него.
Здесь состояние после фронта определено входами, выбранными на -м фронте. Сигнал sampled_y соответствует этому состоянию. Даже при одной временной координате проверяйте порядок событий подачи входа и обновления регистра.
Три проверки для различения дефектов
- Инверсия выбора: до замены на
sel ? a : bпредскажите первый ошибочный вектор. Векторы с не обнаруживают этот дефект. - Путаница момента наблюдения: объясните, почему немедленное сравнение
sampled_yвместоyс комбинационным эталоном делает исправную схему похожей на неисправную. - Проверка сохранения выхода: меняйте только невыбранный вход и проверяйте постоянство . Изменениям выбранного входа должен следовать.
В отчёте об ошибке записывайте вход, момент наблюдения, ожидаемое и фактическое значение. Фраза «странная диаграмма» не позволяет отличить ошибку выбора от задержки на цикл.
Дополнительное задание
При расширении данных до 4 бит пространство комбинационных входов равно . Исчерпывающая проверка всё ещё возможна, но сначала используйте 0, максимум, 0101, 1010 и walking-one, чтобы быстро выявить ошибки позиций битов. Обновите также настройки и входной файл для новой ширины.
Попробуйте сами
На положительном фронте сохранён результат при . До следующего фронта изменён только на 1. Найдите после логической задержки и sampled_y до и после следующего положительного фронта.
Прочитать объяснение
Комбинационный . sampled_y хранит 0 до следующего положительного фронта, затем сохраняет 1. Предполагается, что вход устойчив в течение времени, необходимого для выборки.