📄 rs_enc.tdf
字号:
-------------------------------------------------------------------------
-------------------------------------------------------------------------
--
-- Revision Control Information
--
-- $Workfile: RS_enc.tdf $
-- $Archive: P:/RS/units/Encoder/ahdl/RS_enc.tdv $
--
-- $Revision: 1.3 $
-- $Date: 08 Nov 1999 09:59:32 $
-- $Author : Alejandro Diaz-Manero
--
-- Project : RS
--
-- Description :
--
-- Copyright 1999 (c) Altera Corporation
-- All rights reserved
--
-------------------------------------------------------------------------
-------------------------------------------------------------------------
FUNCTION lpm_counter (data[LPM_WIDTH-1..0], clock, clk_en, cnt_en, updown, aclr,
aset, aconst, aload, sclr, sset, sconst, sload)
RETURNS (q[LPM_WIDTH-1..0], eq[15..0]);
FUNCTION gfmul (a[m..1], b[m..1]) returns (c[m..1]);
PARAMETERS
(
n = 255, -- length of message
m = 8, -- field size (2^m)
irrpol = 285, -- field polynomial
check = 40, -- number of check symbols
genstart = 0, -- not used
gg0 = 1, gg1 = 210, gg2 = 248, gg3 = 240, gg4 = 209, gg5 = 173, gg6 = 67, gg7 = 133, gg8 = 167,
gg9 = 133, gg10 = 209, gg11 = 131, gg12 = 186, gg13 = 99, gg14 = 93, gg15 = 235, gg16 = 52,
gg17 = 40, gg18 = 6, gg19 = 220, gg20 = 241, gg21 = 72, gg22 = 13, gg23 = 215, gg24 = 128,
gg25 = 255, gg26 = 156, gg27 = 49, gg28 = 62, gg29 = 254, gg30 = 212, gg31 = 35, gg32 = 99,
gg33 = 51, gg34 = 218, gg35 = 101, gg36 = 180, gg37 = 247, gg38 = 40, gg39 = 156, gg40 = 38,
gg41 = 45, gg42 = 99, gg43 = 51, gg44 = 218, gg45 = 101, gg46 = 180, gg47 = 247, gg48 = 40,
gg49 = 156, gg50 = 38
);
-- system parameters
-- n (length of code)
-- m (GF size (2^m)
-- irrpol (field polynomial)
-- check (number of check symbols (= # of syndromes))
-- gg0 (1), gg1 - ggcheck (generator polynomial terms)
subdesign RS_Enc
(
sysclk, rsin[m..1], reset, enable, start : INPUT;
rsout[m..1] : OUTPUT;
)
VARIABLE
point[m..1] : node;
reg[check..1][m..1], outff[m..1] : dffe;
mul[(check-1)..1][m..1] : node;
vals[check..1][m..1] : node;
startadd[m..1], addzero[m..1], shift, ce_counter : node;
count : lpm_counter WITH (LPM_WIDTH = m, LPM_DIRECTION = "DOWN");
BEGIN
ASSERT
REPORT "Compiling ALTERA's Reed-Solomon Encoder MegaCore Function"
SEVERITY INFO;
ce_counter = shift & enable & !start;
startadd[] = n-check;
count.data[] = startadd[];
count.clock = sysclk;
count.cnt_en = ce_counter;
count.sload = start;
count.aclr = reset;
addzero[1] = count.q[0];
FOR k IN 2 TO m GENERATE
addzero[k] = addzero[k-1] # count.q[k-1];
END GENERATE;
shift = addzero[m];
vals[1][] = gg1;
vals[2][] = gg2;
vals[3][] = gg3;
IF (check >= 4) GENERATE
vals[4][] = gg4;
END GENERATE;
IF (check >= 5) GENERATE
vals[5][] = gg5;
END GENERATE;
IF (check >= 6) GENERATE
vals[6][] = gg6;
END GENERATE;
IF (check >= 7) GENERATE
vals[7][] = gg7;
END GENERATE;
IF (check >= 8) GENERATE
vals[8][] = gg8;
END GENERATE;
IF (check >= 9) GENERATE
vals[9][] = gg9;
END GENERATE;
IF (check >= 10) GENERATE
vals[10][] = gg10;
END GENERATE;
IF (check >= 11) GENERATE
vals[11][] = gg11;
END GENERATE;
IF (check >= 12) GENERATE
vals[12][] = gg12;
END GENERATE;
IF (check >= 13) GENERATE
vals[13][] = gg13;
END GENERATE;
IF (check >= 14) GENERATE
vals[14][] = gg14;
END GENERATE;
IF (check >= 15) GENERATE
vals[15][] = gg15;
END GENERATE;
IF (check >= 16) GENERATE
vals[16][] = gg16;
END GENERATE;
IF (check >= 17) GENERATE
vals[17][] = gg17;
END GENERATE;
IF (check >= 18) GENERATE
vals[18][] = gg18;
END GENERATE;
IF (check >= 19) GENERATE
vals[19][] = gg19;
END GENERATE;
IF (check >= 20) GENERATE
vals[20][] = gg20;
END GENERATE;
IF (check >= 21) GENERATE
vals[21][] = gg21;
END GENERATE;
IF (check >= 22) GENERATE
vals[22][] = gg22;
END GENERATE;
IF (check >= 23) GENERATE
vals[23][] = gg23;
END GENERATE;
IF (check >= 24) GENERATE
vals[24][] = gg24;
END GENERATE;
IF (check >= 25) GENERATE
vals[25][] = gg25;
END GENERATE;
IF (check >= 26) GENERATE
vals[26][] = gg26;
END GENERATE;
IF (check >= 27) GENERATE
vals[27][] = gg27;
END GENERATE;
IF (check >= 28) GENERATE
vals[28][] = gg28;
END GENERATE;
IF (check >= 29) GENERATE
vals[29][] = gg29;
END GENERATE;
IF (check >= 30) GENERATE
vals[30][] = gg30;
END GENERATE;
IF (check >= 31) GENERATE
vals[31][] = gg31;
END GENERATE;
IF (check >= 32) GENERATE
vals[32][] = gg32;
END GENERATE;
IF (check >= 33) GENERATE
vals[33][] = gg33;
END GENERATE;
IF (check >= 34) GENERATE
vals[34][] = gg34;
END GENERATE;
IF (check >= 35) GENERATE
vals[35][] = gg35;
END GENERATE;
IF (check >= 36) GENERATE
vals[36][] = gg36;
END GENERATE;
IF (check >= 37) GENERATE
vals[37][] = gg37;
END GENERATE;
IF (check >= 38) GENERATE
vals[38][] = gg38;
END GENERATE;
IF (check >= 39) GENERATE
vals[39][] = gg39;
END GENERATE;
IF (check >= 40) GENERATE
vals[40][] = gg40;
END GENERATE;
IF (check >= 41) GENERATE
vals[41][] = gg41;
END GENERATE;
IF (check >= 42) GENERATE
vals[42][] = gg42;
END GENERATE;
IF (check >= 43) GENERATE
vals[43][] = gg43;
END GENERATE;
IF (check >= 44) GENERATE
vals[44][] = gg44;
END GENERATE;
IF (check >= 45) GENERATE
vals[45][] = gg45;
END GENERATE;
IF (check >= 46) GENERATE
vals[46][] = gg46;
END GENERATE;
IF (check >= 47) GENERATE
vals[47][] = gg47;
END GENERATE;
IF (check >= 48) GENERATE
vals[48][] = gg48;
END GENERATE;
IF (check >= 49) GENERATE
vals[49][] = gg49;
END GENERATE;
IF (check >= 50) GENERATE
vals[50][] = gg50;
END GENERATE;
point[] = (rsin[] & shift) $ (reg[1][] & shift);
reg[][].clk = sysclk;
reg[][].clrn = !reset;
reg[][].ena = enable;
FOR k IN 1 TO (check-1) GENERATE
mul[k][] = gfmul ( point[], vals[k][] )
WITH ( m = m, irrpol = irrpol );
reg[k][] = ( reg[k+1][] $ mul[k][] );
END GENERATE;
reg[check][] = gfmul ( point[], vals[check][] )
WITH (m = m, irrpol = irrpol);
outff[] = (reg[1][] & !shift) # (rsin[] & shift);
outff[].clk = sysclk;
outff[].clrn = !reset;
outff[].ena = enable;
rsout[] = outff[];
END;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -