Skip to content

Instantly share code, notes, and snippets.

@zwade
Created April 29, 2015 13:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zwade/3af526da4244639ddd8b to your computer and use it in GitHub Desktop.
Save zwade/3af526da4244639ddd8b to your computer and use it in GitHub Desktop.
DFT V.1
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 12:51:35 03/13/2015
// Design Name:
// Module Name: main
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module main(
input [7:0] Signal,
input Trigger,
input CLK1,
input [7:0] Buttons,
output [7:0] Led,
output reg Latch,
);
reg TrOld;
reg [7:0] Storage [7:0];
reg [7:0] Output [7:0];
reg [7:0] Sin [7:0];
reg [7:0] Cos [7:0];
reg [7:0] k;
reg [7:0] n;
reg [7:0] sIter;
reg [7:0] nBuff;
assign Led = Storage[Buttons];
initial begin
Sin[0] = 8'd0; Sin[1] = 8'd0; Sin[2] = 8'd0; Sin[3] = 8'd1; Sin[4] = 8'd2; Sin[5] = 8'd3; Sin[6] = 8'd5; Sin[7] = 8'd7; Sin[8] = 8'd9; Sin[9] = 8'd12; Sin[10] = 8'd15; Sin[11] = 8'd18; Sin[12] = 8'd21; Sin[13] = 8'd25; Sin[14] = 8'd29; Sin[15] = 8'd33; Sin[16] = 8'd37; Sin[17] = 8'd42; Sin[18] = 8'd46; Sin[19] = 8'd51; Sin[20] = 8'd56; Sin[21] = 8'd62; Sin[22] = 8'd67; Sin[23] = 8'd73; Sin[24] = 8'd79; Sin[25] = 8'd84; Sin[26] = 8'd90; Sin[27] = 8'd96; Sin[28] = 8'd103; Sin[29] = 8'd109; Sin[30] = 8'd115; Sin[31] = 8'd121; Sin[32] = 8'd127; Sin[33] = 8'd134; Sin[34] = 8'd140; Sin[35] = 8'd146; Sin[36] = 8'd152; Sin[37] = 8'd159; Sin[38] = 8'd165; Sin[39] = 8'd171; Sin[40] = 8'd176; Sin[41] = 8'd182; Sin[42] = 8'd188; Sin[43] = 8'd193; Sin[44] = 8'd199; Sin[45] = 8'd204; Sin[46] = 8'd209; Sin[47] = 8'd213; Sin[48] = 8'd218; Sin[49] = 8'd222; Sin[50] = 8'd226; Sin[51] = 8'd230; Sin[52] = 8'd234; Sin[53] = 8'd237; Sin[54] = 8'd240; Sin[55] = 8'd243; Sin[56] = 8'd246; Sin[57] = 8'd248; Sin[58] = 8'd250; Sin[59] = 8'd252; Sin[60] = 8'd253; Sin[61] = 8'd254; Sin[62] = 8'd255; Sin[63] = 8'd255; Sin[64] = 8'd255; Sin[65] = 8'd255; Sin[66] = 8'd255; Sin[67] = 8'd254; Sin[68] = 8'd253; Sin[69] = 8'd252; Sin[70] = 8'd250; Sin[71] = 8'd248; Sin[72] = 8'd246; Sin[73] = 8'd243; Sin[74] = 8'd240; Sin[75] = 8'd237; Sin[76] = 8'd234; Sin[77] = 8'd230; Sin[78] = 8'd226; Sin[79] = 8'd222; Sin[80] = 8'd218; Sin[81] = 8'd213; Sin[82] = 8'd209; Sin[83] = 8'd204; Sin[84] = 8'd199; Sin[85] = 8'd193; Sin[86] = 8'd188; Sin[87] = 8'd182; Sin[88] = 8'd176; Sin[89] = 8'd171; Sin[90] = 8'd165; Sin[91] = 8'd159; Sin[92] = 8'd152; Sin[93] = 8'd146; Sin[94] = 8'd140; Sin[95] = 8'd134; Sin[96] = 8'd128; Sin[97] = 8'd121; Sin[98] = 8'd115; Sin[99] = 8'd109; Sin[100] = 8'd103; Sin[101] = 8'd96; Sin[102] = 8'd90; Sin[103] = 8'd84; Sin[104] = 8'd79; Sin[105] = 8'd73; Sin[106] = 8'd67; Sin[107] = 8'd62; Sin[108] = 8'd56; Sin[109] = 8'd51; Sin[110] = 8'd46; Sin[111] = 8'd42; Sin[112] = 8'd37; Sin[113] = 8'd33; Sin[114] = 8'd29; Sin[115] = 8'd25; Sin[116] = 8'd21; Sin[117] = 8'd18; Sin[118] = 8'd15; Sin[119] = 8'd12; Sin[120] = 8'd9; Sin[121] = 8'd7; Sin[122] = 8'd5; Sin[123] = 8'd3; Sin[124] = 8'd2; Sin[125] = 8'd1; Sin[126] = 8'd0; Sin[127] = 8'd0; Sin[128] = 8'd0; Sin[129] = 8'd0; Sin[130] = 8'd0; Sin[131] = 8'd1; Sin[132] = 8'd2; Sin[133] = 8'd3; Sin[134] = 8'd5; Sin[135] = 8'd7; Sin[136] = 8'd9; Sin[137] = 8'd12; Sin[138] = 8'd15; Sin[139] = 8'd18; Sin[140] = 8'd21; Sin[141] = 8'd25; Sin[142] = 8'd29; Sin[143] = 8'd33; Sin[144] = 8'd37; Sin[145] = 8'd42; Sin[146] = 8'd46; Sin[147] = 8'd51; Sin[148] = 8'd56; Sin[149] = 8'd62; Sin[150] = 8'd67; Sin[151] = 8'd73; Sin[152] = 8'd79; Sin[153] = 8'd84; Sin[154] = 8'd90; Sin[155] = 8'd96; Sin[156] = 8'd103; Sin[157] = 8'd109; Sin[158] = 8'd115; Sin[159] = 8'd121; Sin[160] = 8'd127; Sin[161] = 8'd134; Sin[162] = 8'd140; Sin[163] = 8'd146; Sin[164] = 8'd152; Sin[165] = 8'd159; Sin[166] = 8'd165; Sin[167] = 8'd171; Sin[168] = 8'd176; Sin[169] = 8'd182; Sin[170] = 8'd188; Sin[171] = 8'd193; Sin[172] = 8'd199; Sin[173] = 8'd204; Sin[174] = 8'd209; Sin[175] = 8'd213; Sin[176] = 8'd218; Sin[177] = 8'd222; Sin[178] = 8'd226; Sin[179] = 8'd230; Sin[180] = 8'd234; Sin[181] = 8'd237; Sin[182] = 8'd240; Sin[183] = 8'd243; Sin[184] = 8'd246; Sin[185] = 8'd248; Sin[186] = 8'd250; Sin[187] = 8'd252; Sin[188] = 8'd253; Sin[189] = 8'd254; Sin[190] = 8'd255; Sin[191] = 8'd255; Sin[192] = 8'd255; Sin[193] = 8'd255; Sin[194] = 8'd255; Sin[195] = 8'd254; Sin[196] = 8'd253; Sin[197] = 8'd252; Sin[198] = 8'd250; Sin[199] = 8'd248; Sin[200] = 8'd246; Sin[201] = 8'd243; Sin[202] = 8'd240; Sin[203] = 8'd237; Sin[204] = 8'd234; Sin[205] = 8'd230; Sin[206] = 8'd226; Sin[207] = 8'd222; Sin[208] = 8'd218; Sin[209] = 8'd213; Sin[210] = 8'd209; Sin[211] = 8'd204; Sin[212] = 8'd199; Sin[213] = 8'd193; Sin[214] = 8'd188; Sin[215] = 8'd182; Sin[216] = 8'd176; Sin[217] = 8'd171; Sin[218] = 8'd165; Sin[219] = 8'd159; Sin[220] = 8'd152; Sin[221] = 8'd146; Sin[222] = 8'd140; Sin[223] = 8'd134; Sin[224] = 8'd128; Sin[225] = 8'd121; Sin[226] = 8'd115; Sin[227] = 8'd109; Sin[228] = 8'd103; Sin[229] = 8'd96; Sin[230] = 8'd90; Sin[231] = 8'd84; Sin[232] = 8'd79; Sin[233] = 8'd73; Sin[234] = 8'd67; Sin[235] = 8'd62; Sin[236] = 8'd56; Sin[237] = 8'd51; Sin[238] = 8'd46; Sin[239] = 8'd42; Sin[240] = 8'd37; Sin[241] = 8'd33; Sin[242] = 8'd29; Sin[243] = 8'd25; Sin[244] = 8'd21; Sin[245] = 8'd18; Sin[246] = 8'd15; Sin[247] = 8'd12; Sin[248] = 8'd9; Sin[249] = 8'd7; Sin[250] = 8'd5; Sin[251] = 8'd3; Sin[252] = 8'd2; Sin[253] = 8'd1; Sin[254] = 8'd0; Sin[255] = 8'd0;
Cos[0] = 8'd255; Cos[1] = 8'd255; Cos[2] = 8'd255; Cos[3] = 8'd254; Cos[4] = 8'd253; Cos[5] = 8'd252; Cos[6] = 8'd250; Cos[7] = 8'd248; Cos[8] = 8'd246; Cos[9] = 8'd243; Cos[10] = 8'd240; Cos[11] = 8'd237; Cos[12] = 8'd234; Cos[13] = 8'd230; Cos[14] = 8'd226; Cos[15] = 8'd222; Cos[16] = 8'd218; Cos[17] = 8'd213; Cos[18] = 8'd209; Cos[19] = 8'd204; Cos[20] = 8'd199; Cos[21] = 8'd193; Cos[22] = 8'd188; Cos[23] = 8'd182; Cos[24] = 8'd176; Cos[25] = 8'd171; Cos[26] = 8'd165; Cos[27] = 8'd159; Cos[28] = 8'd152; Cos[29] = 8'd146; Cos[30] = 8'd140; Cos[31] = 8'd134; Cos[32] = 8'd127; Cos[33] = 8'd121; Cos[34] = 8'd115; Cos[35] = 8'd109; Cos[36] = 8'd103; Cos[37] = 8'd96; Cos[38] = 8'd90; Cos[39] = 8'd84; Cos[40] = 8'd79; Cos[41] = 8'd73; Cos[42] = 8'd67; Cos[43] = 8'd62; Cos[44] = 8'd56; Cos[45] = 8'd51; Cos[46] = 8'd46; Cos[47] = 8'd42; Cos[48] = 8'd37; Cos[49] = 8'd33; Cos[50] = 8'd29; Cos[51] = 8'd25; Cos[52] = 8'd21; Cos[53] = 8'd18; Cos[54] = 8'd15; Cos[55] = 8'd12; Cos[56] = 8'd9; Cos[57] = 8'd7; Cos[58] = 8'd5; Cos[59] = 8'd3; Cos[60] = 8'd2; Cos[61] = 8'd1; Cos[62] = 8'd0; Cos[63] = 8'd0; Cos[64] = 8'd0; Cos[65] = 8'd0; Cos[66] = 8'd0; Cos[67] = 8'd1; Cos[68] = 8'd2; Cos[69] = 8'd3; Cos[70] = 8'd5; Cos[71] = 8'd7; Cos[72] = 8'd9; Cos[73] = 8'd12; Cos[74] = 8'd15; Cos[75] = 8'd18; Cos[76] = 8'd21; Cos[77] = 8'd25; Cos[78] = 8'd29; Cos[79] = 8'd33; Cos[80] = 8'd37; Cos[81] = 8'd42; Cos[82] = 8'd46; Cos[83] = 8'd51; Cos[84] = 8'd56; Cos[85] = 8'd62; Cos[86] = 8'd67; Cos[87] = 8'd73; Cos[88] = 8'd79; Cos[89] = 8'd84; Cos[90] = 8'd90; Cos[91] = 8'd96; Cos[92] = 8'd103; Cos[93] = 8'd109; Cos[94] = 8'd115; Cos[95] = 8'd121; Cos[96] = 8'd127; Cos[97] = 8'd134; Cos[98] = 8'd140; Cos[99] = 8'd146; Cos[100] = 8'd152; Cos[101] = 8'd159; Cos[102] = 8'd165; Cos[103] = 8'd171; Cos[104] = 8'd176; Cos[105] = 8'd182; Cos[106] = 8'd188; Cos[107] = 8'd193; Cos[108] = 8'd199; Cos[109] = 8'd204; Cos[110] = 8'd209; Cos[111] = 8'd213; Cos[112] = 8'd218; Cos[113] = 8'd222; Cos[114] = 8'd226; Cos[115] = 8'd230; Cos[116] = 8'd234; Cos[117] = 8'd237; Cos[118] = 8'd240; Cos[119] = 8'd243; Cos[120] = 8'd246; Cos[121] = 8'd248; Cos[122] = 8'd250; Cos[123] = 8'd252; Cos[124] = 8'd253; Cos[125] = 8'd254; Cos[126] = 8'd255; Cos[127] = 8'd255; Cos[128] = 8'd255; Cos[129] = 8'd255; Cos[130] = 8'd255; Cos[131] = 8'd254; Cos[132] = 8'd253; Cos[133] = 8'd252; Cos[134] = 8'd250; Cos[135] = 8'd248; Cos[136] = 8'd246; Cos[137] = 8'd243; Cos[138] = 8'd240; Cos[139] = 8'd237; Cos[140] = 8'd234; Cos[141] = 8'd230; Cos[142] = 8'd226; Cos[143] = 8'd222; Cos[144] = 8'd218; Cos[145] = 8'd213; Cos[146] = 8'd209; Cos[147] = 8'd204; Cos[148] = 8'd199; Cos[149] = 8'd193; Cos[150] = 8'd188; Cos[151] = 8'd182; Cos[152] = 8'd176; Cos[153] = 8'd171; Cos[154] = 8'd165; Cos[155] = 8'd159; Cos[156] = 8'd152; Cos[157] = 8'd146; Cos[158] = 8'd140; Cos[159] = 8'd134; Cos[160] = 8'd128; Cos[161] = 8'd121; Cos[162] = 8'd115; Cos[163] = 8'd109; Cos[164] = 8'd103; Cos[165] = 8'd96; Cos[166] = 8'd90; Cos[167] = 8'd84; Cos[168] = 8'd79; Cos[169] = 8'd73; Cos[170] = 8'd67; Cos[171] = 8'd62; Cos[172] = 8'd56; Cos[173] = 8'd51; Cos[174] = 8'd46; Cos[175] = 8'd42; Cos[176] = 8'd37; Cos[177] = 8'd33; Cos[178] = 8'd29; Cos[179] = 8'd25; Cos[180] = 8'd21; Cos[181] = 8'd18; Cos[182] = 8'd15; Cos[183] = 8'd12; Cos[184] = 8'd9; Cos[185] = 8'd7; Cos[186] = 8'd5; Cos[187] = 8'd3; Cos[188] = 8'd2; Cos[189] = 8'd1; Cos[190] = 8'd0; Cos[191] = 8'd0; Cos[192] = 8'd0; Cos[193] = 8'd0; Cos[194] = 8'd0; Cos[195] = 8'd1; Cos[196] = 8'd2; Cos[197] = 8'd3; Cos[198] = 8'd5; Cos[199] = 8'd7; Cos[200] = 8'd9; Cos[201] = 8'd12; Cos[202] = 8'd15; Cos[203] = 8'd18; Cos[204] = 8'd21; Cos[205] = 8'd25; Cos[206] = 8'd29; Cos[207] = 8'd33; Cos[208] = 8'd37; Cos[209] = 8'd42; Cos[210] = 8'd46; Cos[211] = 8'd51; Cos[212] = 8'd56; Cos[213] = 8'd62; Cos[214] = 8'd67; Cos[215] = 8'd73; Cos[216] = 8'd79; Cos[217] = 8'd84; Cos[218] = 8'd90; Cos[219] = 8'd96; Cos[220] = 8'd103; Cos[221] = 8'd109; Cos[222] = 8'd115; Cos[223] = 8'd121; Cos[224] = 8'd127; Cos[225] = 8'd134; Cos[226] = 8'd140; Cos[227] = 8'd146; Cos[228] = 8'd152; Cos[229] = 8'd159; Cos[230] = 8'd165; Cos[231] = 8'd171; Cos[232] = 8'd176; Cos[233] = 8'd182; Cos[234] = 8'd188; Cos[235] = 8'd193; Cos[236] = 8'd199; Cos[237] = 8'd204; Cos[238] = 8'd209; Cos[239] = 8'd213; Cos[240] = 8'd218; Cos[241] = 8'd222; Cos[242] = 8'd226; Cos[243] = 8'd230; Cos[244] = 8'd234; Cos[245] = 8'd237; Cos[246] = 8'd240; Cos[247] = 8'd243; Cos[248] = 8'd246; Cos[249] = 8'd248; Cos[250] = 8'd250; Cos[251] = 8'd252; Cos[252] = 8'd253; Cos[253] = 8'd254; Cos[254] = 8'd255; Cos[255] = 8'd255;
TrOld = 1'd0
k = 8'd0;
n = 8'd0;
sIter = 8'd0;
end
always @(posedge CLK1) begin
if (n == 7'd0) begin
Output[k] = Storage[k]*nBuff;
k = k+1;
nBuff = 0;
end
nBuff = nBuff + Sin[n*k/255] * Sin[n*k/255] + Cos[n*k/255] * Cos[n*k/255];
n = n + 1;
if (TrOld != Trigger) begin
if (TrOld) begin
Storage[sIter] = Signal;
end
TrOld = Trigger;
end
end
endmodule
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment