Menu
Coddy logo textTech

Пересылка при чтении и записи

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

Интерфейс памяти должен определять поведение при чтении и записи по одному адресу. Явная пересылка выбирает входные данные записи при конфликте, обеспечивая поведение с новыми данными. Без этого обходного пути предыдущий шаблон чтения с неблокирующим присваиванием захватывает старые данные. Режимы памяти устройств различаются, поэтому одни лишь семантические правила симуляции не гарантируют соответствие конкретному примитиву.

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

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

Обходной путь выбирает входное слово только при фактическом конфликте адресов.

Явно определяйте поведение при коллизиях и проверяйте его в соответствии с выбранным режимом аппаратной памяти.

challenge icon

Задание

Средне

Реализуйте память из четырёх слов с зарегистрированным чтением и пересылкой новых данных. Правила записи и сброса/разрешения чтения соответствуют предыдущему уроку. При разрешённом чтении, совпадающем с разрешённой записью по тому же адресу, 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
quiz iconПроверьте себя

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

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

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