Jump to content
    

Цифровая "синусойда"

`timescale 1ns / 1ps

module sin(
input			clock, // input clock
output [15:0]	sin, // sin output: signed, 16-bit
output [15:0]	cos // cos output: signed, 16-bit
);

parameter width = 16;
parameter InitCos = 32640;

reg [width-1:0] sin1 = 0;
reg [width-1:0] cos1 = InitCos;



always @(posedge clock) begin
	sin1 <= sin;
	cos1 <= cos;
end

//the computator
assign sin = sin1 + {{7{cos1[15]}}, cos1[15:7]};
assign cos = cos1 - {{7{sin[15]}}, sin[15:7]};

endmodule

 

отмоделируйте. даёт отменный синус без всяких таблиц. :)

Share this post


Link to post
Share on other sites

у меня на него не хватило каких-то макроячеек, поэтому подшаманили авторский код, синус тоже нормальный

 

`timescale 1 ns / 1 ps

//{module {sin_generator}}      
    
module sin_generator ( clk,out );

output [15:0] out;
reg [15:0] out;
input clk;
wire clk;

reg [15:0] sin_90     = 32768;
reg [15:0] sin_101_25 = 39160;
reg [15:0] sin_112_5  = 45307;
reg [15:0] sin_123_75 = 50972;
reg [15:0] sin_135    = 55938;
reg [15:0] sin_146_25 = 60013;
reg [15:0] sin_157_5  = 63041;
reg [15:0] sin_168_75 = 65005;
reg [15:0] sin_180    = 65535;//16'b1111_1111_1111_1111;
reg [15:0] sin_191_25 = 64905;
reg [15:0] sin_202_5  = 63041;
reg [15:0] sin_213_75 = 60013;
reg [15:0] sin_225    = 55938;
reg [15:0] sin_236_25 = 50972;
reg [15:0] sin_247_5  = 45307;
reg [15:0] sin_258_75 = 39160;
reg [15:0] sin_270    = 32768;
reg [15:0] sin_281_25 = 26375;
reg [15:0] sin_292_5  = 20228;
reg [15:0] sin_303_75 = 14563;
reg [15:0] sin_315    = 9597;
reg [15:0] sin_326_25 = 5522;
reg [15:0] sin_337_5  = 2494;
reg [15:0] sin_348_75 = 982;
reg [15:0] sin_0      = 2;     //16'b0000_0000_0000_0010;
reg [15:0] sin_11_25  = 942;
reg [15:0] sin_22_5   = 2494;
reg [15:0] sin_33_75  = 5522;
reg [15:0] sin_45     = 9597;
reg [15:0] sin_56_25  = 14563;  
reg [15:0] sin_67_5   = 20228;
reg [15:0] sin_78_75  = 26375;


// Binary counter, 5-bits wide
reg [4:0] counter = 5'b0000;
always @(posedge clk) counter <= counter + 1;

always @(posedge clk) case(counter)

5'b00000:out<=sin_0;
5'b00001:out<=sin_11_25;
5'b00010:out<=sin_22_5;                
5'b00011:out<=sin_33_75;
5'b00100:out<=sin_45;
5'b00101:out<=sin_56_25;       
5'b00110:out<=sin_67_5;
5'b00111:out<=sin_78_75;
5'b01000:out<=sin_90;
5'b01001:out<=sin_101_25;
5'b01010:out<=sin_112_5;
5'b01011:out<=sin_123_75;
5'b01100:out<=sin_135;
5'b01101:out<=sin_146_25;
5'b01110:out<=sin_157_5;
5'b01111:out<=sin_168_75;
5'b10000:out<=sin_180;
5'b10001:out<=sin_191_25;
5'b10010:out<=sin_202_5;
5'b10011:out<=sin_213_75;
5'b10100:out<=sin_225;
5'b10101:out<=sin_236_25;
5'b10110:out<=sin_247_5;
5'b10111:out<=sin_258_75;
5'b11000:out<=sin_270;
5'b11001:out<=sin_281_25;
5'b11010:out<=sin_292_5;
5'b11011:out<=sin_303_75;
5'b11100:out<=sin_315;
5'b11101:out<=sin_326_25;
5'b11110:out<=sin_337_5;
5'b11111:out<=sin_348_75;


default:; 

endcase      

endmodule

 

отмоделируйте. даёт отменный синус без всяких таблиц. :)

а зачем у него два выхода?

Share this post


Link to post
Share on other sites

мне два не надо, из за этого пишет

ERROR:Cpld:837 - Insufficient number of macrocells. The design needs at least

109 but only 72 left after allocating other resources.

у вас нет случайно точно такого же , но с одним выходом?

Share this post


Link to post
Share on other sites

мне два не надо, из за этого пишет

 

у вас нет случайно точно такого же , но с одним выходом?

судя по всему, вы в теме не только не разбираетесь, но и не пытаетесь разобраться. никакого желания "искать" такой же но "с одним выходом" уже не возникает.

Share this post


Link to post
Share on other sites

да , именно так, спасибо, что не ударили.....судя по всему, вы предпочитаете только с академиками общатся, ну удачи вам , как-нить без вас обойдёмся.

Share this post


Link to post
Share on other sites

Да уж, столько народу не знает, чему равна производная синуса (и косинуса)

Share this post


Link to post
Share on other sites

Да уж, столько народу не знает, чему равна производная синуса (и косинуса)

а что должны?

Share this post


Link to post
Share on other sites

да , именно так, спасибо, что не ударили.....судя по всему, вы предпочитаете только с академиками общатся, ну удачи вам , как-нить без вас обойдёмся.

"Да, именно так" - это Вы подтвержаете, что не хотите пытаться разобраться в теме? Если так, то этот форум - не лучшее для Вас.

 

Здесь всегда готовы подсказать/помочь, но делать все за человека, которому это не надо, тут не будут.

 

 

Или, например, когда Вам дают готовый код на 10 строчек, а Вам даже лень потратить 10 минут (не говоря уже о том, что Вы даже спасибо не удосужились сказать), чтобы понять, что там написано, почему там "два выхода" и как от этих двух выходов избавиться. Да еще и хамите...

Share this post


Link to post
Share on other sites

вот наш синус на обычном и самодельном осциллографе.

Если синус только для того, чтобы "глазом посмотреть" - тогда и кусочно-степенная аппроксимация подойдет: берется меандр нужной частоты, и пропускается через интегратор нужного порядка (это просто сумматоры друг за другом).

square = (count >= 0) ? 1 : -1;
triangle = triangle + square;
quadratic = quadratic + triangle;
cubic = cubic + quadratic;
...

 

 

Share this post


Link to post
Share on other sites

"Да, именно так" - это Вы подтвержаете, что не хотите пытаться разобраться в теме? Если так, то этот форум - не лучшее для Вас.

 

Здесь всегда готовы подсказать/помочь, но делать все за человека, которому это не надо, тут не будут.

 

 

Или, например, когда Вам дают готовый код на 10 строчек, а Вам даже лень потратить 10 минут (не говоря уже о том, что Вы даже спасибо не удосужились сказать), чтобы понять, что там написано, почему там "два выхода" и как от этих двух выходов избавиться. Да еще и хамите...

мне нужен просто рабочий код безо всяких наворотов и мне не надо с этим разбираться, потому я не конструктор генераторов и не инженер НИИ какого-нибудь. в програмировании на верилоге я тоже не спец и вникать в него у меня особой надобности нет.

 

"Да, именно так" - это Вы подтвержаете, что не хотите пытаться разобраться в теме? Если так, то этот форум - не лучшее для Вас.

 

Здесь всегда готовы подсказать/помочь, но делать все за человека, которому это не надо, тут не будут.

 

 

Или, например, когда Вам дают готовый код на 10 строчек, а Вам даже лень потратить 10 минут (не говоря уже о том, что Вы даже спасибо не удосужились сказать), чтобы понять, что там написано, почему там "два выхода" и как от этих двух выходов избавиться. Да еще и хамите...

мне и такой подойдёт, лишь бы показывал что-нибудь.

Share this post


Link to post
Share on other sites

у вас нет случайно точно такого же , но с одним выходом?

 

закоментируйте один выход (reg)

 

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...