реклама на сайте
подробности

 
 
> IP ядро целочисленного деления от Альтеры, lpm_div
novartis
сообщение Nov 29 2016, 06:05
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Сколько я его не пытался использовать, все какие то заморочки.
Утыкаюсь в ограничение по частоте. Нужно например поделить два числа (64 бит на 32 бит) на частоте 300МГц.
Компилю проект, таймквест репортует - отрицательные слаки. Считаю, вроде тактов 10 не хватает.
В мегавизарде можно выставить latency, ставлю 14 тактов ( запасом).
Компилю проект, таймквест репортует - отрицательные слаки.
Ставлю 24 такта.
Компилю проект, таймквест репортует - отрицательные слаки.
Сколько ему тактов то надо?

Зашел с другой стороны. Завел пониженную частоту 30МГц.
Данные с 300мгц перекидываю на частоту 30мгц. Результат с 30мгц перевожу на 300мгц, все это делаю через всякие там защелки-синхронизаторы .
Таймквест весь изнылся, что куча переходов с 30 мгц на 300мгц и обратно. Все надо описывать в sdc. Час на это потратил, устал, уже под ночь было, и так не доделал все.

Есть нормальный способ целочисленно поделить в ПЛИС?

Сморю сейчас на корки с opencores, может кто что использовал от туда?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
goodsoul
сообщение Nov 29 2016, 08:28
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 136
Регистрация: 3-09-09
Пользователь №: 52 178



С мегафункцией целочисленного деления lpm_divide у меня тоже нормальной частоты не вышло. И варьирование latency не дает желаемого эффекта.
Что интересно, altera_fp_functions может делить плавающую точку и там можно указать желаемую частоту или latency. Вот там как нефиг делать 350MHz получилось.
Go to the top of the page
 
+Quote Post
Maverick
сообщение Nov 29 2016, 20:29
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



попробуйте такое описание

Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--pipelined Radix2 division
entity DivRadix2 is
   GENERIC(width : Natural := 16);
    Port ( clk      : in  STD_LOGIC;
           Dividend : in  STD_LOGIC_VECTOR ((Width-1) downto 0);
           Divisor  : in  STD_LOGIC_VECTOR ((Width-1) downto 0);
           Quotient : out STD_LOGIC_VECTOR ((Width-1) downto 0);
           Remainder: out STD_LOGIC_VECTOR ((Width-1) downto 0));
end DivRadix2;

architecture Behavioral of DivRadix2 is
  type test_arr    is array(0 to (Width-1)) of std_logic_vector((Width-1) downto 0);
  type partial_arr is array(0 to Width) of std_logic_vector((Width-1) downto 0);
  type divisor_arr is array(0 to Width) of std_logic_vector((Width-1) downto 0);
  type q_arr       is array(0 to Width) of std_logic_vector((Width-1) downto 0);
  
  signal test : test_arr;
  signal p    : partial_arr;
  signal d    : divisor_arr;
  signal q    : q_arr;

  constant zeros     : STD_LOGIC_VECTOR ((Width-2) downto 0) := (others => '0');

begin
  q(Width)       <= (others => '0');
  p(Width)       <= dividend;
  d(Width)       <= divisor;
  remainder   <= p(0);
  quotient    <= q(0);

  testgen: for I in 0 to (Width-1) generate
    test(I) <= zeros(I-1 downto 0) & p(I+1)((Width-1) downto I);
  end generate testgen;
  
  procgen: for I in 0 to (Width-1) generate
    process (clk, p(I+1),test(I), d(I+1), q(I+1))
    begin
      if rising_edge(clk) then
        q(I) <= q(I+1)((Width-2) downto 0) & "0";
        d(I) <= d(I+1);
        p(I) <= p(I+1);
        if test(I) >= d(I+1) then
          q(I) <= q(I+1)((Width-2) downto 0) & '1';
          p(I) <= (p(I+1)((Width-1) downto I)-test(I)((Width-1)-I downto 0)) & p(I+1)(I-1 downto 0);
        end if;
      end if;
    end process;
  end generate procgen;
end Behavioral;




--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- novartis   IP ядро целочисленного деления от Альтеры   Nov 29 2016, 06:05
- - Maverick   Цитата(novartis @ Nov 29 2016, 08:05) Ско...   Nov 29 2016, 06:15
- - novartis   Сейчас Arria 10 (speed grade 1)   Nov 29 2016, 06:17
|- - goodsoul   Цитата(novartis @ Nov 29 2016, 09:17) Сей...   Nov 29 2016, 07:06
|- - novartis   Цитата(goodsoul @ Nov 29 2016, 12:06) В к...   Nov 29 2016, 07:12
- - Maverick   Цитата(novartis @ Nov 29 2016, 08:05) Уты...   Nov 29 2016, 07:58
|- - novartis   Цитата(Maverick @ Nov 30 2016, 01:29) поп...   Apr 21 2017, 06:32
- - Kuzmi4   2 novartis Как вариация на тему деления - попробуй...   Apr 21 2017, 07:27
- - sqrt(2)   У меня на Cyclone IV делит нормально (Квартус 16),...   Apr 21 2017, 08:18
- - x736C   У меня тоже есть вопрос по делению, задам тут. Сущ...   Apr 21 2017, 13:57
|- - Tausinov   Цитата(x736C @ Apr 21 2017, 16:57) У меня...   Apr 21 2017, 14:58
|- - blackfin   Цитата(x736C @ Apr 21 2017, 16:57) Сущест...   Apr 21 2017, 16:33
- - Alexxxxey   Цитата(novartis @ Nov 29 2016, 09:05) В м...   Apr 23 2017, 11:56
- - x736C   Tausinov, blackfin, спасибо большое! В общем, ...   Apr 24 2017, 00:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 22:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01409 секунд с 7
ELECTRONIX ©2004-2016