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

📄 rs_eras_dsc.tdf

📁 CodeVisionAVR C Library Functions Reference CodeVisionAVR C 库函数介绍 译自CodeVisionAVR C Compiler Help
💻 TDF
字号:
-------------------------------------------------------------------------
-------------------------------------------------------------------------
--
-- Revision Control Information
--
-- $Workfile:   rs_eras_dsc.tdf  $
-- $Archive:   P:/RS_eras/units/Dec_dsc/ahdl/rs_eras_dsc.tdv  $
--
-- $Revision:   1.5  $
-- $Date:   01 Sep 1999 15:52:22  $
-- $Author			:  Alejandro Diaz-Manero
--
-- Project      :  RS_eras
--
-- Description	:  Top level entity for discrete RS decoder supporting
--                 erasures.
--
-- Copyright 1999 (c) Altera Corporation
-- All rights reserved
--
-------------------------------------------------------------------------
-------------------------------------------------------------------------

FUNCTION chn_eras_dsc (sysclk, reset, go, bd[check..1][m..1], omega[check..1][m..1])
	RETURNS (errloc[check..1][size..1], errvec[check..1][m..1], numroots[m..1], gofinal);

FUNCTION bms_eras_dsc_full (sysclk, reset, go, syn[check..1][m..1],
                            num_eras[wide..1], eras_pos[check..1][m..1])
	RETURNS (bdout[check..1][m..1], omegaout[check..1][m..1], numerr[wide..1], done);

FUNCTION bms_eras_dsc_half (sysclk, reset, go, syn[check..1][m..1],
                            num_eras[wide..1], eras_pos[check..1][m..1])
	RETURNS (bdout[check..1][m..1], omegaout[check..1][m..1], numerr[wide..1], done);

FUNCTION syn_eras_dsc (sysclk, reset, rsin[m..1], dsin, dsout, eras_ind, bypass, gofinal, 
			  	   errvec[check..1][m..1], errloc[check..1][size..1])
	RETURNS (rdyin, outvalid, syn[check..1][m..1], eras_roots[check..1][m..1], 
	         num_eras[wide..1], startmass, rsout[m..1]);

FUNCTION lpm_compare (dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], clock, aclr)
   RETURNS (alb, aeb, agb, ageb, aneb, aleb);


PARAMETERS
(
n = 15, -- length of message
m = 4, -- field size (2^m)
irrpol = 19, -- field polynomial
check = 4, -- number of check symbols
genstart = 2, -- first root of generator polynomial
speed = "full",
wide = 3,
root1 = 1, root2 = 2, root3 = 4, root4 = 8, root5 = 1, root6 = 3, root7 = 6, root8 = 12,
root9 = 15, root10 = 9, root11 = 13, root12 = 2, root13 = 10, root14 = 2, root15 = 11,
root16 = 3, root17 = 3, root18 = 6, root19 = 4, root20 = 8, root21 = 5, root22 = 12,
root23 = 0, root24 = 9, root25 = 8, root26 = 7, root27 = 5, root28 = 4, root29 = 9,
root30 = 8, root31 = 6, root32 = 7, root33 = 5, root34 = 3, root35 = 9, root36 = 8,
root37 = 1, root38 = 2, root39 = 9, root40 = 8, root41 = 6, root42 = 7, root43 = 5,
root44 = 3, root45 = 9, root46 = 5, root47 = 11, root48 = 12, root49 = 13, root50 = 3,
negroot0 = 1, negroot1 = 2, negroot2 = 3, negroot3 = 4, negroot4 = 5, negroot5 = 6, 
negroot6 = 7, negroot7 = 8, negroot8 = 9, negroot9 = 10, negroot10 = 11, negroot11 = 12, 
negroot12 = 13, negroot13 = 14, negroot14 = 15, negroot15 = 9, negroot16 = 10, 
negroot17 = 7, negroot18 = 8, negroot19 = 4, negroot20 = 3, negroot21 = 2, negroot22 = 3,
negroot23 = 4, negroot24 = 5, negroot25 = 6, negroot26 = 7, negroot27 = 8, negroot28 = 9,
negroot29 = 10, negroot30 = 1, negroot31 = 2, negroot32 = 3, negroot33 = 4, negroot34 = 5,
negroot35 = 6, negroot36 = 7, negroot37 = 8, negroot38 = 9, negroot39 = 10, negroot40 = 1,
negroot41 = 2, negroot42 = 3, negroot43 = 4, negroot44 = 5, negroot45 = 6, negroot46 = 7,
negroot47 = 8, negroot48 = 9, negroot49 = 10, negroot50 = 10, rootpower_seed = 9,
first_root = 9,	one_half = 18, inv_file = "inv_4_19.hex"
);

-- system parameters
-- n  (length of code)
-- m  (GF size (2^m)
-- irrpol (field polynomial)
-- check (number of check symbols (= # of syndromes))
-- genstart (first root of generator polynomial)

--constant wide = ceil(log2(check+1));
constant size = ceil(log2(n+1));

subdesign rs_eras_dsc
(
sysclk, reset, rsin[m..1], dsin, dsout, eras_ind, bypass : INPUT;
rsout[m..1], outvalid, rdyin, decfail, numerr[wide..1] : OUTPUT;
)

VARIABLE

  IF (speed == "full") GENERATE
    key : bms_eras_dsc_full WITH (n=n,m=m,irrpol=irrpol,check=check,inv_file=inv_file);
  ELSE GENERATE
    key : bms_eras_dsc_half WITH (n=n,m=m,irrpol=irrpol,check=check,inv_file=inv_file);
  END GENERATE;
  syn : syn_eras_dsc WITH (n=n,m=m,irrpol=irrpol,check=check,
  first_root=first_root,one_half=one_half,
root1 = root1, root2 = root2, root3 = root3, root4 = root4, root5 = root5,
root6 = root6, root7 = root7, root8 = root8, root9 = root9, root10 = root10,
root11 = root11, root12 = root12, root13 = root13, root14 = root14, root15 = root15,
root16 = root16, root17 = root17, root18 = root18, root19 = root19, root20 = root20,
root21 = root21, root22 = root22, root23 = root23, root24 = root24, root25 = root25,
root26 = root26, root27 = root27, root28 = root28, root29 = root29, root30 = root30,
root31 = root31, root32 = root32, root33 = root33, root34 = root34, root35 = root35,
root36 = root36, root37 = root37, root38 = root38, root39 = root39, root40 = root40,
root41 = root41, root42 = root42, root43 = root43, root44 = root44, root45 = root45,
root46 = root46, root47 = root47, root48 = root48, root49 = root49, root50 = root50
);
  chn : chn_eras_dsc WITH (n=n,m=m,irrpol=irrpol,check=check,genstart=genstart,
negroot0 = negroot0, negroot1 = negroot1, negroot2 = negroot2, negroot3 = negroot3,
negroot4 = negroot4, negroot5 = negroot5, negroot6 = negroot6, negroot7 = negroot7, 
negroot8 = negroot8, negroot9 = negroot9, negroot10 = negroot10, negroot11 = negroot11, 
negroot12 = negroot12, negroot13 = negroot13, negroot14 = negroot14, negroot15 = negroot15, 
negroot16 = negroot16, negroot17 = negroot17, negroot18 = negroot18, negroot19 = negroot19, 
negroot20 = negroot20, negroot21 = negroot21, negroot22 = negroot22, negroot23 = negroot23,
negroot24 = negroot24, negroot25 = negroot25, negroot26 = negroot26, negroot27 = negroot27, 
negroot28 = negroot28, negroot29 = negroot29, negroot30 = negroot30, negroot31 = negroot31,
negroot32 = negroot32, negroot33 = negroot33, negroot34 = negroot34, negroot35 = negroot35,
negroot36 = negroot36, negroot37 = negroot37, negroot38 = negroot38, negroot39 = negroot39,
negroot40 = negroot40, negroot41 = negroot41,
negroot42 = negroot42, negroot43 = negroot43, negroot44 = negroot44, negroot45 = negroot45,
negroot46 = negroot46, negroot47 = negroot47, negroot48 = negroot48, negroot49 = negroot49,
negroot50 = negroot50, rootpower_seed = rootpower_seed, inv_file = inv_file
  );

  errchk[wide..1] : node;

BEGIN

ASSERT
	REPORT "Compiling ALTERA's Discrete Erasure-supporting Reed-Solomon Decoder MegaCore Function"
	SEVERITY INFO;

	
  syn.sysclk = sysclk;
  syn.reset = reset;
  syn.rsin[] = rsin[];
  syn.dsin = dsin;
  syn.dsout = dsout;
	syn.eras_ind = eras_ind;
  syn.bypass = bypass # errchk[wide];
  syn.gofinal = chn.gofinal;
  syn.errvec[check..1][m..1] = chn.errvec[check..1][m..1];
  syn.errloc[check..1][size..1] = chn.errloc[check..1][size..1];
 
  key.sysclk = sysclk;
  key.reset = reset;
  key.go = syn.startmass;
  key.syn[check..1][m..1] = syn.syn[check..1][m..1];
	key.num_eras[wide..1] = syn.num_eras[wide..1];
	key.eras_pos[check..1][m..1] = syn.eras_roots[check..1][m..1];

  chn.sysclk = sysclk;
  chn.reset = reset;
  chn.go = key.done;
  chn.bd[check..1][m..1] = key.bdout[check..1][m..1];
  chn.omega[check..1][m..1] = key.omegaout[check..1][m..1];

  rsout[] = syn.rsout[];
  outvalid = syn.outvalid;
  numerr[] = key.numerr[];
  rdyin = syn.rdyin;

  -- calculate decoding failure (numroots[] <> numerr[])

  errchk[1] = chn.numroots[1] $ key.numerr[1];
  FOR k IN 2 TO wide GENERATE
    errchk[k] = errchk[k-1] # (chn.numroots[k] $ key.numerr[k]);
  END GENERATE;

  decfail = errchk[wide] & syn.outvalid;

END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -