@@ -53,23 +53,24 @@ void ParallelChipInfo::chipInfoToStmParams(StmParams *stmParams)
53
53
clrSetupTime;
54
54
const double tHCLK = 13.88 ; /* 1 / 72MHz */
55
55
const double tsuD_NOE = 25 ;
56
- std::array<uint32_t , 5 > setupArr = { params[CHIP_PARAM_T_CH ],
56
+ std::array<uint32_t , 5 > setupArr = { params[CHIP_PARAM_T_CS ],
57
57
params[CHIP_PARAM_T_CLS], params[CHIP_PARAM_T_ALS],
58
58
params[CHIP_PARAM_T_CLR], params[CHIP_PARAM_T_AR] };
59
- std::array<uint32_t , 3 > hiZArr = { params[CHIP_PARAM_T_CH ],
59
+ std::array<uint32_t , 3 > hiZArr = { params[CHIP_PARAM_T_CS ],
60
60
params[CHIP_PARAM_T_ALS], params[CHIP_PARAM_T_CLS] };
61
61
std::array<uint32_t , 3 > holdArr = { params[CHIP_PARAM_T_CH],
62
62
params[CHIP_PARAM_T_CLH], params[CHIP_PARAM_T_ALH] };
63
63
64
- /* (SET + 1) * tHCLK >= max(tCH , tCLS, tALS, tCLR, tAR) - tWP */
64
+ /* (SET + 1) * tHCLK >= max(tCS , tCLS, tALS, tCLR, tAR) - tWP */
65
65
setupTime = *std::max_element (setupArr.begin (), setupArr.end ()) -
66
66
params[CHIP_PARAM_T_WP];
67
67
setupTime = setupTime / tHCLK - 1 ;
68
- setupTime = setupTime <= 0 ? 0 : ceil (setupTime);
68
+ /* K9F2G08U0C requires at least 1 tick */
69
+ setupTime = setupTime <= 0 ? 1 : ceil (setupTime);
69
70
stmParams->setupTime = static_cast <uint8_t >(setupTime);
70
71
71
72
/* (WAIT + 1) * tHCLK >= max(tWP, tRP) */
72
- waitSetupTime = std::max (params[CHIP_PARAM_T_WP], params[CHIP_PARAM_T_WP ]);
73
+ waitSetupTime = std::max (params[CHIP_PARAM_T_WP], params[CHIP_PARAM_T_RP ]);
73
74
waitSetupTime = waitSetupTime / tHCLK - 1 ;
74
75
waitSetupTime = waitSetupTime <= 0 ? 0 : ceil (waitSetupTime);
75
76
stmParams->waitSetupTime = static_cast <uint8_t >(waitSetupTime);
@@ -90,8 +91,8 @@ void ParallelChipInfo::chipInfoToStmParams(StmParams *stmParams)
90
91
/* (HOLD + 1) * tHCLK >= max(tCH, tCLH, tALH) */
91
92
holdSetupTime =*std::max_element (holdArr.begin (), holdArr.end ());
92
93
holdSetupTime = holdSetupTime / tHCLK - 1 ;
93
- /* K9F2G08U0C requires at least 1 tick */
94
- holdSetupTime = holdSetupTime <= 0 ? 1 : ceil (holdSetupTime);
94
+ /* K9F2G08U0C requires at least 2 tick */
95
+ holdSetupTime = holdSetupTime <= 0 ? 2 : ceil (holdSetupTime);
95
96
stmParams->holdSetupTime = static_cast <uint8_t >(holdSetupTime);
96
97
97
98
/* ((WAIT + 1) + (HOLD + 1) + (SET + 1)) * tHCLK >= max(tWC, tRC) */
@@ -102,12 +103,17 @@ void ParallelChipInfo::chipInfoToStmParams(StmParams *stmParams)
102
103
stmParams->setupTime ++;
103
104
}
104
105
105
- /* Not clear how to calculate, use the same approach as above */
106
- arSetupTime = params[CHIP_PARAM_T_AR] / tHCLK - 1 ;
106
+ /* RM0008 Reference manual
107
+ In any case, it turns out 0 */
108
+ /* t_ar = (TAR + SET + 4) × THCLK
109
+ t_ar / THCLK - 4 - SET = TAR */
110
+ arSetupTime = params[CHIP_PARAM_T_AR] / tHCLK - 4 - stmParams->setupTime ;
107
111
arSetupTime = arSetupTime <= 0 ? 0 : ceil (arSetupTime);
108
112
stmParams->arSetupTime = static_cast <uint8_t >(arSetupTime);
109
113
110
- clrSetupTime = params[CHIP_PARAM_T_CLR] / tHCLK - 1 ;
114
+ /* t_clr = (TCLR + SET + 4) × THCLK
115
+ t_clr / THCLK - 4 - SET = TCLR */
116
+ clrSetupTime = params[CHIP_PARAM_T_CLR] / tHCLK - 4 - stmParams->setupTime ;
111
117
clrSetupTime = clrSetupTime <= 0 ? 0 : ceil (clrSetupTime);
112
118
stmParams->clrSetupTime = static_cast <uint8_t >(clrSetupTime);
113
119
}
0 commit comments