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

📄 nco.tdf

📁 15个Altera的IP的源码
💻 TDF
字号:
TITLE "NCO";

-- Version 1.0, 
-- Copyright Rune Baeverrud, August 19, 1997
-- You may use or distribute this function freely,
-- provided you do not remove this copyright notice.
-- If you have questions or comments, feel free to
-- contact me by email at r@acte.no 
-- World Wide WEB: http://193.215.128.3/freecore

INCLUDE "sine";
INCLUDE "lpm_add_sub";

PARAMETERS
(
  POLARITY = "BIPOLAR"
);

SUBDESIGN NCO
(
  SysClk           : INPUT;
  Frequency[19..0] : INPUT = GND;
  Offset[8..0]     : INPUT = GND;
  Start	           : INPUT = VCC;
  Stop             : INPUT = GND;

  Wave[7..0]       : OUTPUT;
  Running          : OUTPUT;
  ZeroCross        : OUTPUT;
)

VARIABLE
  phasereg[24..0]: DFF;
  pol_d1, pol_d2 : DFF;
  Run, Active    : SRFF;
  RWave_2d[7..0] : DFFE;
  RWave_1d[7..0] : DFF;
  ZC             : NODE;
  NWave[7..0]    : NODE;
  NPhase[8..0]   : NODE;

BEGIN
  phasereg[].clk = SysClk;
  pol_d1.clk     = SysClk;
  pol_d2.clk     = SysClk;
  Run.clk        = SysClk;
  Active.clk     = SysClk;
  RWave_1d[].clk = SysClk;
  RWave_2d[].clk = SysClk;

  (NPhase[],,) = LPM_ADD_SUB (, phasereg[24..16], Offset[],,,)
                   WITH (LPM_WIDTH=9, LPM_DIRECTION="ADD", LPM_REPRESENTATION="UNSIGNED",
                     LPM_PIPELINE=0, ONE_INPUT_IS_CONSTANT="NO");
  
  NWave[] = sine (SysClk, NPhase[])
              WITH ( POLARITY = POLARITY,
                     LEVEL1   = "REGISTERED",
                     LEVEL2   = "REGISTERED",
                     LEVEL3   = "REGISTERED");

  RWave_1d[] = NWave[];
  RWave_2d[] = RWave_1d[];
  Wave[]     = RWave_2d[];
  
  (phasereg[],,) = LPM_ADD_SUB (, phasereg[], (0,0,0,0,0,Frequency[]),,,)
                     WITH (LPM_WIDTH=25, LPM_DIRECTION="ADD", LPM_REPRESENTATION="UNSIGNED",
                       LPM_PIPELINE=0, ONE_INPUT_IS_CONSTANT="NO");
  pol_d1 = NWave[7];
  pol_d2 = pol_d1;
  ZC     = pol_d1 != pol_d2; 

  Run.S = Start;
  Run.R = Stop;

  Active.S = Run AND ZC;
  Active.R = (NOT Run) AND ZC;

  RWave_2d[].ena = Active OR (Run AND ZC);
  Running        = Active;
  ZeroCross      = ZC;
END;


⌨️ 快捷键说明

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