Chip123 科技應用創新平台
標題:
記憶體如何驗證
[打印本頁]
作者:
kyopc
時間:
2008-5-1 05:17 PM
標題:
記憶體如何驗證
各位前輩大家好:
; T/ q# q# ~: t. o8 w
小弟最近在做的project有很大量的記憶體存取
) Y% H- L1 T; Z6 d' \
但在做的過程中曾想過,
7 l4 ]3 k2 h. g+ E2 r3 s6 p' ~
' r3 M; T' q( u7 I. e3 @* X
在使用modelsim 看過控制訊號正確後
" g6 l5 ^ Y' q5 p% Z1 m
"如何驗證自己寫的memory controller有資料真的寫入或讀出"
4 a% l3 e* P0 ~0 _7 i0 P4 [
7 f, M6 S. k2 `% E1 w& Z' m# I
因為在模擬的時候data line都不可能真的有資料進出,頂多看adress輸出跟控制訊號的關係而已
$ M6 b9 y- W0 I% Y3 F8 D
而我之前的做法還蠻爛的,就是先寫固定的資料進去,再讀取出來
% M5 D" D8 \: n, O8 Y( h
然後在內部寫比較器去比對,如果讀回來的跟寫入的資料一樣則讓LED亮某個燈
; { n, o# k1 x6 I0 }/ i- x( C
想想這好像不是很好的方法
5 k: D; t9 O) X) C* }
想請問各位在做memory controller的驗證時有沒有什麼更好的方法呢 ?
- e$ M# M9 y: ]; r
p.s1 : 還是小弟使用軟體模擬的方向錯了?
6 P d; ]5 C- S: F# o
p.s2 : 我有一台簡單的LA , 可是飛機夾對memory的pin腳來說太粗了,很難夾,有前輩有什麼好方法可以讓我量到真實訊號呢???
) O7 u2 E: }, R% O3 u
; m" f" t+ i; u1 y% H- ^3 M; o
以上是我的問題,如果之前有人問過請版主告知,小弟會刪掉的
作者:
kevin
時間:
2008-5-2 11:11 AM
對memory controller做驗證,要做到完整不容易,跟你要驗證的memory type有關,要做到每一家的memory都適用,更須了解各種memory的規格.
& G" s5 _7 u- {$ c7 p: P8 o& U2 e
基本上要有software interface (c/c++ program)到memory controller,還要建立各家memory model,然後先驗證memory controller 的control and status register 的reset values,再改變control and status register 值看是否正確,都正確後,再去做各種memory model的 read/write.
作者:
tommywgt
時間:
2008-5-18 01:39 AM
聽起來是你的ram是外掛的
3 E. w! f$ R" E5 Q/ d; |
. c! X B+ U6 ], \% X& v7 Z+ P
針對你用LA去來信號這個問題而言, 你可以考慮利用FPGA內建LA去捉信號來看
作者:
m851055
時間:
2008-5-18 05:43 AM
針對量測的問題給你意見,探棒可以用轉接成小的或是將要量測點作拉線之處理。
作者:
walltsou
時間:
2008-5-18 03:54 PM
之前我在寫SDRAM控制器,因為容量達8MB時也遇到相同問題。要一個一個寫入再讀回送到PC去做驗證,花的時間很長。另一個問題是要放那一種資料。
; p! C; s) G/ ^5 j/ k; Z
後來試了幾個方法:
- V* @# g' b: z6 M% _3 ~& K6 `0 M
1.放在Address相同的資料binary code。驗證是很簡單,可是覺得資料太規律,可能會有沒考量到的,像high byte data大多為零,驗不到。
& @1 C9 j( x7 A% u- L2 \- q: H0 S
2.利用固定加入數值的counter做為資料,每次加入像97等質數,這樣就可以驗到high byte data。而且Address和data之間有數學關係,也很容易驗。
3 k! s P \- K: u
3.使用CRC(或Linear Feedback Shift Register)產生數列方法來驗,數值近似亂數,效果最好。
作者:
yhchang
時間:
2008-5-18 06:05 PM
樓主的方法雖然不好 但卻是大部分 DRAM IC廠做 Function Check使用的方法
! s2 H2 b8 t/ _( V( c
對自己準備要寫的資料 做一番精心的設計 0101 1010 0001 1110 .....etc
O6 E% r1 c# O; T7 Q% C
在同一套PATTERN 對Memory Controller 下不同的指令
( f( f, O6 n0 A0 B# u7 @4 W1 }
比如 Burst Length =1,2,4,8 Cas Latency= 1,2,3
1 }0 v, d* f( E/ W, j* K
Data type是 sequential 還是 Interleave ....等
9 W- o4 A. [- N. j) }/ A; X) u
6 U; u4 j/ q1 `1 p7 p4 H$ f" D
每種MODE 都做一次 Write + Read 看看是否 一樣?
) ?; B7 k( F* }$ Y# C- n4 X4 b
有些則是 你寫進去的DATA 會被 Mask掉 或是被 Trucate掉 所以你讀出來的資料不會與寫的一樣
1 V E9 [) q1 X0 V
反正各種PATTERN的設計 都是希望在 輸出端 看到想要的 WAVEFORM 但不見得要跟寫進去的一樣
% e. P8 u$ b/ V/ P
當你把 CHIP全部類型的指令組合 都下過一次
1 Q* y3 j7 R! M. E) }$ Q
都沒有問題 基本上FUNCTION就沒問題了
8 p" v& a8 {0 ~8 E) @! J
剩下的就是 Timing Spec能否調進去的問題.
歡迎光臨 Chip123 科技應用創新平台 (http://chip123.com/)
Powered by Discuz! X3.2