【接口开发】Altera FPGA(cyclone10) DDR接口使用的一些心得(Data width must be of power of two and between 8 and 409)

本文重点是怎么根据ddr去配置参数和配置avalon总线接口数据位宽,更深层的参数细节及使用细节可以参考intel官方例程:

Cyclone 10 GX - Intel DisplayPort 4Kp60 with Video and Image Processing Pipeline Retransmit Reference Designicon-default.png?t=N7T8https://www.intel.com/content/www/us/en/design-example/714774/cyclone-10-gx-intel-displayport-4kp60-with-video-and-image-processing-pipeline-retransmit-reference-design.html

Intel® Cyclone® 10 GX官方开发板

在使用Altera(intel) FPGA(cyclone10)官方硬件开发板《Intel® Cyclone® 10 GX FPGA
Development Kit》时会发现其共使用了3片DDR3 (IS43TR16256A-107MBLI),其中有40bitDQ连接到了FPGA,如下图。

因此有两个关键点

  • DDR3型号:IS43TR16256A-107MBLI
  • DQ位宽:40

生成DDR interface IP

IP

在quartus IP catalog 中选择external memory interfaces intel cyclone 10 fpga IP

利用presets快速设置参数

查看DDR3手册,确认ddr具体参数

选择库

  107M对应DDR3-1866M CL13,因此可选择

设置DQ为40bit

和官方使用一样的ddr,其他参数可以参考intel官方例程:

Cyclone 10 GX - Intel DisplayPort 4Kp60 with Video and Image Processing Pipeline Retransmit Reference Designicon-default.png?t=N7T8https://www.intel.com/content/www/us/en/design-example/714774/cyclone-10-gx-intel-displayport-4kp60-with-video-and-image-processing-pipeline-retransmit-reference-design.html

关于amm 部分avalon总线的数据位宽

使用上面的默认配置,avalon总线数据位宽为320.40bit*8。

对于 DDR3 UniPHY 控制器,Avalon数据总线的宽度取决于控制器Avalon-MM 接口设置的速率。选项为半速率或四分之一速率。半速率控制器的Avalon数据宽度是外部数据总线宽度的 4 倍。四分之一速率控制器的Avalon数据宽度是外部数据总线的 8 倍。

此时如果您还会使用platform qsys平台,可能会遇到下面的问题

Error: nios.emif_c10_0.ctrl_amm_0: Data width must be of power of two and between 8 and 4096  

这里总线位宽需要是2的幂次方,64 128 256 512,但上面的配置为320,因此会出错。

需要把ddr interface ip amm接口数据位宽改为256.

在Controller下勾选Enable error detection and correction logic with ecc

这里为什么会出现启用ecc后位宽就变化了,我也找到了一个官方解释,没有深入了解

Avalon数据总线如何通过 ECC 接口映射到用于 DDR3 的外部 DDR3 总线?

启用 ECC 后,DDR3 UniPHY 控制器将在外部数据总线上为 ECC 代码词添加额外的 8 位。此 ECC 代码词占用外部数据总线中最重要的 8 位代码词。

 

例如,如果您使用 ECC 生成了 64 位 DDR3 四分之一速率控制器,则Avalon 数据总线为 512 位宽,外部数据总线为 72 位宽(64 位数据 8 位 ECC 代码词)。每个Avalon写突发 1 将导致外部数据总线的突发长度 8 (BL8) 传输。Avalon数据总线映射到外部数据总线,如下所示:

 

外部数据 0 [71:0] = {ECC 代码词 0[7:0],Avalon数据[63:0]}

外部数据 1 [71:0] = {ECC 代码词 1[7:0],Avalon数据[127:64]

外部数据 2 [71:0] = {ECC 代码词 2[7:0],Avalon数据[191:128]

外部数据 3 [71:0] = {ECC 代码词 3[7:0],Avalon数据[255:192]

外部数据 4 [71:0] = {ECC 代码词 4[7:0],Avalon数据[319:256]

外部数据 5 [71:0] = {ECC 代码词 5[7:0],Avalon数据[383:320]

外部数据 6 [71:0] = {ECC 代码词 6[7:0],Avalon数据[447:384]

外部数据 7 [71:0] = {ECC 代码词 7[7:0],Avalon数据[511:448]

这里位宽没有一个直接的更改位置,起码我没有找到,如果您有方法请一定留言教我一下~谢谢

如果这篇文章帮到了您,烦请点个关注,后续会发布更多fpga相关文章。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙约架

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值