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

📄 dds6.v

📁 用Verilog语言实现信号发生器
💻 V
📖 第 1 页 / 共 3 页
字号:
/************************************************************/
//			Title 	 :   波形发生器	 		         								*/
//			Date  	 :   2004-11-27 						
//   		Copyright  :   CUSH	四院二队 						 							*/
/************************************************************/
  module DDS(FREQWORD,AX,CLK,DACOUT/*,sine2*/,EN,CLK_OUT,/*OUTCLK2,*/SELECT);
  input[7:0] FREQWORD; 	   //频率控制字
  input[1:0] AX;		   //数据输入选择
  input[2:0] SELECT;	   //波形选择
  input CLK,EN;		   //系统时钟,使能端
  output[11:0] DACOUT;	   //D/A的数据输入
  output CLK_OUT;           //D/A时钟
  reg[17:0] FREQ_REG;	   //频率控制字寄存器
  reg[ 2:0] COUNTER;	   //三分频 50MHz-->16.667MHz
  reg[11:0] DACOUT_BUFFER;  
  //reg[11:0] SIN_ROM;	   //波形表
  //reg[11:0] FANGBO_ROM;
  //reg[11:0] SANJIAO_ROM;
  //reg[11:0] JUCI_ROM;
  reg[18:0] PHASE;		   //相位累加器
  reg[ 9:0] MOD_PHASE;	   //查表地址
  reg OUTCLK;
  reg CLK_REG_1;
  //wire CLK_REG_2;

/************************************************/
//                  读入频率控制字 	        //
 always @(negedge EN)
   begin   
     case(AX)
     2'h0:FREQ_REG[17:16]=FREQWORD[1:0];
     2'h1:FREQ_REG[15:8]=FREQWORD;
	2'h2:FREQ_REG[7:0]=FREQWORD;
    	endcase
   end
/************************************************/
//                 对CLK三分频			   //	
  always @(posedge CLK)
  begin
    if(COUNTER<2'h2)
  	begin
    	   COUNTER<=COUNTER+1;
        OUTCLK<=0;
	end
	else 
	  begin 
	      COUNTER<=0;
	      OUTCLK<=1;
	  end
   end		    		        

  assign	CLK_OUT=OUTCLK;

/************************************************/
//        相位累加 产生进位,改变查表地址	   //	
  always @(posedge CLK)
  begin
  if(EN)
	begin 
	 PHASE=PHASE+FREQ_REG;
	   if (PHASE<18'h21e89)  
		begin	
	       CLK_REG_1<=0;
		end
	   else
		begin
		  PHASE=PHASE-18'h21e89;	  
		  CLK_REG_1<=1;
		end
	  end
  end
/************************************************/
//             相位累加,生成查表地址    	   //
   //assign	CLK_REG_2=CLK_REG_1;

   always @(posedge CLK_REG_1)
   begin
     if (MOD_PHASE<10'h167) 	 
       MOD_PHASE<=MOD_PHASE+1;		 
     else 
       MOD_PHASE<=0;		   
   end	 
		
   assign 	DACOUT=DACOUT_BUFFER; 		
/***********************************************/
//                  波形选择                   //
   always @(posedge CLK)
   case(SELECT)
   3'b000:    DACOUT_BUFFER=SIN_ROM(MOD_PHASE);
   3'b001:    DACOUT_BUFFER=SANJIAO_ROM(MOD_PHASE);
   3'b011:    DACOUT_BUFFER=FANGBO_ROM(MOD_PHASE);
   3'b010:    DACOUT_BUFFER=JUCI_ROM(MOD_PHASE);
   3'b110:    DACOUT_BUFFER=SIN_ROM(MOD_PHASE*4%360);
   3'b100:    DACOUT_BUFFER=JUCI_ROM(359-MOD_PHASE);
   3'b101:    DACOUT_BUFFER=SIN_ROM(MOD_PHASE)<<1+SIN_ROM(3*MOD_PHASE)<<2+SIN_ROM(5*MOD_PHASE)/8;
   default:   DACOUT_BUFFER=SIN_ROM(MOD_PHASE);
   endcase		

   function[11:0] FANGBO_ROM;  		 
   input[8:0] fangphase;//always @(MOD_PHASE) 
   begin
    if(fangphase<180)
     FANGBO_ROM=12'd0;
    else
     FANGBO_ROM=12'd4095;
   end
   endfunction 		   		
     
   function[11:0] SIN_ROM;//always @( MOD_PHASE)
   input[8:0] sinphase;
   begin
   	   case(sinphase)
	   9'h0:SIN_ROM=12'd2048;				    
	   9'h1:SIN_ROM=12'd2084;
	   9'h2:SIN_ROM=12'd2120;
	   9'h3:SIN_ROM=12'd2156;
	   9'h4:SIN_ROM=12'd2188;
	   9'h5:SIN_ROM=12'd2228;
	   9'h6:SIN_ROM=12'd2260;
	   9'h7:SIN_ROM=12'd2296;
	   9'h8:SIN_ROM=12'd2332;
	   9'h9:SIN_ROM=12'd2368;
	   9'ha:SIN_ROM=12'd2400;
	   9'hb:SIN_ROM=12'd2440;
	   9'hc:SIN_ROM=12'd2472;
	   9'hd:SIN_ROM=12'd2508;
	   9'he:SIN_ROM=12'd2544;
	   9'hf:SIN_ROM=12'd2576;
	   9'h10:SIN_ROM=12'd2612;
	   9'h11:SIN_ROM=12'd2648;
	   9'h12:SIN_ROM=12'd2680;
	   9'h13:SIN_ROM=12'd2716;
	   9'h14:SIN_ROM=12'd2748;
	   9'h15:SIN_ROM=12'd2780;
	   9'h16:SIN_ROM=12'd2816;
	   9'h17:SIN_ROM=12'd2848;
	   9'h18:SIN_ROM=12'd2880;
	   9'h19:SIN_ROM=12'd2912;
	   9'h1a:SIN_ROM=12'd2944;
	   9'h1b:SIN_ROM=12'd2976;
	   9'h1c:SIN_ROM=12'd3008;
	   9'h1d:SIN_ROM=12'd3040;
	   9'h1e:SIN_ROM=12'd3072;
	   9'h1f:SIN_ROM=12'd3104;
	   9'h20:SIN_ROM=12'd3132;
	   9'h21:SIN_ROM=12'd3164;
	   9'h22:SIN_ROM=12'd3192;
	   9'h23:SIN_ROM=12'd3224;
	   9'h24:SIN_ROM=12'd3252;
	   9'h25:SIN_ROM=12'd3280;
	   9'h26:SIN_ROM=12'd3308;
	   9'h27:SIN_ROM=12'd3336;
	   9'h28:SIN_ROM=12'd3364;
	   9'h29:SIN_ROM=12'd3392;
	   9'h2a:SIN_ROM=12'd3420;
	   9'h2b:SIN_ROM=12'd3444;
	   9'h2c:SIN_ROM=12'd3472;
	   9'h2d:SIN_ROM=12'd3496;
	   9'h2e:SIN_ROM=12'd3520;
	   9'h2f:SIN_ROM=12'd3544;
	   9'h30:SIN_ROM=12'd3568;
	   9'h31:SIN_ROM=12'd3592;
	   9'h32:SIN_ROM=12'd3616;
	   9'h33:SIN_ROM=12'd3640;
	   9'h34:SIN_ROM=12'd3660;
	   9'h35:SIN_ROM=12'd3684;
	   9'h36:SIN_ROM=12'd3704;
	   9'h37:SIN_ROM=12'd3724;
	   9'h38:SIN_ROM=12'd3744;
	   9'h39:SIN_ROM=12'd3764;
	   9'h3a:SIN_ROM=12'd3784;
	   9'h3b:SIN_ROM=12'd3804;
	   9'h3c:SIN_ROM=12'd3820;
	   9'h3d:SIN_ROM=12'd3840;
	   9'h3e:SIN_ROM=12'd3856;
	   9'h3f:SIN_ROM=12'd3872;
	   9'h40:SIN_ROM=12'd3888;
	   9'h41:SIN_ROM=12'd3904;
	   9'h42:SIN_ROM=12'd3920;
	   9'h43:SIN_ROM=12'd3936;
	   9'h44:SIN_ROM=12'd3948;
	   9'h45:SIN_ROM=12'd3960;
	   9'h46:SIN_ROM=12'd3972;
	   9'h47:SIN_ROM=12'd3984;
	   9'h48:SIN_ROM=12'd3996;
	   9'h49:SIN_ROM=12'd4008;
	   9'h4a:SIN_ROM=12'd4020;
	   9'h4b:SIN_ROM=12'd4028;
	   9'h4c:SIN_ROM=12'd4036;
	   9'h4d:SIN_ROM=12'd4044;
	   9'h4e:SIN_ROM=12'd4052;
	   9'h4f:SIN_ROM=12'd4060;
	   9'h50:SIN_ROM=12'd4068;
	   9'h51:SIN_ROM=12'd4072;
	   9'h52:SIN_ROM=12'd4076;
	   9'h53:SIN_ROM=12'd4080;
	   9'h54:SIN_ROM=12'd4084;
	   9'h55:SIN_ROM=12'd4088;
	   9'h56:SIN_ROM=12'd4091;
	   9'h57:SIN_ROM=12'd4093;
	   9'h58:SIN_ROM=12'd4095;
	   9'h59:SIN_ROM=12'd4095;
	   9'h5a:SIN_ROM=12'd4095;
	   9'h5b:SIN_ROM=12'd4095;
	   9'h5c:SIN_ROM=12'd4095;
	   9'h5d:SIN_ROM=12'd4093;
	   9'h5e:SIN_ROM=12'd4091;
	   9'h5f:SIN_ROM=12'd4088;
	   9'h60:SIN_ROM=12'd4084;
	   9'h61:SIN_ROM=12'd4080;
	   9'h62:SIN_ROM=12'd4076;
	   9'h63:SIN_ROM=12'd4072;
	   9'h64:SIN_ROM=12'd4068;
	   9'h65:SIN_ROM=12'd4060;
	   9'h66:SIN_ROM=12'd4052;
	   9'h67:SIN_ROM=12'd4044;
	   9'h68:SIN_ROM=12'd4036;
	   9'h69:SIN_ROM=12'd4028;
	   9'h6a:SIN_ROM=12'd4020;
	   9'h6b:SIN_ROM=12'd4008;
	   9'h6c:SIN_ROM=12'd3996;
	   9'h6d:SIN_ROM=12'd3984;
	   9'h6e:SIN_ROM=12'd3972;
	   9'h6f:SIN_ROM=12'd3960;
	   9'h70:SIN_ROM=12'd3948;
	   9'h71:SIN_ROM=12'd3936;
	   9'h72:SIN_ROM=12'd3920;
	   9'h73:SIN_ROM=12'd3904;
	   9'h74:SIN_ROM=12'd3888;
	   9'h75:SIN_ROM=12'd3872;
	   9'h76:SIN_ROM=12'd3856;
	   9'h77:SIN_ROM=12'd3840;
	   9'h78:SIN_ROM=12'd3820;
	   9'h79:SIN_ROM=12'd3804;
	   9'h7a:SIN_ROM=12'd3784;
	   9'h7b:SIN_ROM=12'd3764;
	   9'h7c:SIN_ROM=12'd3744; 
	   9'h7d:SIN_ROM=12'd3724;
	   9'h7e:SIN_ROM=12'd3704;
	   9'h7f:SIN_ROM=12'd3684;
	   9'h80:SIN_ROM=12'd3660;
	   9'h81:SIN_ROM=12'd3640;
	   9'h82:SIN_ROM=12'd3616;
	   9'h83:SIN_ROM=12'd3592;
	   9'h84:SIN_ROM=12'd3568;
	   9'h85:SIN_ROM=12'd3544;
	   9'h86:SIN_ROM=12'd3520;
	   9'h87:SIN_ROM=12'd3496;
	   9'h88:SIN_ROM=12'd3472;
	   9'h89:SIN_ROM=12'd3444;
	   9'h8a:SIN_ROM=12'd3420;
	   9'h8b:SIN_ROM=12'd3392;
	   9'h8c:SIN_ROM=12'd3364;
	   9'h8d:SIN_ROM=12'd3336;
	   9'h8e:SIN_ROM=12'd3308;
	   9'h8f:SIN_ROM=12'd3280;
	   9'h90:SIN_ROM=12'd3252;
	   9'h91:SIN_ROM=12'd3224;
	   9'h92:SIN_ROM=12'd3192;
	   9'h93:SIN_ROM=12'd3164;
	   9'h94:SIN_ROM=12'd3132;
	   9'h95:SIN_ROM=12'd3104;
	   9'h96:SIN_ROM=12'd3072;
	   9'h97:SIN_ROM=12'd3040;
	   9'h98:SIN_ROM=12'd3008;
	   9'h99:SIN_ROM=12'd2976;
	   9'h9a:SIN_ROM=12'd2944;
	   9'h9b:SIN_ROM=12'd2912;
	   9'h9c:SIN_ROM=12'd2880;
	   9'h9d:SIN_ROM=12'd2848;
	   9'h9e:SIN_ROM=12'd2816;
	   9'h9f:SIN_ROM=12'd2780;
	   9'ha0:SIN_ROM=12'd2748;
	   9'ha1:SIN_ROM=12'd2716;
	   9'ha2:SIN_ROM=12'd2680;
	   9'ha3:SIN_ROM=12'd2648;
	   9'ha4:SIN_ROM=12'd2612;
	   9'ha5:SIN_ROM=12'd2576;
	   9'ha6:SIN_ROM=12'd2544;
	   9'ha7:SIN_ROM=12'd2508;
	   9'ha8:SIN_ROM=12'd2472;
	   9'ha9:SIN_ROM=12'd2440;
	   9'haa:SIN_ROM=12'd2404;
	   9'hab:SIN_ROM=12'd2368;
	   9'hac:SIN_ROM=12'd2332;
	   9'had:SIN_ROM=12'd2296;
	   9'hae:SIN_ROM=12'd2260;
	   9'haf:SIN_ROM=12'd2228;
	   9'hb0:SIN_ROM=12'd2188;
	   9'hb1:SIN_ROM=12'd2156;
	   9'hb2:SIN_ROM=12'd2120;
	   9'hb3:SIN_ROM=12'd2084;
	   9'hb4:SIN_ROM=12'd2048;
	   9'hb5:SIN_ROM=12'd2012;
	   9'hb6:SIN_ROM=12'd1976;
	   9'hb7:SIN_ROM=12'd1940;
	   9'hb8:SIN_ROM=12'd1904;
	   9'hb9:SIN_ROM=12'd1868;
	   9'hba:SIN_ROM=12'd1832;
	   9'hbb:SIN_ROM=12'd1896;
	   9'hbc:SIN_ROM=12'd1760;
	   9'hbd:SIN_ROM=12'd1728;
	   9'hbe:SIN_ROM=12'd1692;
	   9'hbf:SIN_ROM=12'd1656;
	   9'hc0:SIN_ROM=12'd1620;
	   9'hc1:SIN_ROM=12'd1588;
	   9'hc2:SIN_ROM=12'd1552;
	   9'hc3:SIN_ROM=12'd1520;
	   9'hc4:SIN_ROM=12'd1484;
	   9'hc5:SIN_ROM=12'd1448;
	   9'hc6:SIN_ROM=12'd1416;
	   9'hc7:SIN_ROM=12'd1380;
	   9'hc8:SIN_ROM=12'd1348;
	   9'hc9:SIN_ROM=12'd1312;
	   9'hca:SIN_ROM=12'd1280;
	   9'hcb:SIN_ROM=12'd1248;
	   9'hcc:SIN_ROM=12'd1216;
	   9'hcd:SIN_ROM=12'd1184;
	   9'hce:SIN_ROM=12'd1152;
	   9'hcf:SIN_ROM=12'd1120;
	   9'hd0:SIN_ROM=12'd1088;
	   9'hd1:SIN_ROM=12'd1056;
	   9'hd2:SIN_ROM=12'd1024;
	   9'hd3:SIN_ROM=12'd992;
	   9'hd4:SIN_ROM=12'd964;
	   9'hd5:SIN_ROM=12'd932;
	   9'hd6:SIN_ROM=12'd904;
	   9'hd7:SIN_ROM=12'd872;
	   9'hd8:SIN_ROM=12'd844;
	   9'hd9:SIN_ROM=12'd816;
	   9'hda:SIN_ROM=12'd788;
	   9'hdb:SIN_ROM=12'd760;
	   9'hdc:SIN_ROM=12'd732;
	   9'hdd:SIN_ROM=12'd704;
	   9'hde:SIN_ROM=12'd676;
	   9'hdf:SIN_ROM=12'd652;
	   9'he0:SIN_ROM=12'd624;
	   9'he1:SIN_ROM=12'd600;
	   9'he2:SIN_ROM=12'd576;
	   9'he3:SIN_ROM=12'd548;
	   9'he4:SIN_ROM=12'd524;
	   9'he5:SIN_ROM=12'd504;
	   9'he6:SIN_ROM=12'd480;
	   9'he7:SIN_ROM=12'd456;
	   9'he8:SIN_ROM=12'd432;
	   9'he9:SIN_ROM=12'd412;
	   9'hea:SIN_ROM=12'd392;
	   9'heb:SIN_ROM=12'd372;
	   9'hec:SIN_ROM=12'd348;
	   9'hed:SIN_ROM=12'd332;
	   9'hee:SIN_ROM=12'd312;
	   9'hef:SIN_ROM=12'd292;
	   9'hf0:SIN_ROM=12'd276;
	   9'hf1:SIN_ROM=12'd256;
	   9'hf2:SIN_ROM=12'd240;
	   9'hf3:SIN_ROM=12'd224;
	   9'hf4:SIN_ROM=12'd208;
	   9'hf5:SIN_ROM=12'd192;
	   9'hf6:SIN_ROM=12'd176;
	   9'hf7:SIN_ROM=12'd164;
	   9'hf8:SIN_ROM=12'd148;
	   9'hf9:SIN_ROM=12'd136;
	   9'hfa:SIN_ROM=12'd124;
	   9'hfb:SIN_ROM=12'd112;
	   9'hfc:SIN_ROM=12'd100;
	   9'hfd:SIN_ROM=12'd88;
	   9'hfe:SIN_ROM=12'd78;
	   9'hff:SIN_ROM=12'd68;
	   9'h100:SIN_ROM=12'd60;
	   9'h101:SIN_ROM=12'd52;
	   9'h102:SIN_ROM=12'd44;
	   9'h103:SIN_ROM=12'd36;
	   9'h104:SIN_ROM=12'd30;
	   9'h105:SIN_ROM=12'd24;
	   9'h106:SIN_ROM=12'd20;
	   9'h107:SIN_ROM=12'd16;
	   9'h108:SIN_ROM=12'd12;
	   9'h109:SIN_ROM=12'd8;
	   9'h10a:SIN_ROM=12'd6;
	   9'h10b:SIN_ROM=12'd4;
	   9'h10c:SIN_ROM=12'd2;
	   9'h10d:SIN_ROM=12'd1;
	   9'h10e:SIN_ROM=12'd1;
	   9'h10f:SIN_ROM=12'd1;
	   9'h110:SIN_ROM=12'd2;
	   9'h111:SIN_ROM=12'd4;
	   9'h112:SIN_ROM=12'd6;
	   9'h113:SIN_ROM=12'd8;
	   9'h114:SIN_ROM=12'd12;
	   9'h115:SIN_ROM=12'd16;
	   9'h116:SIN_ROM=12'd20;
	   9'h117:SIN_ROM=12'd24;
	   9'h118:SIN_ROM=12'd32;
	   9'h119:SIN_ROM=12'd36;
	   9'h11a:SIN_ROM=12'd44;
	   9'h11b:SIN_ROM=12'd52;
	   9'h11c:SIN_ROM=12'd60;
	   9'h11d:SIN_ROM=12'd68;
	   9'h11e:SIN_ROM=12'd78;
	   9'h11f:SIN_ROM=12'd88;
	   9'h120:SIN_ROM=12'd100;
	   9'h121:SIN_ROM=12'd112;
	   9'h122:SIN_ROM=12'd124;
	   9'h123:SIN_ROM=12'd136;
	   9'h124:SIN_ROM=12'd148;

⌨️ 快捷键说明

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