組み込まれたエンジニア

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

NSL:整数乗算回路(単一クロック版)

2009-12-30 02:07:51 | Weblog
整数変数とvariableによる構造展開の例題として、もう一つ、乗算回路を示します。
これは、大きなビット数の乗算において、実用に使うには向かないですが、ビット数が少ない時には、十分使えますし、記述はシンプルな筆算形なので、分かりやすいと思います。
#define N 8
#define M 4

// Copyright (c) IP ARCH, Inc. Naohiko Shimizu
// All rights reserved.
declare multiply_%N%_%M% {

input A[N], B[M];
output F[N+M];

func_in mult_do(A,B);
}

module multiply_%N%_%M% {

integer i;
variable pp[N+M], pa[N+M];

func mult_do {
	pa={M{0b0},A};
	pp=0;
	generate(i=0;i<M;i++) pp = if(B[i]) pp+(pa << i) else pp;