Menu
Coddy logo textTech

Хранилище на массиве регистров

Часть раздела Проектирование и верификация RTL путешествия по Verilog на Coddy. Урок 22 из 38.

Распакованный массив может моделировать слова аппаратного хранилища. Тактовая запись обновляет одно выбранное слово; непрерывное чтение выбирает слово без тактового сигнала чтения. Синтез может реализовать небольшие массивы с помощью регистров или вывести ресурсы памяти для поддерживаемых шаблонов. Никогда не предполагайте, что незаписанное слово изначально равно нулю.

Соответствующий фрагмент; окружающие объявления и соединения предоставлены в задании.

reg [7:0] mem [0:3];
always @(posedge clk)
    if(we) mem[waddr] <= data;
assign q = mem[raddr];

Запись выполняется по фронту тактового сигнала, а чтение возвращает выбранное сохранённое слово.

Явно задавайте разрешение записи и время чтения; не полагайтесь на неуказанное начальное содержимое памяти.

challenge icon

Задание

Средне

Реализуйте четыре 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
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Проектирование и верификация RTL

Потренируйтесь самостоятельно: Онлайн-компилятор Verilog