有沒有平常被一堆的判斷式搞到昏頭轉象呢,在Verilog coding 時又要考慮到在 always block 內部的判斷是否會有 latch 產生,最後在codelink時候又擔心coverage不足夠呢... 其實簡單的想把判斷是全部展開成個encoder table,內部存著Hash key->vale 就ok 拉.不僅可以發現是否有判斷條件少了,且增加閱讀的效率...
original part
if( in_a ==1 ){
out = in+1;
} else {
if( in_b == 0 ){
out = in-1;
} else {
if( in_c == 1) {
out = in*2;
}else {
out = in;
}
}
}
encoder part
//range 0 ~ 7
s = in_c << 2 | in_b << 1 | in_a;
switch(s){
case 0 : out = in-1; break; // in_c(0), in_b(0), in_a(0)
case 1 : out = in+1; break; // in_c(0), in_b(0), in_a(1)
case 2 : out = in; break; // in_c(0), in_b(1), in_a(0)
case 3 : out = in+1; break; // in_c(0), in_b(1), in_a(1)
case 4 : out = in-1; break; // in_c(1), in_b(0), in_a(0)
case 5 : out = in+1; break; // in_c(1), in_b(0), in_a(1)
case 6 : out = in*2; break; // in_c(1), in_b(1), in_a(0)
case 7 : out = in+1; break; // in_c(1), in_b(1), in_a(1)
}
沒有留言:
張貼留言