URL
https://opencores.org/ocsvn/zipcpu/zipcpu/trunk
Subversion Repositories zipcpu
Compare Revisions
- This comparison shows the changes necessary to convert path
/zipcpu/trunk/bench/cpp
- from Rev 149 to Rev 154
- ↔ Reverse comparison
Rev 149 → Rev 154
/div_tb.cpp
74,36 → 74,41
} *str = '\0'; |
} |
|
void dbgdump(void) { |
char outstr[2048], *s; |
sprintf(outstr, "Tick %4ld %s%s%s%s%s%s%s %2d(%s= 0)", |
m_tickcount, |
(m_core->o_busy)?"B":" ", |
(m_core->v__DOT__r_busy)?"R":" ", |
(m_core->o_valid)?"V":" ", |
(m_core->i_wr)?"W":" ", |
(m_core->v__DOT__pre_sign)?"+":" ", |
(m_core->v__DOT__r_sign)?"-":" ", |
(m_core->v__DOT__r_z)?"Z":" ", |
m_core->v__DOT__r_bit, |
(m_core->v__DOT__last_bit)?"=":"!"); |
s = &outstr[strlen(outstr)]; |
sprintf(s, "%s\n%10s %40s",s, "Div",""); |
s = &s[strlen(s)]; |
bprint( s, 32, m_core->v__DOT__r_dividend); |
s=&s[strlen(s)]; |
sprintf(s, "%s\n%10s ",s, "Div"); s = &s[strlen(s)]; |
bprint( s, 64, m_core->v__DOT__r_divisor); |
s=&s[strlen(s)]; |
sprintf(s, "%s\n%10s %40s",s, "Q",""); s=&s[strlen(s)]; |
bprint( s, 32, m_core->o_quotient); s = &s[strlen(s)]; |
sprintf(s, "%s\n%10s %38s",s, "Diff",""); |
s=&s[strlen(s)]; |
bprint( s, 33, m_core->v__DOT__diff); s = &s[strlen(s)]; |
strcat(s, "\n"); |
puts(outstr); |
} |
|
void tick(void) { |
bool debug = false; |
|
if (debug) { |
char outstr[2048], *s; |
sprintf(outstr, "Tick %4ld %s%s%s%s%s%s %2d", |
m_tickcount, |
(m_core->o_busy)?"B":" ", |
(m_core->o_valid)?"V":" ", |
(m_core->i_wr)?"W":" ", |
(m_core->v__DOT__pre_sign)?"+":" ", |
(m_core->v__DOT__r_sign)?"-":" ", |
(m_core->v__DOT__r_z)?"Z":" ", |
m_core->v__DOT__r_bit); |
s = &outstr[strlen(outstr)]; |
sprintf(s, "%s\n%10s %40s",s, "Div",""); |
s = &s[strlen(s)]; |
bprint( s, 32, m_core->v__DOT__r_dividend); |
s=&s[strlen(s)]; |
sprintf(s, "%s\n%10s ",s, "Div"); s = &s[strlen(s)]; |
bprint( s, 64, m_core->v__DOT__r_divisor); |
s=&s[strlen(s)]; |
sprintf(s, "%s\n%10s %40s",s, "Q",""); s=&s[strlen(s)]; |
bprint( s, 32, m_core->o_quotient); s = &s[strlen(s)]; |
sprintf(s, "%s\n%10s %38s",s, "Diff",""); |
s=&s[strlen(s)]; |
bprint( s, 33, m_core->v__DOT__diff); s = &s[strlen(s)]; |
strcat(s, "\n"); |
puts(outstr); |
} |
if (debug) |
dbgdump(); |
TESTB<Vdiv>::tick(); |
} |
|
126,12 → 131,22
m_core->i_numerator = 0; |
m_core->i_denominator = 0; |
|
// Make certain busy is immediately true upon the first clock |
// after we issue the divide. |
assert(m_core->o_busy); |
assert(m_core->o_valid == 0); |
|
// while((!m_core->o_valid)&&(!m_core->o_err)) |
while(!m_core->o_valid) |
while(!m_core->o_valid) { |
if (!m_core->o_busy) { |
// Make certain busy is asserted whenever |
// valid is false and we're ... well, busy |
dbgdump(); |
assert(m_core->o_busy); |
} |
tick(); |
} if (dbg) dbgdump(); |
assert(!m_core->o_busy); |
|
if (dbg) { |
printf("%s%s: %d / %d =? %d\n", |
169,8 → 184,10
assert(m_core->o_busy); |
assert(m_core->o_valid == 0); |
|
while(!m_core->o_valid) |
while(!m_core->o_valid) { |
assert(m_core->o_busy); |
tick(); |
} assert(!m_core->o_busy); |
|
if (dbg) { |
printf("%s%s: %u / %u =? %d (Expecting %u)\n", |