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