【问题标题】:Creating a `RAM` chip in `Verilog` with single in/out data port在“Verilog”中使用单输入/输出数据端口创建“RAM”芯片
【发布时间】:2019-08-09 16:33:10
【问题描述】:

我想在 verilog 中创建一个RAM 芯片,以了解VerilogRAMEEPROM 等现代芯片如何允许通过单个地址端口和单个数据端口读取和写入芯片。(数据端口为输入和输出端口) 我想在Verilog 中做同样的事情,我认为我需要 inout 类型,但我不知道它是如何工作的。 我用谷歌搜索,但我能找到的所有RAM 示例都有单独的数据写入和数据读取端口。 由于 inout 类型需要两边都连接到电线,我需要将一根电线从一侧连接到地址选择的 reg。(所以没有分配)。但我不知道该怎么做。

这是我尝试过但不起作用的方法:

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

谁能帮忙?

谢谢

【问题讨论】:

    标签: verilog


    【解决方案1】:

    我能找到的所有 RAM 示例都有一个单独的数据写入和数据读取端口。

    原因是两个事实的结合:

    1. 真正的双向数据总线需要三态驱动程序。

    2. FPGA 或 ASIC 芯片不再具有片上三态驱动程序。

    唯一可能实现双向数据的地方是 I/O,那里有三态焊盘。

    因此,在内部,每个人都将使用这两条数据总线,因为任何真正的内存都将在其核心具有单独的读取数据和写入数据总线。然后在边缘(在焊盘处),它们将切换到双向模式。

    要编写您自己的 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;
    

    【讨论】:

    • 感谢您的回答。但是如果 FPGA 不再具有片上三态驱动程序,那么我该如何测试我的总线。目前,我使用 edaplayground 来编写和测试我的东西,因为我正在等待我的 FPGA 到达,它有一个用于测试平台的 verilog 东西。我用它来测试我的“cpu”的所有功能。如果没有片上三态驱动程序,那么如何测试我的双向 RAM 总线?还是对模拟器没有限制?
    • 不,这不是模拟器的限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多