アダルト・ヴァイオリン May the force be with you..

2009年12月24日

NSL:整数除算回路

Filed under: Weblog — い~ぐる @ 7:32 AM

メリークリスマス!

ということで、クリスマスバージョンのsfl2vlとともに、NSLによる除算回路のサンプルをお届けします。
Nは割られる数のビット数、Mは割る数のビット数を定義し、出力は、N-Mビットになります。

見れば見るほど平方根回路にそっくり、というか、平方根回路を少し変更しただけで作成しました。。この回路は乗算のコストが安いFPGA向けです。ASICで使う場合には、通常の引き戻し法か引き離し法などを使ってください。

#define N 8
#define M 4
declare div_%N%_%M% {
input A[N],B[M];
output F[N-M];
func_in div_do(A,B);
func_out div_done(F);
}
module div_%N%_%M% {
reg try[N-M];
wire mul_i1[N-M], mul_i2[M], mul_o[N];
func_self mul(mul_i1,mul_i2);
function mul {
mul_o = mul_i1*mul_i2;
}
function div_do seq {
reg bitpos[N-M];
for( {bitpos:=1 << ((N-M)-1); try:=0; } ; bitpos != 0 ; bitpos := bitpos >> 1) {
if(mul(try | bitpos,B).mul_o <= A) try := try | bitpos;
} div_done(try); } }

Powered by WordPress