Пересылка при чтении и записи
Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 24 из 38.
Интерфейс памяти должен определять поведение при чтении и записи по одному адресу. Явная пересылка выбирает входные данные записи при конфликте, обеспечивая поведение с новыми данными. Без этого обходного пути предыдущий шаблон чтения с неблокирующим присваиванием захватывает старые данные. Режимы памяти устройств различаются, поэтому одни лишь семантические правила симуляции не гарантируют соответствие конкретному примитиву.
Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.
if(re) begin
if(we && waddr==raddr) q <= data;
else q <= mem[raddr];
endОбходной путь выбирает входное слово только при фактическом конфликте адресов.
Явно определяйте поведение при коллизиях и проверяйте его в соответствии с выбранным режимом аппаратной памяти.
Задание
СреднеРеализуйте память из четырёх слов с зарегистрированным чтением и пересылкой новых данных. Правила записи и сброса/разрешения чтения соответствуют предыдущему уроку. При разрешённом чтении, совпадающем с разрешённой записью по тому же адресу, q получает входные данные вместо старого слова. При других чтениях он получает значение mem[raddr]. Столбцы вывода: 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