⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rs_enc.tdf

📁 CodeVisionAVR C Library Functions Reference CodeVisionAVR C 库函数介绍 译自CodeVisionAVR C Compiler Help
💻 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 + -