FPGA(四):FPGA通过查表的方式生成正弦波

这里通过两种方式来实现FPGA查表生成正弦波
先看图
在这里插入图片描述这是FPGA通过查ROM表生成正弦波的原理

下面开始介绍具体实现方法:
这里我使用的开发板是MAX10 10M50DAFC7G,不同的开发板接口可能不同,注意查找对应资料,正确连接端口。

一:通过.v文件调用,根据地址直接查表生成所需的正弦波

通过此种方式获取.v文件可以使用软件编程的方式,常见的有c、MATLAB等等,这里通过MATLAB代码来实现.v文件数据的生成。

%generater sin table no negtive number
len = 512;
ow = 8;
iw = round(log2(len));
x = round((sin(0:2*pi/len:(2*pi-2*pi/len))+1)*(2^(ow-1)-1));
fid = fopen('sin_table_test.v','w');
fprintf(fid,'module sin_table(\n');
fprintf(fid,'	input [%d:0]address,\n',iw-1);
fprintf(fid,'	output reg[%d:0]data\n',ow-1);
fprintf(fid,'   );\n');
fprintf(fid,'always @(*)\n');
fprintf(fid,'begin\n');
fprintf(fid,'    case(address)\n');
for k=1:len
    if(x(k)<0)
        fprintf(fid,'        %d''d%d: data <= -%d''d%d;\n',iw,k-1,ow,x(k)*-1);
    else
        fprintf(fid,'        %d''d%d: data <= %d''d%d;\n',iw,k-1,ow,x(k));
    end
    
end
fprintf(fid,'    endcase\n');
fprintf(fid,'end\n');
fprintf(fid,'endmodule\n');
fclose(fid);

通过MATLAB软件运行后可以生成.v文件,打开文件,内容如下:

module sin_table_test(
	input [8:0]address,
	output reg[7:0]data
   );
always @(*)
begin
    case(address)
        9'd0: data <= 8'd127;
        9'd1: data <= 8'd129;
        9'd2: data <= 8'd130;
        9'd3: data <= 8'd132;
        9'd4: data <= 8'd133;
        9'd5: data <= 8'd135;
        9'd6: data <= 8'd136;
        9'd7: data <= 8'd138;
        9'd8: data <= 8'd139;
        9'd9: data <= 8'd141;
        9'd10: data <= 8'd143;
        9'd11: data <= 8'd144;
        9'd12: data <= 8'd146;
        9'd13: data <= 8'd147;
        9'd14: data <= 8'd149;
        9'd15: data <= 8'd150;
        9'd16: data <= 8'd152;
        9'd17: data <= 8'd153;
        9'd18: data <= 8'd155;
        9'd19: data <= 8'd156;
        9'd20: data <= 8'd158;
        9'd21: data <= 8'd159;
        9'd22: data <= 8'd161;
        9'd23: data <= 8'd162;
        9'd24: data <= 8'd164;
        9'd25: data <= 8'd165;
        9'd26: data <= 8'd167;
        9'd27: data <= 8'd168;
        9'd28: data <= 8'd170;
        9'd29: data <= 8'd171;
        9'd30: data <= 8'd173;
        9'd31: data <= 8'd174;
        9'd32: data <= 8'd176;
        9'd33: data <= 8'd177;
        9'd34: data <= 8'd178;
        9'd35: data <= 8'd180;
        9'd36: data <= 8'd181;
        9'd37: data <= 8'd183;
        9'd38: data <= 8'd184;
        9'd39: data <= 8'd185;
        9'd40: data <= 8'd187;
        9'd41: data <= 8'd188;
        9'd42: data <= 8'd190;
        9'd43: data <= 8'd191;
        9'd44: data <= 8'd192;
        9'd45: data <= 8'd194;
        9'd46: data <= 8'd195;
        9'd47: data <= 8'd196;
        9'd48: data <= 8'd198;
        9'd49: data <= 8'd199;
        9'd50: data <= 8'd200;
        9'd51: data <= 8'd201;
        9'd52: data <= 8'd203;
        9'd53: data <= 8'd204;
        9'd54: data <= 8'd205;
        9'd55: data <= 8'd206;
        9'd56: data <= 8'd208;
        9'd57: data <= 8'd209;
        9'd58: data <= 8'd210;
        9'd59: data <= 8'd211;
        9'd60: data <= 8'd212;
        9'd61: data <= 8'd213;
        9'd62: data <= 8'd215;
        9'd63: data <= 8'd216;
        9'd64: data <= 8'd217;
        9'd65: data <= 8'd218;
        9'd66: data <= 8'd219;
        9'd67: data <= 8'd220;
        9'd68: data <= 8'd221;
        9'd69: data <= 8'd222;
        9'd70: data <= 8'd223;
        9'd71: data <= 8'd224;
        9'd72: data <= 8'd225;
        9'd73: data <= 8'd226;
        9'd74: data <= 8'd227;
        9'd75: data <= 8'd228;
        9'd76: data <= 8'd229;
        9'd77: data <= 8'd230;
        9'd78: data <= 8'd231;
        9'd79: data <= 8'd232;
        9'd80: data <= 8'd233;
        9'd81: data <= 8'd233;
        9'd82: data <= 8'd234;
        9'd83: data <= 8'd235;
        9'd84: data <= 8'd236;
        9'd85: data <= 8'd237;
        9'd86: data <= 8'd238;
        9'd87: data <= 8'd238;
        9'd88: data <= 8'd239;
        9'd89: data <= 8'd240;
        9'd90: data <= 8'd240;
        9'd91: data <= 8'd241;
        9'd92: data <= 8'd242;
        9'd93: data <= 8'd242;
        9'd94: data <= 8'd243;
        9'd95: data <= 8'd244;
        9'd96: data <= 8'd244;
        9'd97: data <= 8'd245;
        9'd98: data <= 8'd245;
        9'd99: data <= 8'd246;
        9'd100: data <= 8'd247;
        9'd101: data <= 8'd247;
        9'd102: data <= 8'd248;
        9'd103: data <= 8'd248;
        9'd104: data <= 8'd249;
        9'd105: data <= 8'd249;
        9'd106: data <= 8'd249;
        9'd107: data <= 8'd250;
        9'd108: data <= 8'd250;
        9'd109: data <= 8'd251;
        9'd110: data <= 8'd251;
        9'd111: data <= 8'd251;
        9'd112: data <= 8'd252;
        9'd113: data <= 8'd252;
        9'd114: data <= 8'd252;
        9'd115: data <= 8'd252;
        9'd116: data <= 8'd253;
        9'd117: data <= 8'd253;
        9'd118: data <= 8'd253;
        9'd119: data <= 8'd253;
        9'd120: data <= 8'd253;
        9'd121: data <= 8'd254;
        9'd122: data <= 8'd254;
        9'd123: data <= 8'd254;
        9'd124: data <= 8'd254;
        9'd125: data <= 8'd254;
        9'd126: data <= 8'd254;
        9'd127: data <= 8'd254;
        9'd128: data <= 8'd254;
        9'd129: data <= 8'd254;
        9'd130: data <= 8'd254;
        9'd131: data <= 8'd254;
        9'd132: data <= 8'd254;
        9'd133: data <= 8'd254;
        9'd134: data <= 8'd254;
        9'd135: data <= 8'd254;
        9'd136: data <= 8'd253;
        9'd137: data <= 8'd253;
        9'd138: data <= 8'd253;
        9'd139: data <= 8'd253;
        9'd140: data <= 8'd253;
        9'd141: data <= 8'd252;
        9'd142: data <= 8'd252;
        9'd143: data <= 8'd252;
        9'd144: data <= 8'd252;
        9'd145: data <= 8'd251;
        9'd146: data <= 8'd251;
        9'd147: data <= 8'd251;
        9'd148: data <= 8'd250;
        9'd149: data <= 8'd250;
        9'd150: data <= 8'd249;
        9'd151: data <= 8'd249;
        9'd152: data <= 8'd249;
        9'd153: data <= 8'd248;
        9'd154: data <= 8'd248;
        9'd155: data <= 8'd247;
        9'd156: data <= 8'd247;
        9'd157: data <= 8'd246;
        9'd158: data <= 8'd245;
        9'd159: data <= 8'd245;
        9'd160: data <= 8'd244;
        9'd161: data <= 8'd244;
        9'd162: data <= 8'd243;
        9'd163: data <= 8'd242;
        9'd164: data <= 8'd242;
        9'd165: data <= 8'd241;
        9'd166: data <= 8'd240;
        9'd167: data <= 8'd240;
        9'd168: data <= 8'd239;
        9'd169: data <= 8'd238;
        9'd170: data <= 8'd238;
        9'd171: data <= 8'd237;
        9'd172: data <= 8'd236;
        9'd173: data <= 8'd235;
        9'd174: data <= 8'd234;
        9'd175: data <= 8'd233;
        9'd176: data <= 8'd233;
        9'd177: data <= 8'd232;
        9'd178: data <= 8'd231;
        9'd179: data <= 8'd230;
        9'd180: data <= 8'd229;
        9'd181: data <= 8'd228;
        9'd182: data <= 8'd227;
        9'd183: data <= 8'd226;
        9'd184: data <= 8'd225;
        9'd185: data <= 8'd224;
        9'd186: data <= 8'd223;
        9'd187: data <= 8'd222;
        9'd188: data <= 8'd221;
        9'd189: data <= 8'd220;
        9'd190: data <= 8'd219;
        9'd191: data <= 8'd218;
        9'd192: data <= 8'd217;
        9'd193: data <= 8'd216;
        9'd194: data <= 8'd215;
        9'd195: data <= 8'd213;
        9'd196: data <= 8'd212;
        9'd197: data <= 8'd211;
        9'd198: data <= 8'd210;
        9'd199: data <= 8'd209;
        9'd200: data <= 8'd208;
        9'd201: data <= 8'd206;
        9'd202: data <= 8'd205;
        9'd203: data <= 8'd204;
        9'd204: data <= 8'd203;
        9'd205: data <= 8'd201;
        9'd206: data <= 8'd200;
        9'd207: data <= 8'd199;
        9'd208: data <= 8'd198;
        9'd209: data <= 8'd196;
        9'd210: data <= 8'd195;
        9'd211: data <= 8'd194;
        9'd212: data <= 8'd192;
        9'd213: data <= 8'd191;
        9'd214: data <= 8'd190;
        9'd215: data <= 8'd188;
        9'd216: data <= 8'd187;
        9'd217: data <= 8'd185;
        9'd218: data <= 8'd184;
        9'd219: data <= 8'd183;
        9'd220: data <= 8'd181;
        9'd221: data <= 8'd180;
        9'd222: data <= 8'd178;
        9'd223: data <= 8'd177;
        9'd224: data <= 8'd176;
        9'd225: data <= 8'd174;
        9'd226: data <= 8'd173;
        9'd227: data <= 8'd171;
        9'd228: data <= 8'd170;
        9'd229: data <= 8'd168;
        9'd230: data <= 8'd167;
        9'd231: data <= 8'd165;
        9'd232: data <= 8'd164;
        9'd233: data <= 8'd162;
        9'd234: data <= 8'd161;
        9'd235: data <= 8'd159;
        9'd236: data <= 8'd158;
        9'd237: data <= 8'd156;
        9'd238: data <= 8'd155;
        9'd239: data <= 8'd153;
        9'd240: data <= 8'd152;
        9'd241: data <= 8'd150;
        9'd242: data <= 8'd149;
        9'd243: data <= 8'd147;
        9'd244: data <= 8'd146;
        9'd245: data <= 8'd144;
        9'd246: data <= 8'd143;
        9'd247: data <= 8'd141;
        9'd248: data <= 8'd139;
        9'd249: data <= 8'd138;
        9'd250: data <= 8'd136;
        9'd251: data <= 8'd135;
        9'd252: data <= 8'd133;
        9'd253: data <= 8'd132;
        9'd254: data <= 8'd130;
        9'd255: data <= 8'd129;
        9'd256: data <= 8'd127;
        9'd257: data <= 8'd125;
        9'd258: data <= 8'd124;
        9'd259: data <= 8'd122;
        9'd260: data <= 8'd121;
        9'd261: data <= 8'd119;
        9'd262: data <= 8'd118;
        9'd263: data <= 8'd116;
        9'd264: data <= 8'd115;
        9'd265: data <= 8'd113;
        9'd266: data <= 8'd111;
        9'd267: data <= 8'd110;
        9'd268: data <= 8'd108;
        9'd269: data <= 8'd107;
        9'd270: data <= 8'd105;
        9'd271: data <= 8'd104;
        9'd272: data <= 8'd102;
        9'd273: data <= 8'd101;
        9'd274: data <= 8'd99;
        9'd275: data <= 8'd98;
        9'd276: data <= 8'd96;
        9'd277: data <= 8'd95;
        9'd278: data <= 8'd93;
        9'd279: data <= 8'd92;
        9'd280: data <= 8'd90;
        9'd281: data <= 8'd89;
        9'd282: data <= 8'd87;
        9'd283: data <= 8'd86;
        9'd284: data <= 8'd84;
        9'd285: data <= 8'd83;
        9'd286: data <= 8'd81;
        9'd287: data <= 8'd80;
        9'd288: data <= 8'd78;
        9'd289: data <= 8'd77;
        9'd290: data <= 8'd76;
        9'd291: data <= 8'd74;
        9'd292: data <= 8'd73;
        9'd293: data <= 8'd71;
        9'd294: data <= 8'd70;
        9'd295: data <= 8'd69;
        9'd296: data <= 8'd67;
        9'd297: data <= 8'd66;
        9'd298: data <= 8'd64;
        9'd299: data <= 8'd63;
        9'd300: data <= 8'd62;
        9'd301: data <= 8'd60;
        9'd302: data <= 8'd59;
        9'd303: data <= 8'd58;
        9'd304: data <= 8'd56;
        9'd305: data <= 8'd55;
        9'd306: data <= 8'd54;
        9'd307: data <= 8'd53;
        9'd308: data <= 8'd51;
        9'd309: data <= 8'd50;
        9'd310: data <= 8'd49;
        9'd311: data <= 8'd48;
        9'd312: data <= 8'd46;
        9'd313: data <= 8'd45;
        9'd314: data <= 8'd44;
        9'd315: data <= 8'd43;
        9'd316: data <= 8'd42;
        9'd317: data <= 8'd41;
        9'd318: data <= 8'd39;
        9'd319: data <= 8'd38;
        9'd320: data <= 8'd37;
        9'd321: data <= 8'd36;
        9'd322: data <= 8'd35;
        9'd323: data <= 8'd34;
        9'd324: data <= 8'd33;
        9'd325: data <= 8'd32;
        9'd326: data <= 8'd31;
        9'd327: data <= 8'd30;
        9'd328: data <= 8'd29;
        9'd329: data <= 8'd28;
        9'd330: data <= 8'd27;
        9'd331: data <= 8'd26;
        9'd332: data <= 8'd25;
        9'd333: data <= 8'd24;
        9'd334: data <= 8'd23;
        9'd335: data <= 8'd22;
        9'd336: data <= 8'd21;
        9'd337: data <= 8'd21;
        9'd338: data <= 8'd20;
        9'd339: data <= 8'd19;
        9'd340: data <= 8'd18;
        9'd341: data <= 8'd17;
        9'd342: data <= 8'd16;
        9'd343: data <= 8'd16;
        9'd344: data <= 8'd15;
        9'd345: data <= 8'd14;
        9'd346: data <= 8'd14;
        9'd347: data <= 8'd13;
        9'd348: data <= 8'd12;
        9'd349: data <= 8'd12;
        9'd350: data <= 8'd11;
        9'd351: data <= 8'd10;
        9'd352: data <= 8'd10;
        9'd353: data <= 8'd9;
        9'd354: data <= 8'd9;
        9'd355: data <= 8'd8;
        9'd356: data <= 8'd7;
        9'd357: data <= 8'd7;
        9'd358: data <= 8'd6;
        9'd359: data <= 8'd6;
        9'd360: data <= 8'd5;
        9'd361: data <= 8'd5;
        9'd362: data <= 8'd5;
        9'd363: data <= 8'd4;
        9'd364: data <= 8'd4;
        9'd365: data <= 8'd3;
        9'd366: data <= 8'd3;
        9'd367: data <= 8'd3;
        9'd368: data <= 8'd2;
        9'd369: data <= 8'd2;
        9'd370: data <= 8'd2;
        9'd371: data <= 8'd2;
        9'd372: data <= 8'd1;
        9'd373: data <= 8'd1;
        9'd374: data <= 8'd1;
        9'd375: data <= 8'd1;
        9'd376: data <= 8'd1;
        9'd377: data <= 8'd0;
        9'd378: data <= 8'd0;
        9'd379: data <= 8'd0;
        9'd380: data <= 8'd0;
        9'd381: data <= 8'd0;
        9'd382: data <= 8'd0;
        9'd383: data <= 8'd0;
        9'd384: data <= 8'd0;
        9'd385: data <= 8'd0;
        9'd386: data <= 8'd0;
        9'd387: data <= 8'd0;
        9'd388: data <= 8'd0;
        9'd389: data <= 8'd0;
        9'd390: data <= 8'd0;
        9'd391: data <= 8'd0;
        9'd392: data <= 8'd1;
        9'd393: data <= 8'd1;
        9'd394: data <= 8'd1;
        9'd395: data <= 8'd1;
        9'd396: data <= 8'd1;
        9'd397: data <= 8'd2;
        9'd398: data <= 8'd2;
        9'd399: data <= 8'd2;
        9'd400: data <= 8'd2;
        9'd401: data <= 8'd3;
        9'd402: data <= 8'd3;
        9'd403: data <= 8'd3;
        9'd404: data <= 8'd4;
        9'd405: data <= 8'd4;
        9'd406: data <= 8'd5;
        9'd407: data <= 8'd5;
        9'd408: data <= 8'd5;
        9'd409: data <= 8'd6;
        9'd410: data <= 8'd6;
        9'd411: data <= 8'd7;
        9'd412: data <= 8'd7;
        9'd413: data <= 8'd8;
        9'd414: data <= 8'd9;
        9'd415: data <= 8'd9;
        9'd416: data <= 8'd10;
        9'd417: data <= 8'd10;
        9'd418: data <= 8'd11;
        9'd419: data <= 8'd12;
        9'd420: data <= 8'd12;
        9'd421: data <= 8'd13;
        9'd422: data <= 8'd14;
        9'd423: data <= 8'd14;
        9'd424: data <= 8'd15;
        9'd425: data <= 8'd16;
        9'd426: data <= 8'd16;
        9'd427: data <= 8'd17;
        9'd428: data <= 8'd18;
        9'd429: data <= 8'd19;
        9'd430: data <= 8'd20;
        9'd431: data <= 8'd21;
        9'd432: data <= 8'd21;
        9'd433: data <= 8'd22;
        9'd434: data <= 8'd23;
        9'd435: data <= 8'd24;
        9'd436: data <= 8'd25;
        9'd437: data <= 8'd26;
        9'd438: data <= 8'd27;
        9'd439: data <= 8'd28;
        9'd440: data <= 8'd29;
        9'd441: data <= 8'd30;
        9'd442: data <= 8'd31;
        9'd443: data <= 8'd32;
        9'd444: data <= 8'd33;
        9'd445: data <= 8'd34;
        9'd446: data <= 8'd35;
        9'd447: data <= 8'd36;
        9'd448: data <= 8'd37;
        9'd449: data <= 8'd38;
        9'd450: data <= 8'd39;
        9'd451: data <= 8'd41;
        9'd452: data <= 8'd42;
        9'd453: data <= 8'd43;
        9'd454: data <= 8'd44;
        9'd455: data <= 8'd45;
        9'd456: data <= 8'd46;
        9'd457: data <= 8'd48;
        9'd458: data <= 8'd49;
        9'd459: data <= 8'd50;
        9'd460: data <= 8'd51;
        9'd461: data <= 8'd53;
        9'd462: data <= 8'd54;
        9'd463: data <= 8'd55;
        9'd464: data <= 8'd56;
        9'd465: data <= 8'd58;
        9'd466: data <= 8'd59;
        9'd467: data <= 8'd60;
        9'd468: data <= 8'd62;
        9'd469: data <= 8'd63;
        9'd470: data <= 8'd64;
        9'd471: data <= 8'd66;
        9'd472: data <= 8'd67;
        9'd473: data <= 8'd69;
        9'd474: data <= 8'd70;
        9'd475: data <= 8'd71;
        9'd476: data <= 8'd73;
        9'd477: data <= 8'd74;
        9'd478: data <= 8'd76;
        9'd479: data <= 8'd77;
        9'd480: data <= 8'd78;
        9'd481: data <= 8'd80;
        9'd482: data <= 8'd81;
        9'd483: data <= 8'd83;
        9'd484: data <= 8'd84;
        9'd485: data <= 8'd86;
        9'd486: data <= 8'd87;
        9'd487: data <= 8'd89;
        9'd488: data <= 8'd90;
        9'd489: data <= 8'd92;
        9'd490: data <= 8'd93;
        9'd491: data <= 8'd95;
        9'd492: data <= 8'd96;
        9'd493: data <= 8'd98;
        9'd494: data <= 8'd99;
        9'd495: data <= 8'd101;
        9'd496: data <= 8'd102;
        9'd497: data <= 8'd104;
        9'd498: data <= 8'd105;
        9'd499: data <= 8'd107;
        9'd500: data <= 8'd108;
        9'd501: data <= 8'd110;
        9'd502: data <= 8'd111;
        9'd503: data <= 8'd113;
        9'd504: data <= 8'd115;
        9'd505: data <= 8'd116;
        9'd506: data <= 8'd118;
        9'd507: data <= 8'd119;
        9'd508: data <= 8'd121;
        9'd509: data <= 8'd122;
        9'd510: data <= 8'd124;
        9'd511: data <= 8'd125;
    endcase
end
endmodule

新建一个quartus工程,添加顶层文件后,把这个.v文件加进去,这里我通过现在正在做的一个adda项目的文件进行演示:
ada_test.v文件的代码如下:

`timescale 1ns / 1ps 
// 
// Module Name:        C5G_PLL 
// 
module ada_test( 
        clk50, 
        rst_n, 
        DAC_CLK,
		  DAC_DAT,
		  DAC_PD,
		  ADC_CLK,
		  ADC_DAT,
		  ADC_PD,
		  SW
    ); 
 
 
 
input        clk50;
input        rst_n;

//=======================================================
//  DAC 
//=======================================================
output       DAC_CLK;
output [7:0] DAC_DAT;
output       DAC_PD;

//=======================================================
//  ADC 
//=======================================================
output       ADC_CLK;
input  [7:0] ADC_DAT;
output       ADC_PD;

input  [1:0] SW;
reg  [7:0] ADC_DAT_REG;

assign DAC_CLK = clk50;
assign ADC_CLK = ~clk50;
assign DAC_PD = 0;
assign ADC_PD = 0; 

reg  [8:0]	Cont;        //定义一个计数器,用于SIN的地址

Cont持续计数
always@(posedge clk50 )
begin
    Cont	<=	Cont+1;
	 //address <= address +1;
end

always @(posedge clk50)
begin
    ADC_DAT_REG <= ADC_DAT;
end



//generate sine wave
// 实例化调用刚才加进去的正弦波文件
sin_table INS_SIN(
	.address(Cont),
	.data(DAC_DAT)
		);


endmodule 

为了方便观看,这里提供两种方式来进行验证:

1、通过新建University Program VWF文件添加信号验证

在这里插入图片描述

最终生成的波形如下:
注:只用对clk50 和 rst_n进行设置。其余部分保持不动即可

在这里插入图片描述

2、通过adda模块和signaltap结合观察数据波形

如下图波形所示:
在这里插入图片描述

二、通过FPGA的IP核调用实现查表

这里首先需要生成对应的mif文件,之后通过FPGA的IP核生成.v文件,然后在顶层模块中实现调用即可。说的可能有点简单,但是实际操作并不简单,过程很多已经省略,鉴于篇幅,不再展开。

mif文件:

Sine Wave Data —>.mif file
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据。
生成.mif文件的方法很多
1、利用Quartus自带的mif编辑器
2、利用mif软件生成,百度:Mif Maker2010的使用方法
3、有mif的格式,可以使用excel来生成数据,再导入mif文件里
将生成的.mif文件放到相应的项目文件夹里,也可以直接使用我们的提供的mif文件

这里推荐使用MIf Makeer2010软件生成对应的mif文件
软件打开后页面如下:
在这里插入图片描述在查看中设置全局参数:
在这里插入图片描述

在设定波形中选择正弦波后保存成xxx.mif文件即可,打开quartus软件通过添加mif文件来生成ROM表的.v文件

打开ip核,直接搜索对应的ip。
在这里插入图片描述
设置要生成的文件名:
在这里插入图片描述步骤如下:
在这里插入图片描述在这里记得添加mif文件:
在这里插入图片描述继续next一直到最后即可:
在这里插入图片描述这里勾选xxx_inst.v是为了更好的参考实例调用格式

在顶层文件中添加实例化(也可以直接修改最开始的.v文件实例化代码)

`timescale 1ns / 1ps 
// 
// Module Name:        C5G_PLL 
// 
module ada_test( 
        clk50, 
        rst_n, 
        DAC_CLK,
		  DAC_DAT,
		  DAC_PD,
		  ADC_CLK,
		  ADC_DAT,
		  ADC_PD,
		  SW
    ); 
 
 
 
input        clk50;
input        rst_n;

//=======================================================
//  DAC 
//=======================================================
output       DAC_CLK;
output [7:0] DAC_DAT;
output       DAC_PD;

//=======================================================
//  ADC 
//=======================================================
output       ADC_CLK;
input  [7:0] ADC_DAT;
output       ADC_PD;

input  [1:0] SW;
reg  [7:0] ADC_DAT_REG;

assign DAC_CLK = clk50;
assign ADC_CLK = ~clk50;
assign DAC_PD = 0;
assign ADC_PD = 0; 

reg  [8:0]	Cont;        //定义一个计数器,用于SIN的地址

Cont持续计数
always@(posedge clk50 )
begin
    Cont	<=	Cont+1;
	 //address <= address +1;
end

always @(posedge clk50)
begin
    ADC_DAT_REG <= ADC_DAT;
end

//generate sine wave

sine_1	sin_rom_inst (
	.address ( Cont ),
	.clock ( ~clk50 ),
	.q ( DAC_DAT )
	);	

endmodule 

通过signalTap生成的波形如下:
在这里插入图片描述可以看出两种方法都是通过查表的方式来实现正弦波的生成,实际中可以根据自己的需要进行选择。
这篇文章里面有很多东西进行了省略,篇幅有限,还请见谅。后面有时间我也会继续进行改进。

  • 16
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值