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

 
 
> Про ПЛИС и VHDL, Некоторые вопосы
Грендайзер
сообщение Jul 12 2011, 10:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



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

entity DIVIDER is
port (CLK_IN : in Std_logic;
RESET : in Std_logic;
SPD :in Integer;
CLK_OUT :out Std_logic);
end;

wacko.gif

Сначала подумал, что какая то ошибка, но потом проверил вбив подобную строчку в ксилинксовский ISE и... он это дело захавал twak.gif
Никак не могу понять, как порт цифровой микросхемы, может иметь значение отличное от битового? Что это значит то? Как трактовать, что нога у плисины это integer? cranky.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
whiteTigr
сообщение Aug 4 2011, 12:35
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 25-07-11
Пользователь №: 66 407



Предложу пример модуля работы с плавающей точкой.

Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity matem is
     Port ( clk40    : in  STD_LOGIC;
            clk160    : in  STD_LOGIC;
              iowr : in  STD_LOGIC;
           st : in  STD_LOGIC;
           addr : in  STD_LOGIC_VECTOR (31 downto 0);
           data : in  STD_LOGIC_VECTOR (31 downto 0);
           dq : out  STD_LOGIC_VECTOR (31 downto 0)
              );
end matem;

architecture Behavioral of matem is

signal ma, mb, madd, mmult, mdiv, f_to_s, s_to_f, msqrt : std_logic_VECTOR(31 downto 0);
signal mampl, matan: std_logic_vector(31 downto 0);
signal mcmp_int: std_logic_VECTOR(0 downto 0);
signal mcmp: std_logic_vector(31 downto 0);
signal op: std_logic_vector(5 downto 0);

component f_add
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    b: IN std_logic_VECTOR(31 downto 0);
     operation: in std_logic_vector(5 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(31 downto 0));
end component;
component f_cmp
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    b: IN std_logic_VECTOR(31 downto 0);
     operation: in std_logic_vector(5 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(0 downto 0));
end component;
component f_mult
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    b: IN std_logic_VECTOR(31 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(31 downto 0));
end component;
component s_f
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(31 downto 0));
end component;
component f_s
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(31 downto 0));
end component;
component f_div
    port (
    a: IN std_logic_VECTOR(31 downto 0);
    b: IN std_logic_VECTOR(31 downto 0);
    clk: IN std_logic;
    result: OUT std_logic_VECTOR(31 downto 0));
end component;


begin
fadd : f_add
        port map (
            a => ma,
            b => mb,
                operation => op,
            clk => clk160,
            result => madd);
fcmp : f_cmp
        port map (
            a => ma,
            b => mb,
                operation => op,
            clk => clk160,
            result => mcmp_int);
fmult : f_mult
        port map (
            a => ma,
            b => mb,
            clk => clk160,
            result => mmult);
sf : s_f
        port map (
            a => ma,
            clk => clk160,
            result => s_to_f);
fsa : f_s
        port map (
            a => ma,
            clk => clk160,
            result => f_to_s);
fdiv : f_div
        port map (
            a => ma,
            b => mb,
            clk => clk160,
            result => mdiv);

process(clk40)
begin
    if rising_edge(clk40) then
        if iowr = '1' and conv_integer(addr) = 1505 then ma <= data; end if;
        if iowr = '1' and conv_integer(addr) = 1506 then mb <= data; end if;
        if iowr = '1' and conv_integer(addr) = 1507 then op <= data(5 downto 0); end if;
    end if;
end process;

mcmp <= x"FFFFFFFF" when mcmp_int = "1" else x"00000000";

with conv_integer(addr) select
    dq <= madd   when 1500,
          mmult  when 1501,
          mdiv   when 1502,
          f_to_s when 1503,
          s_to_f when 1504,
            mcmp   when 1505,
          (others => 'Z') when others;

end Behavioral;


Использовался модуль как математический сопроцессор (хотя управляться он может как угодно) рядом с самописным процессором.
Плавающая точка реализована набором IP-ядер, формат выбран Single (одинарная точность).
f_to_s - преобразование из плавающего в целое. s_to_f - наоборот.

Управляется модуль системной шиной, которая реализована в виде 4 линий. Адреса (addr), Данных (data), ВыходныхДанных (dq), СигналаЗаписи (iowr).
Для записи операндов в модуль выставляем нужный адресс (if iowr = '1' and conv_integer(addr) = 1505 then ma <= data; end if;), например 1505 для операнда A и поднимаем в 1 сигнал iowr.
Для чтения просто выставляем адресс и читаем линию dq.

Посмотрите даташиты на эти модули, чтобы лучше понять, как они работают (например, разобраться что делает линия operation тут). При генерации любого IP-ядра, где то рядом есть кнопочка "datasheet" или что-то подобное.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Грендайзер   Про ПЛИС и VHDL   Jul 12 2011, 10:46
- - andrew_b   Очевидно, это несколько бит. Скорее всего 32.   Jul 12 2011, 10:56
- - Грендайзер   хххмммм... только что посмотрел прект в "схем...   Jul 12 2011, 11:04
- - SFx   в стандарте vhdl написано что все integer должны б...   Jul 12 2011, 19:51
|- - andrew_b   Цитата(SFx @ Jul 12 2011, 23:51) в станда...   Jul 13 2011, 04:27
- - Грендайзер   Спасибо. Теперь всё встало на свои места... однако...   Jul 26 2011, 11:38
|- - ivanoffer   Чтобы что-то сделать, надо понимать что делаешь, а...   Jul 26 2011, 12:09
|- - R.A.K.   Цитата(Грендайзер @ Jul 26 2011, 15:38) Х...   Jul 27 2011, 12:37
- - Грендайзер   а если бы Xilinx это IP не сделал? Или по тем или ...   Jul 27 2011, 10:54
- - Грендайзер   С плавающей или с фиксированной запятой, значения ...   Jul 28 2011, 06:20
|- - R.A.K.   Цитата(Грендайзер @ Jul 28 2011, 10:20) С...   Jul 28 2011, 08:23
- - Грендайзер   ЦитатаТо, что VHDL не только для синтеза использую...   Jul 28 2011, 08:51
|- - R.A.K.   Цитата(Грендайзер @ Jul 28 2011, 12:51) к...   Jul 28 2011, 09:24
- - Грендайзер   мммм... последовательный сумматор... я честно гово...   Jul 28 2011, 09:40
|- - R.A.K.   Угрюмов "Цифровая схемотехника", наприме...   Jul 28 2011, 11:36
- - Грендайзер   Спасибо, ваши ответы наверно самое конкретное и по...   Aug 3 2011, 05:50
- - Грендайзер   Да, спасибо, обязательно попробую получше разобрат...   Aug 4 2011, 13:15
|- - whiteTigr   Цитата(Грендайзер @ Aug 4 2011, 17:15) Кс...   Aug 5 2011, 06:27
- - Грендайзер   Был бы очень признателен за ответ   Aug 10 2011, 08:26
|- - R.A.K.   Цитата(Грендайзер @ Aug 10 2011, 12:26) Б...   Aug 10 2011, 10:23
- - Грендайзер   Пробовал... но чё то всёравно ничего не понятно......   Aug 11 2011, 09:15
|- - R.A.K.   Тады вот Вам чиста канкрэтика (чиста канкретна по ...   Aug 11 2011, 10:15
|- - whiteTigr   Цитата(R.A.K. @ Aug 11 2011, 14:15) (мляя...   Aug 11 2011, 12:36
- - Грендайзер   ЦитатаА Вы в каком классе то учитесь, если не секр...   Aug 12 2011, 12:25
|- - R.A.K.   Цитата(Грендайзер @ Aug 12 2011, 16:25) Я...   Aug 12 2011, 21:20
- - Грендайзер   Спасибо. А по поводу английского так это Вы с реко...   Aug 15 2011, 06:54
- - des333   Грендайзер: Смотрите реализации на Оpencores, нап...   Aug 27 2011, 20:26
- - Грендайзер   спасибо   Sep 2 2011, 11:49


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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 13:16
Рейтинг@Mail.ru


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