Перейти к содержанию
    

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

`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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

`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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

109 but only 72 left after allocating other resources.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тему генерации синуса, как оказалось, уже рассматривали на форуме, подробности тут

http://electronix.ru/forum/index.php?showtopic=58482

http://electronix.ru/forum/index.php?showtopic=21934

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

а что должны?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

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

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

 

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

 

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...