Menu
Coddy logo textTech

Порты чтения с регистрацией

Часть раздела Проектирование и верификация 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

Выходной регистр обновляется только на указанном фронте и при включённом пути.

Задержка чтения документа, поведение при отключённом чтении и состояние, которое действительно сбрасывается.

challenge icon

Задание

Средне

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

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

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

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