【问题标题】:Cascading BRAM in iCE40 FPGAiCE40 FPGA 中的级联 BRAM
【发布时间】:2021-11-16 12:51:40
【问题描述】:

我对 FPGA 和 Verilog 非常陌生。我一直在研究控制 Noritake Itron VFD 显示器的 Tri-SPI PHY。我想要实现的功能之一是 FPGA 本身的帧缓冲存储器。我正在使用具有 64kbit BRAM (8Kbytes) 的 iCE40LP1K。但是 Verilog BRAM Primitive 是 4kbit,我需要 3003 字节作为缓冲区。

问题是如何级联 BRAM?在数据表(请参阅 iCE40 LP/HX 系列数据表,第 2-6 页)中提到使用多个 BRAM。有没有办法可以使用多个 SB_RAM40_4K 实例?而后者则将其视为一个大型 mem 数组。

【问题讨论】:

    标签: verilog fpga lattice hdl ice40


    【解决方案1】:

    通常,您会使用 FPGA 制造商提供的一些工具。您有一些向导可以实例化您需要的 IP,这是很常见的(甚至可能是被允许的)。

    在这样的向导/编辑器/生成器中,您将选择所需的内存类型(单/双端口、宽度、深度等),该工具将生成将实例化所需硬件块的文件。该向导负责以最佳方式执行此操作,例如使用最小宽度和最大深度拼接 ram 块,以尽量减少多路复用器上浪费的元素数量。

    【讨论】:

    • 或者您编写的 Verilog 的行为类似于 RAM,并且合成器会自动确定深度等,因此您不必使用供应商锁定向导。
    • @BenVoigt 这也是,但是对于初学者来说是不是太早了?他需要遵循他还不太了解的规则,编译器可能不够确信推断出所需的硬件。
    • 我不相信初学者会在一个向导的帮助下做得更好,该向导会询问 20 个他从未听说过的有关 BRAM 功能的问题。
    • 完全忘记了我是开源的人,我坚持使用开源工具(我的工具链设置:Yosys nextpnr)。我想远离 IP 模块,它使我的代码不那么“开放”。我还看到人们使用逻辑单元作为 RAM,但它会很快用完(事件不足以从中制造 RAM)。无论如何,我可能会像上次使用几乎没有人使用它的 F1C100s ARM CPU 那样自学 xD。
    • 好吧,根据我的经验,推断的 RAM 内容并不总是按预期工作 - 它对我来说失败了好几次。另一方面,向导只是根据技术生成文件。如果一个人不想立即使用它,仍然可以从中学习。最后,最终的代码很可能与向导提供的解决方案非常相似。
    【解决方案2】:

    我能够按照我的意愿成功使用 BRAM。事实证明,我只是将寄存器声明为 8 位数组。并且只需确保该寄存器阵列有输入和输出。因为我需要 3004 字节,所以下面的代码就是我的工作方式:(注意:名称并不重要,Yosys 足够聪明,可以映射到 SB_RAM40_4k。您还可以更改数组大小和地址位宽)。

    module BRAM(
    input R_CLK,
    input W_CLK,
    
    input [7:0]BRAM_IN,
    output reg [7:0]BRAM_OUT,
    
    input [11:0] BRAM_ADDR_R,
    input [11:0] BRAM_ADDR_W,
    
    input B_CE_W,
    input B_CE_R);
    
    reg [7:0] mem [3003:0];
    
    always@(posedge R_CLK) begin// reading from RAM sync with system clock 
    if(!B_CE_R)
        BRAM_OUT <= mem[BRAM_ADDR_R];   
    end 
    
    always@(posedge W_CLK) begin// writing to RAM sync with Slave SPI clock.
    if(!B_CE_W)
        mem[BRAM_ADDR_W] <= BRAM_IN;
    end
    
    endmodule
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2019-07-28
      • 2018-09-25
      • 1970-01-01
      相关资源
      最近更新 更多