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

Помогите пожалуйста

Пытаюсь подсчитать обратную матрицу, не могу организовать деление,

как я понел это проблема с разрядами. Подскажите метод небольшим кусочком исходинка, либо мой подправте. Спасибо

 

P.S. Язык только начал изучать.

 

entity mimo is

Port (

Clk: in std_logic;

h00 : in STD_LOGIC_VECTOR (11 downto 0);

h01 : in STD_LOGIC_VECTOR (11 downto 0);

h10 : in STD_LOGIC_VECTOR (11 downto 0);

h11 : in STD_LOGIC_VECTOR (11 downto 0);

x0 : in STD_LOGIC_VECTOR (11 downto 0);

x1 : in STD_LOGIC_VECTOR (11 downto 0);

y0 : out STD_LOGIC_VECTOR (11 downto 0);

y1 : out STD_LOGIC_VECTOR (11 downto 0);

det : inout STD_LOGIC_VECTOR (23 downto 0);

hh1 : out STD_LOGIC_VECTOR (23 downto 0);

hh2 : out STD_LOGIC_VECTOR (11 downto 0);

hh3 : out STD_LOGIC_VECTOR (11 downto 0);

hh4 : out STD_LOGIC_VECTOR (11 downto 0)

);

end mimo;

 

architecture Behavioral of mimo is

signal hh1_int: integer range 0 to 1000 ;

signal h11_48: std_logic_vector(47 downto 0) ;

begin

 

y_solver:process(Clk)

begin

if (rising_edge(Clk)) then

det<=h00*h11-h01*h10;

--hh1_int<= CONV_INTEGER(h11) / CONV_INTEGER(det);

--det <= CONV_STD_LOGIC_VECTOR(hh1_int,1000);

end if ;

 

end process y_solver;

 

end Behavioral;

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


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

В идеале мне надо сделать следующие процедуры:

- комплексное деление

- беззнаковое деление с фиксированной точкой

- знаковое деление с фиксированной точкой

- модуль работы с комплексными числами.

 

У кого есть какие нибудь конкретные примеры, желательно в виде кода?

спасибо

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


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

В идеале мне надо сделать следующие процедуры:

- комплексное деление

- беззнаковое деление с фиксированной точкой

- знаковое деление с фиксированной точкой

- модуль работы с комплексными числами.

 

У кого есть какие нибудь конкретные примеры, желательно в виде кода?

спасибо

для синтеза или побаловаться ?

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


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

В самом лучьшем случае нужно написать MIMO декодер

Пишу, заодно знакомлюсь с языком

Изменено пользователем RUNVoVaN

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


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

В самом лучьшем случае нужно написать MIMO декодер

Пишу, заодно знакомлюсь с языком

 

 

вас ждет разочарование, деление в 1 такт точно не получиться для синтеза, и это если я не ошибаюсь на схемном уровне итерационный процесс, фактически можете заменить деление умножением до тех пор, пока произведение не сравняется или не приблизиться к тому, что хотели делить...

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


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

Добрый день! Предлагаю Вам следующее:

1. Матричное устройство для деления. Авторское свидетельство SU 1462297 G06F7/52.

В приложении первый из 4-х листов описания. Могу отсканировать и выслать и остальные. Полагаю, что по его функциональной схеме (там пример 8- разрядного делимого на 4-разрядный делитель, с получением 4-разрядного частного), можно сделать и описание на VHDL.

 

Это однотактный делитель матричного типа, работающий в дополнительном коде. Аппаратурные затраты пропорциональны квадрату разрядности, зато предельное быстродействие. Это одно из моих изобретении, сделанных лет двадцать назад.

Тогда я как аспирант занимался однотактными умножителями, делителями, совмещенными умножителями-делителями, устройствами для извлечения квадратного корня и возведения в квадрат (была такая потребность для скоростного выполнения арифметических операций для нужд радиолокационных станциях). Всего получил около 20 авторских свидетельств СССР, некоторые из которых были внедрены и работали, были и хорошие премии :)

post-14377-1145426675_thumb.jpg

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


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

Доброе утро !

То Волощенко:

Под однотактностью понимается получение результата на каждом такте после разгонки конвейера ? Или же полный расчет результата за 1 такт ? Если за 1, то очччень интересно посмотреть, на остальные три листа. Сам использую конвейеризированную схему деления в столбик :-) - вычел, проверил результат, создал бит частного, передал на следующий этап конвейера.

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


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

Конвейеризация Вам, видимо, больше подходит, если деление (или другая операция) последовательно выполняется для большого массива данных (обращение матриц и т.п.). Тогда после каждой итерации нужно ставить регистр, а быстродействие будет колоссальное! Но здесь нужно быть более внимательным к организации процесса вычислении.

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

 

 

Что-то не проходят 2-й и 3-й лист (698 кб и 720 кб), т.е. не включаются в приложение. Попробую их пересканировать, что бы сжать. Но это из-за технических причин, будет возможно только через несколько дней :)

post-14377-1145431148_thumb.jpg

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


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

Добрый день! Предлагаю Вам следующее:

1. Матричное устройство для деления. Авторское свидетельство SU 1462297 G06F7/52.

В приложении первый из 4-х листов описания. Могу отсканировать и выслать и остальные. Полагаю, что по его функциональной схеме (там пример 8- разрядного делимого на 4-разрядный делитель, с получением 4-разрядного частного), можно сделать и описание на VHDL.

 

Это однотактный делитель матричного типа, работающий в дополнительном коде. Аппаратурные затраты пропорциональны квадрату разрядности, зато предельное быстродействие. Это одно из моих изобретении, сделанных лет двадцать назад.

Тогда я как аспирант занимался однотактными умножителями, делителями, совмещенными умножителями-делителями, устройствами для извлечения квадратного корня и возведения в квадрат (была такая потребность для скоростного выполнения арифметических операций для нужд радиолокационных станциях). Всего получил около 20 авторских свидетельств СССР, некоторые из которых были внедрены и работали, были и хорошие премии :)

 

поправте меня если я не прав, вы реализовали деление через умножение, дополнительно развернув цикл ?

А можете выслать файлы мылом ?

я из архивну и выложу для всех на фтп и/или рапшиду, или просто на форум

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


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

В данном случае деление через итеративное умножение здесь не причем, хотя это один из многих вариантов решения проблемы.

Здесь классическое деление, отображенное на группу упорядоченных логических элементов. Такие узлы называют матричными, операция выполняется за один такт, как в комбинационной схеме. Так как схемных решений масса, то возникают и разные критериями оптимизации (аппаратурные затраты, быстродействие, многофункциональность и т.п.).

Например, похожесть алгоритмов деления и умножения, позволяет реализовать обе операции на одной матрице (многофункциональность). Такое же решение есть для операций возведения в квадрат и извлечения квадратного корня. Так же есть масса одно функциональных устройств, но с разным быстродействием.

У меня нет доступа к FTP, но могу выслать мылом :)

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


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

В данном случае деление через итеративное умножение здесь не причем, хотя это один из многих вариантов решения проблемы.

Здесь классическое деление, отображенное на группу упорядоченных логических элементов. Такие узлы называют матричными, операция выполняется за один такт, как в комбинационной схеме. Так как схемных решений масса, то возникают и разные критериями оптимизации (аппаратурные затраты, быстродействие, многофункциональность и т.п.).

Например, похожесть алгоритмов деления и умножения, позволяет реализовать обе операции на одной матрице (многофункциональность). Такое же решение есть для операций возведения в квадрат и извлечения квадратного корня. Так же есть масса одно функциональных устройств, но с разным быстродействием.

У меня нет доступа к FTP, но могу выслать мылом :)

 

я не про итеративное умножение вел речь, просто струкутра - матрица, изображенная на рисунке №1 очень похожа на развернутый (loop-unroll) стандартный алгоритм деления, через вычитания, но вычитаються числа умноженные числа == степени числа 2 (который у вас реализованы через сдвиги)

 

вышлите пожалуста на s*h*e*k*h*a*l*e*v*d*v собака elecard.net.ru

я выложу для всех

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


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

Только что выслал. Используйте с пользой для всех :)

 

Спасибо, жду.

Как придет выложу на рапшиду и, если подниметься, фтп.

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


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

письмо получил, все 4 файла в архиве лежат здесь

 

http://rapidshare.de/files/18390856/divider.rar.html

 

фтп еще не поднялся, как поднимется выложу

 

 

2 Волощенко Бальшой пасиб :cheers:

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


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

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

 

Вот такую реализацию деления нашел:

entity intdvd is

Port (

Clk: in std_logic ;

Rst: in std_logic ;

we: in std_logic ;

divident : in STD_LOGIC_VECTOR (23 downto 0) ;

divisor : in STD_LOGIC_VECTOR (11 downto 0) ;

result : out STD_LOGIC_VECTOR (11 downto 0)

);

end intdvd;

 

architecture Behavioral of intdvd is

signal cur_divident: std_logic_vector(23 downto 0) ;

signal cur_divisor: std_logic_vector(23 downto 0) ;

signal bit_count: integer range 12 downto 0 ;

begin

main: process (Rst,Clk)\

begin

if Rst='1' then

cur_divident<="000000" ;

cur_divisor<="000000" ;

bit_count <= 0 ;

elsif rising_edge(Clk) then

if we='1' then

cur_divident<= divident ;

cur_divisor<= divisor ;

bit_count = 12 ;

else if bit_count>0 then

if cur_divident>cur_divisor then

cur_divident <= cur_divident-cur_divisor ;

result(bit_count-1)<='1' ;

else

result(bit_count-1)<='0' ;

end if ;

for i in 0 to 10 loop

cur_divident(i) <= cur_divident(i+1) ;

end loop ;

end if ;

end if ;

end process main;

end Behavioral;

 

 

Но как ее использовать у себя, вот это вопрос. :help:

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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