libero ProASIC3 A3P250 RAM Dual Port 真双端口

 

DS0097: ProASIC3 Flash Family FPGAs Datasheet

 

AC374: Simultaneous Read-Write Operations in Dual-Port SRAM for Flash-Based cSoCs and FPGAs App Note

 

该文档  213 页 , 详细 描述 了  Dual Port RAM 相关参数

SmartGen Cores Reference Guide

 

 ProASIC3 包含的  RAM 资源数量:

image

 描述:

image

 

IP调用方式:Libero 11.8  →  catalog → Memory & Controllers → RAM-Dual Port

 

image

 

 

image

 

image

 

豆包:这是FPGA 开发工具中双端口 RAM 的 IP 配置界面,用于定制双端口 RAM 的参数、接口与工作模式,下面分模块解释各部分功能:

 

1. 优化目标(Optimize for)

 
  • 可选 High Speed(当前选中) 或 Low Power:
     
    这里选择 “高速模式”,意味着 RAM 的硬件实现会优先保证读写速度,而非功耗优化。
 

2. 端口配置(Port A & Port B)

 
双端口 RAM 的两个端口共享同一存储体,此处 Port A 和 Port B 配置完全一致:
 
  • Depth(深度):均设为512,表示 RAM 的存储单元数量为 512 个;
  • Width(位宽):均设为8,表示每个存储单元的位数为 8 位;
     
    → 整个 RAM 的总容量为 512×8 = 4096bit = 512字节
  • Single clock(单时钟):已勾选,且时钟选择为CLKAB,说明 Port A 和 Port B 共用同一个时钟信号(双端口同步工作);若取消勾选,则两个端口可使用独立时钟(异步双端口)。
 

3. 内部信号与工作模式(右侧模块区)

 
对应 Port A/Port B 的接口信号与功能选项:
 
  • 信号位宽匹配:
    • DINA/DINB(写数据):位宽[7:0],对应 Port 的 Width=8;
    • ADDRA/ADDRB(地址):位宽[8:0],因为2^9=512,刚好覆盖 Depth=512 的地址范围;
    • DOUTA/DOUTB(读数据):位宽[7:0],与写数据位宽一致。
     
  • Pipeline(流水线):已勾选,说明 RAM 的读操作采用流水线模式(读输出会有 1 个时钟周期的延迟,用于提升工作频率)。
  • DOUT on Write(写操作时的读输出):
     
    重点:选中Previous DOUT,表示 “写操作时,读输出保持之前的值”;若选DIN则写操作时读输出会直接显示当前写入的数据(即 “写直通” 模式)。
 

4. 全局与仿真配置

 
  • RESET:已勾选,说明该 RAM 支持复位功能,可通过复位信号初始化 RAM 状态。
  • 仿真初始化:Initialize RAM for simulation未勾选,若勾选可通过Customize RAM Content for Simulation...按钮设置仿真时的 RAM 初始数据。

 

问题一:→O 代表什么意思?  取反器?  鼠标 放在 圆圈后面的 上下箭头上会显示“ Change the polarity of the port”

image

 猜测是 带 O 表示  低电平有效, 需要验证 !在 AC374 文档中有一句   Active low block enables for each port, 验证了  带O 表示 低电平有效!!!

问题二: DOUT on Wirte 字面意思 写操作时输出,可选择有两种方式?答案 在上面, 橙色开头

问题三: BLKA 是什么意思? 应该是选择 A端口 是否使能!

问题四: RWA, 低电平 写使能, 高电平 读取。

 

在 AC374 文档中Active low block enables for each port , 低电平 使能对应端口!

 

image

 

写操作时序:DS0097

image

 

 读操作时序( Previous DOUT ):DS0097  

  重点:  读取 时  数据输出要 ‘延迟2个’ clk 周期! 看图是延迟一个时钟周期,实际测试 要延迟2个时钟周期!

 

image

 

 

按照时序  用 RAM 做缓存,  实现串口数据 回环 , 结果 最后 一个数据 ,跑到 第一个 去了, 不知道  是 写 的有问题 ,还是读取的 有问题?

[11:37:26.692]发→◇EC 91 00 02 00 01
[11:37:26.694]收←◆01 EC 91 00 02 00

 

问题解决 :  读使能,地址给出后,要延迟 两个 时钟周期, 数据才正确!

 

[11:50:13.075]发→◇EC 91 00 02 00 01 □
[11:50:13.079]收←◆EC 91 00 02 00 01

结论 :  读写  RAM  过程 都需要 三个主时钟周期;  2026年1月12日 17点18分

 

2026年1月22日 11点17分  后面发现 ,这里 不稳定 是由于 40Mhz 时钟驱动来自 引脚, 驱动能力不足, 需要 使用 PLL 输出的 时钟 问题解决

libero ProASIC3 A3P250 CCC PLL 时钟配置 - 所长 - 博客园

posted on 2026-01-08 18:06  所长  阅读(25)  评论(0)    收藏  举报

导航