組み込まれたエンジニア

我輩は石である。名前はまだ無い。

NSL:引き戻し法による除算回路

2009-12-27 00:17:43 | Weblog
除算をするのに、乗算器を使うというのもあんまりなんで、減算器を用いた、引き戻し法による除算回路を作ってみました。
マクロによるパラメタライズはあまりデバッグしていないので、異なるビット数だとバグがあるかもしれませんが、そのときはご容赦。

動作には、sfl2vlのベータ版(20091226版)で加えた修正が必要(かもしれない)。

// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.

#define N 8
#define M 4

declare divu_%N%_%M% {
input A[N],B[M];
output Q[N],R[M];
func_in divu_do(A,B);
func_out divu_done(Q,R);
func_out divu_error;
}

module divu_%N%_%M% {
reg QB[M], QQ[N+M];
wire sub_i1[N+1], sub_i2[N], minus;
func_self sub(sub_i1,sub_i2);

func sub {
 wire sub_o[N+1];
  sub_o = {sub_i1} - {0b0,sub_i2};
  minus=sub_o[N];
}

func divu_do 
	if(B==M'b0) divu_error();
	else seq {
	reg bitcount[M];
	for( {bitcount:=0; QB:=B; QQ:={M'b0,A};} ;
              bitcount <N ; bitcount++) { 
		}
		else {
		 QQ := {(sub_o << 1)[N:N-M],(QQ[N-2:0]<<1)} |
(N+M)'b1; } } } divu_done(QQ[N-1:0],QQ[(N+M-1):N]); } }

最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。