Вопрос:

Создание чипа RAM в Verilog с одним входным / выходным портом данных

verilog

25 просмотра

1 ответ

1 Репутация автора

Я хочу создать RAMчип в Verilog, чтобы узнать, как Verilogсовременные чипы любят RAMи EEPROMпозволяют читать и записывать в чип через один адресный порт и один порт данных. (Порт данных является портом ввода и вывода) Я хочу сделать то же самое вещь Verilog, и я думаю, что мне нужен тип Inout, но я не знаю, как это работает. Я в Google, но все RAMпримеры, которые я могу найти, имеют отдельный порт для записи и чтения данных. Поскольку тип inout требует подключения обеих сторон к проводу, мне нужно подключить один провод с одной стороны к регистру, выбранному по адресу. (Поэтому не назначайте). Но я не знаю, как это сделать.

Это то, что я пытался и не работает:

wire [7:0] a;
wire rw;// 0 if read, 1 if write
reg [7:0] mem [16];
initial begin
  if (rw == 1) begin
    #1 a = mem[0];// 0 would be the address wire, but excluding it for clarity
  end
  if (rw == 0) begin
    #1 mem[0] = a;// 0 would be the address wire, but excluding it for clarity
  end
end

Кто-нибудь может помочь?

Спасибо

Автор: Tim Источник Размещён: 09.08.2019 04:33

Ответы (1)


0 плюса

3882 Репутация автора

все примеры ОЗУ, которые я могу найти, имеют отдельный порт для записи и чтения данных.

Причина заключается в сочетании двух фактов:

  1. Истинная двунаправленная шина данных потребовала бы драйверов с тремя состояниями.

  2. Чипы FPGA или ASIC больше не имеют встроенных драйверов трех состояний.

Единственное место, где возможны двунаправленные данные, - это ввод / вывод, где у вас есть трехпозиционные площадки.

Таким образом, внутренне все будут использовать две шины данных, так как любая реальная память будет иметь в своей основе отдельную шину для чтения и записи данных. Затем на краю (на площадках) они переключатся в двунаправленный режим.

Чтобы написать собственную двунаправленную шину Verilog, вы должны использовать назначение сигналов трех состояний. Что-то по линии:

inout[7:0] data_bus,

// This assignment is inside the memory model:
// Driving the read data out of the memory device
assign data_bus = mem_read ? mem_read_data : 8'hzz;


// This assignment is outside the memory model
// Driving the write data into the memory device
assign data_bus = mem_read ? 8'hzz : external_driver;
Автор: Oldfart Размещён: 11.08.2019 07:41
Вопросы из категории :
32x32