Jump to content

    

Verilog Sin

Кто может помочь или выполнить(желательно) это задание?

Сам сколько не пытался реализовать ,не удалось,мало опыта. :crying: :wacko:

 

Разработка схемы вычисления Sin(x)

Блок должен выдавать значение функции Sin(x). Разрядность входных данных и

результата следующая:

a) Вход 8 разрядов, выход 8 разрядов

B) Вход 4 разряда, выход 16 разрядов

c) Вход 16 разрядов, выход 4 разряда

Share this post


Link to post
Share on other sites

если без хитростей, то

а - таблица

б - таблица

в - выбор из 16 диапазонов входных значений. по одному диапазону для каждого выходного значения

 

маленькие хитрости:

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

 

Успехов

 

Можно добавить 16 - 16, и вполне получится вопрос для собеседования на конкурс "творчество юных".

 

Разработка схемы вычисления Sin(x)

Блок должен выдавать значение функции Sin(x). Разрядность входных данных и

результата следующая:

a ) Вход 8 разрядов, выход 8 разрядов

b ) Вход 4 разряда, выход 16 разрядов

c ) Вход 16 разрядов, выход 4 разряда

Share this post


Link to post
Share on other sites

Поищите в гугле по ключевым словам CORDIC Verilog code. Найдётся несколько проектов, останется лишь слегка доделать и можно тащить преподу.

Share this post


Link to post
Share on other sites
Кто может помочь или выполнить(желательно) это задание?

Сам сколько не пытался реализовать ,не удалось,мало опыта. :crying: :wacko:

Просто любопытно, где такие задания дают и кто? Преподаватель?

 

bugdesigner советует взять CORDIC на Verilog - а где его можно взять? Мне тоже надо, когда искал - найти не удавалось. Пока что использую кору от Xilinx.

Share this post


Link to post
Share on other sites
bugdesigner советует взять CORDIC на Verilog - а где его можно взять? Мне тоже надо, когда искал - найти не удавалось. Пока что использую кору от Xilinx.

генератор кордиков выкладывал на форуме + статья по кордику выкладывалась на этом форуме раз 10, на моей памяти :) по ней делать - 30 минут максимум.

 

Share this post


Link to post
Share on other sites

Пользуйся. Мож преподу покатит)))

module sine_cos(clk, reset, en, sine, cos);
  input clk, reset, en;
  output [7:0] sine,cos;
  reg [7:0] sine_r, cos_r;
  assign      sine = sine_r + {cos_r[7], cos_r[7], cos_r[7], cos_r[7:3]};
  assign      cos  = cos_r - {sine[7], sine[7], sine[7], sine[7:3]};
  always@(posedge clk or negedge reset)
    begin
        if (!reset) begin
            sine_r <= 0;
            cos_r <= 120;
        end else begin
            if (en) begin
                sine_r <= sine;
                cos_r <= cos;
            end
        end
    end
endmodule // sine_cos

post-78536-1463563473_thumb.png

Share this post


Link to post
Share on other sites
Пользуйся. Мож преподу покатит)))

module sine_cos(clk, reset, en, sine, cos);
  input clk, reset, en;
  output [7:0] sine,cos;
  reg [7:0] sine_r, cos_r;
  assign      sine = sine_r + {cos_r[7], cos_r[7], cos_r[7], cos_r[7:3]};
  assign      cos  = cos_r - {sine[7], sine[7], sine[7], sine[7:3]};
  always@(posedge clk or negedge reset)
    begin
        if (!reset) begin
            sine_r <= 0;
            cos_r <= 120;
        end else begin
            if (en) begin
                sine_r <= sine;
                cos_r <= cos;
            end
        end
    end
endmodule // sine_cos

объяснение математики с реализацией на VHDL :)

Share this post


Link to post
Share on other sites
Пользуйся. Мож преподу покатит)))

Интересное решение, возможно, самое простое и экономное.

Приращение здесь вычисляется через производную.

Это Ваше собственное изобретение, или есть еще первоисточники по этому методу, которые можно еще почитать?.

 

Maverick, спасибо за ссылку.

Share this post


Link to post
Share on other sites
Интересное решение, возможно, самое простое и экономное.

Это Ваше собственное изобретение, или есть еще первоисточники по этому методу, которые можно еще почитать?.

первый вроде спросил на форуме Victor®

 

 

Share this post


Link to post
Share on other sites
первый вроде спросил на форуме Victor®

 

вот нашел вроде автора

Да, я читал эту математику. Потом в нете наткнулся на приведенный мной пример. Я его разбирал, менял частоту и прочее (опять же подглядывая в ссылку на математику). Занимательно все это. )))

 

Share this post


Link to post
Share on other sites

Отлично, да. Как sin(x)-то вычислить этим агрегатом? x куда прикручивать?

 

Пользуйся. Мож преподу покатит)))

Share this post


Link to post
Share on other sites
Отлично, да. Как sin(x)-то вычислить этим агрегатом? x куда прикручивать?

возможно здесь ответ

 

Так как мы генерим последовательность cos (n*h), то записав ее как cos(2*pi*F*n*dt), мы получаем :

 

n*h = 2*pi*F*n*dt

 

Откуда: F = h/(2*pi*dt) = arccos((2-1/64)/2)/(2*pi*dt)

 

 

Share this post


Link to post
Share on other sites
Отлично, да. Как sin(x)-то вычислить этим агрегатом? x куда прикручивать?

X - это амплитуда. Изменяй кол-во разрядов.

Share this post


Link to post
Share on other sites

Круто, да.. разрядов чего?

 

давайте проще

мне нужно вычислить y=sin(pi/e). какие мои действия?

 

1. квантую аргумент

2. ?

 

X - это амплитуда. Изменяй кол-во разрядов.

 

возможно здесь ответ

Share this post


Link to post
Share on other sites
давайте проще

мне нужно вычислить y=sin(pi/e). какие мои действия?

 

1. квантую аргумент

думаю пункт 2 будет:

- в always делаем компаратор с заданным числом, то через N тактов получите результат (возможно очень приблизительный)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this