📄 gfmul.tdf
字号:
-------------------------------------------------------------------------
-------------------------------------------------------------------------
--
-- Revision Control Information
--
-- $Workfile: GFMUL.TDF $
-- $Archive: P:/RS_eras/units/Common_units/ahdl/GFMUL.TDv $
--
-- $Revision: 1.1 $
-- $Date: 14 Jul 1999 10:33:54 $
-- $Author : Alejandro Diaz-Manero
--
-- Project : RS_eras
--
-- Description :
--
-- Copyright 1999 (c) Altera Corporation
-- All rights reserved
--
-------------------------------------------------------------------------
-------------------------------------------------------------------------
PARAMETERS
(
m = 8, -- GF(2^m), minimum m = 3
irrpol = 391 -- irreducible polynomial
);
subdesign gfmul
(
a[m..1], b[m..1] : INPUT;
c[m..1] : OUTPUT;
)
VARIABLE
expand[m..2][(2*m-1)..1] : node;
total[m..1][(2*m-1)..1] : node;
irp[(m+1)..1] : node;
reduce[(m-1)..1][(2*m-1)..1] : node;
extra[(m-1)..1][(m+1)..1] : node;
left[(m-1)..1] : node;
BEGIN
irp[] = irrpol;
left[] = 0;
total[1][(2*m-1)..1] = (left[], (a[] & b[1]));
FOR k IN 2 TO m GENERATE
IF (k<m) GENERATE
FOR j IN (k+m) TO (2*m-1) GENERATE
expand[k][j] = GND;
END GENERATE;
END GENERATE;
FOR j IN 1 TO (k-1) GENERATE
expand[k][j] = GND;
END GENERATE;
expand[k][(k+m-1)..k] = (a[] & b[k]);
FOR j IN 1 TO (2*m-1) GENERATE
total[k][j] = expand[k][j] $ total[k-1][j];
END GENERATE;
END GENERATE;
FOR k IN 1 TO (m-1) GENERATE
IF (k == 1) GENERATE
extra[k][] = irp[] & total[m][2*m-k];
ELSE GENERATE
extra[k][] = irp[] & reduce[k-1][2*m-k];
END GENERATE;
IF (k<(m-1) & k!=1) GENERATE
FOR j IN 1 TO ((m-1)-k) GENERATE
reduce[k][j] = reduce[k-1][j];
END GENERATE;
END GENERATE;
IF (k == 1) GENERATE
FOR j IN 1 TO (m-2) GENERATE
reduce[1][j] = total[m][j];
END GENERATE;
END GENERATE;
IF (k>1) GENERATE
FOR j IN (m-k) TO (2*m-k) GENERATE
reduce[k][j] = extra[k][j-(m-1)+k] $ reduce[k-1][j];
END GENERATE;
ELSE GENERATE
FOR j IN (m-1) TO (2*m-1) GENERATE
reduce[k][j] = total[m][j] $ extra[1][j-(m-2)];
END GENERATE;
END GENERATE;
-- make unused reduce nodes disappear by ANDing with 0
IF (k>1) GENERATE
reduce[k][2*m-k] = GND & reduce[k-1][2*m-1];
FOR j IN (2*m-k+1) TO 2*m-1 GENERATE
reduce[k][j] = GND & reduce[k][j-1];
END GENERATE;
END GENERATE;
END GENERATE;
c[m..2] = reduce[m-1][m..2];
c[1] = reduce[m-1][1] # reduce[m-1][2*m-1]; -- last term is disappeared reduce nodes
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -