在使用Cyclone系列器件的過程中經常碰到綜合報告中Total memory bits使用率只有不到50%,但想要繼續使用多余ram時卻發現無法成功配置。那剩余的ram到什么地方去了呢?這要從Cyclone器件中ram的結構來說起,以下以Cyclone III代器件為例進行分析:
Altera公司提供的《Cyclone III Device Handbook》中有一章詳細介紹了CycloneIII中的Memory Blocks(詳見《Cyclone III Device Handbook》, Volume I,Section I,3)。Cyclone III中的ram塊是M9k,每一塊中包含8192個存儲位,加上校驗位共9216位,故稱M9k。每個ram塊可配置為表3-1中的各種模式。
現在來看一下當用作fifo時ram的兩種使用情況:
- 當fifo的寬度和深度符合表3-1中的各種配置時(fifo寬度和深度小於或等於表中的對應數值),每個fifo使用1個M9K塊即可,但如果沒有完全使用該塊中的ram時,該塊一般不可用做他用了。比如配置寬度為12位深度為512的fifo時實際使用的ram位為12*512=6144 ,故實際使用率為6144/8192=75%,當所有fifo都按照這種配置來分配時FPGA中的ram最大使用率也就是75%。一種特殊情況是當fifo容量較小而且讀寫時鍾分別相同時,QuartusII可能把幾個fifo使用同一個ram塊來實現。
- 當fifo寬度大於表3-1中所允許的最大寬度時Quartus會使用多個ram塊來實現,比如配置寬度為114位的fifo時,Quartus必須使用4個ram塊來實現這個fifo。當深度為25實際使用的ram位為114*25=2850 ,故實際使用率為2850/(8192*4)=8.7% ,相當多的ram位被綜合掉。
如何才能知道ram塊的使用情況呢,在QuartusII生成的報告中打開Fitter => Resource Section => Ram summay。其中詳細描述了每個ram塊的使用情況,可根據實際情況來對其進行優化。