我是靠谱客的博主 积极金鱼,最近开发中收集的这篇文章主要介绍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]datan',ow-1);
fprintf(fid,'   );n');
fprintf(fid,'always @(*)n');
fprintf(fid,'beginn');
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,'    endcasen');
fprintf(fid,'endn');
fprintf(fid,'endmodulen');
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生成的波形如下:
在这里插入图片描述可以看出两种方法都是通过查表的方式来实现正弦波的生成,实际中可以根据自己的需要进行选择。
这篇文章里面有很多东西进行了省略,篇幅有限,还请见谅。后面有时间我也会继续进行改进。

最后

以上就是积极金鱼为你收集整理的FPGA(四):FPGA通过查表的方式生成正弦波的全部内容,希望文章能够帮你解决FPGA(四):FPGA通过查表的方式生成正弦波所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部