Порты чтения с регистрацией
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 23 из 38.
Чтение с регистрацией захватывает данные памяти на тактовом фронте и после этого сохраняет полученное значение. Сигнал разрешения чтения может сохранять предыдущее значение на выходе в тактах, когда чтение отключено. Сброс регистра чтения не требует очистки каждого слова памяти. При неблокирующих присваиваниях для чтения и записи выражение чтения видит слово до тактового фронта.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
always @(posedge clk) begin
if(we) mem[waddr] <= data;
if(rst) q <= 0;
else if(re) q <= mem[raddr];
endВыходной регистр обновляется только на указанном фронте и при включённом пути.
Задержка чтения документа, поведение при отключённом чтении и состояние, которое действительно сбрасывается.
Задание
СреднеРеализуйте четырёхсловную 8-битную память с синхронной записью и зарегистрированным чтением в q. we выполняет запись по восходящим фронтам. rst синхронно очищает только q; в противном случае re загружает в q значение из mem[raddr], существовавшее до фронта. При re=0 значение q сохраняется. Память не сбрасывается, а запись выполняется независимо от rst. Если на одном фронте чтение и запись обращаются к одному адресу, q получает старое слово. Перед разрешённым чтением тесты инициализируют слова. Столбцы вывода: q. Все управляющие сигналы и данные стабильны перед каждым восходящим фронтом тактового сигнала; результаты наблюдаются после него.
Заполните design.v и сохраните имена его модуля и портов. Заблокированный testbench.v задаёт изменения входных сигналов и выводит результаты после их стабилизации. Он выбирает сценарий с помощью аргумента симулятора, например +CASE=1; стандартный ввод не требуется. Не добавляйте в проект вывод, задержки или завершение симуляции. Ожидаемый вывод — одна строка десятичных значений для каждого наблюдения, разделённых одним пробелом и заканчивающихся символом новой строки.
Попробуйте сами
module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
// Замените этот заполнитель на ваш дизайн.
initial q = 0;
endmoduleВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Проектирование и верификация RTL
1Надёжная комбинационная RTL-логика
Значения по умолчанию предотвращают защёлкиПриоритетные кодировщикиПроверка One-HotБезопасное декодирование caseПовторение — маршрутизатор запросов4Управляемая последовательная RTL-логика
Приоритет сброса и разрешенияСчётчики с насыщениемКонвейеризация данных и validОбнаружение дискретизированных фронтовПовторение — счётчик событий2Разрядности и знаковая арифметика
Сохранение битов переносаСравнения знаковых чиселАрифметические сдвиги вправоПереполнение и насыщениеПовторение — знаковая разность5Память и таблицы поиска
Комбинационные ROM-таблицыХранилище на массиве регистровПорты чтения с регистрациейПересылка при чтении и записиПовторение — банк с двумя портами чтенияПотренируйтесь самостоятельно: Онлайн-компилятор Verilog