|
Про ПЛИС и VHDL, Некоторые вопосы |
|
|
|
Aug 4 2011, 12:35
|
Участник

Группа: Участник
Сообщений: 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" или что-то подобное.
|
|
|
|
|
Aug 4 2011, 13:15
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Да, спасибо, обязательно попробую получше разобраться с вашим кодом. Кстати, о даташитах... я тоже сгенерил одно ядро при помощи коргена, и тут у меня возникла проблема... Я мягко говоря не очень понимаю, как работают эти ядра (в смысле, как интерпретировать эти коды, состоящие в основном из компонентов, описание которых не понять где)... иии вопрос в следующим... как это всё хозяйство смоделировать то?  Я подцеплял этот прожект моделсимом... но... он пишет, что не может найти библиотеку, которая в данном проекте используется (XilinxCoreLib), и как быть, где её взять... как понять, правильно ли мой проект работает?
|
|
|
|
|
Aug 5 2011, 06:27
|
Участник

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

|
Цитата(Грендайзер @ Aug 4 2011, 17:15)  Кстати, о даташитах... я тоже сгенерил одно ядро при помощи коргена, и тут у меня возникла проблема... Я мягко говоря не очень понимаю, как работают эти ядра (в смысле, как интерпретировать эти коды, состоящие в основном из компонентов, описание которых не понять где) О даташитах вроде писалось. В диалоге создание IP-ядра должна быть кнопочка. Или, как вариант, посмотреть тут http://www.xilinx.com/support/. На русском такую информацию вряд ли удастся найти, и это, скорее всего будет перевод этих же даташитов, только постоянно устаревающий и не учитывающий последние изменения. Хотя таблицы, временные диаграммы и т.п. знания английского, по сути, и не требуют. Цитата(Грендайзер @ Aug 4 2011, 17:15)  ... иии вопрос в следующим... как это всё хозяйство смоделировать то?  Я подцеплял этот прожект моделсимом... но... он пишет, что не может найти библиотеку, которая в данном проекте используется (XilinxCoreLib), и как быть, где её взять... как понять, правильно ли мой проект работает? Вот про моделирование сразу не отвечу. На рабочем месте ISE не стоит, а на второе рабочее место я приду, скорее всего, не раньше вторника.
|
|
|
|
|
Aug 10 2011, 10:23
|
Участник

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180

|
Цитата(Грендайзер @ Aug 10 2011, 12:26)  Был бы очень признателен за ответ Грендайзер, а Вы сами то поискать ответ пробовали? Погуглить, например? По ключевому слову XilinxCoreLib? http://www.kxcad.net/electronic_Xilinx_gui...compile_lib.htmИли с английским не лады?
|
|
|
|
|
Aug 11 2011, 10:15
|
Участник

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180

|
Тады вот Вам чиста канкрэтика (чиста канкретна по "моей" сцылке): Цитата The XilinxCoreLib library is used during functional simulation for designs that contain IP cores created by the CORE Generator™. Before starting the functional simulation of your design, you must compile the XilinxCoreLib library for your target simulator. Ну это понятно... Или нет? Цитата Compiling the XilinxCoreLib Library Within ISE
The ISE Project Navigator has a Compile HDL Simulation Libraries process that can be used to compile the XilinxCoreLib Library. For the procedure to compile the library, see Compiling HDL Simulation Libraries in the ISE Help. Кореген нагенерил Вам кучу файлов, среди них есть *.xise. Делаем по нему дабл-клик. Открывается ISE Project Navigator. В дереве проекта щелкаем на самой верхней строчке. Хопа!!! В нижнем окне доступных процессов появилась строчка Compile HDL Simulation Libraries. Щелкаем на этой строчке правой кнопкой мыши. В открывшемся подменю (мляяя!!! я превращаюсь в Зотова  ... знаете такого автора?  ) выбираем строчку Process Properties. Дальше откроется окно с настройками. Самое главное там - указать target simulator. Самое страшное - я сам лично этого никогда не делал (т.к. употребляю актив-хдл), поэтому ничего не гарантирую. Цитата(Грендайзер @ Aug 11 2011, 13:15)  Пробовал... но чё то всёравно ничего не понятно... и по вашей ссылке... чё т конкретики маловато... я этим несколько месяцев занимаюсь всего, и пока вот так на лету не могу всё в кучку собрать... А Вы в каком классе то учитесь, если не секрет?
|
|
|
|
|
Aug 11 2011, 12:36
|
Участник

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

|
Цитата(R.A.K. @ Aug 11 2011, 14:15)  (мляяя!!! я превращаюсь в Зотова  ... знаете такого автора?  ) Переписывание справок и стиль "что вижу - то пою"  Цитата(Грендайзер @ Aug 11 2011, 13:15)  Пробовал... но чё то всёравно ничего не понятно... и по вашей ссылке... чё т конкретики маловато... я этим несколько месяцев занимаюсь всего, и пока вот так на лету не могу всё в кучку собрать... Вообще я не очень хорошо отношусь к позиции "непонятно всё!". Это может означать только то, что человек вообще ничего не пытался понять. Если были хоть какие то попытки, то все начинает делится на понятные фрагменты и непонятные (которые впоследствии можно объяснить, опираясь на то, что уже понятно). Судя по предыдущим сообщениям, Вы недопонимаете двоичную арифметику и двоичное представление чисел. Эта информация может быть найдена в доброй половине книг по любому языку программирования, или гуглением на эту тему.
|
|
|
|
|
Aug 12 2011, 12:25
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Цитата А Вы в каком классе то учитесь, если не секрет? sm.gif Я уже отучился, везде... почти... только вот, там где я учился про плис скозали примерно следующее "ПЛИС - это хитрое устройство, принцип работы которого понять очень сложно", а вот так получилось, что пришлось с ними засесть поближе, только спросить не у кого, а в одиночку всё осмыслить быстро и правильно - эт не у всех выходит За разъяснения, спасибо, попробую поколдовать, может что и вырулим
|
|
|
|
|
Aug 12 2011, 21:20
|
Участник

Группа: Validating
Сообщений: 55
Регистрация: 6-04-11
Пользователь №: 64 180

|
Цитата(Грендайзер @ Aug 12 2011, 16:25)  Я уже отучился, везде... почти... только вот, там где я учился про плис скозали примерно следующее "ПЛИС - это хитрое устройство, принцип работы которого понять очень сложно" Того, кто это сказал, за яйцы бы подвесить конечно не помешало бы. Но это ничего. Вы главное с английским по-дружнее, да документацию читать не робейте. Ксайлиновские апноуты и white papers пробуйте читать (заодно по английскому словарный запас расширите  ). Еще посоветую вот это: 1) Клайв Максфилд "Проектирование на ПЛИС. Курс молодого бойца". Эдакая обзорная книжка по теме, написана очень легко (соответственно и читается также). 2) Потехин, Тарасов "Разработка систем цифровой обработки сигналов на базе ПЛИС". Местами там, правда, жестковато (перестарались мужики  ). Но хотя бы половину первой главы стоит (про двоичную арифметику). 3) Если "Цифровую схемотехнику" Угрюмова еще не читали, то тоже порекомендую. Всю не стоит, можно первые несколько глав (булева логика, автоматы и т.д.), и главы про ПЛИС.
|
|
|
|
|
Aug 15 2011, 06:54
|
Местный
  
Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451

|
Спасибо. А по поводу английского так это Вы с рекомендацией позновато  Уже давно читаю в основном исключительно аглицкую литературу (и действительно, английский сильно подтянулся  ). Особенно помогла (на первых порах) книга FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version Pong P. Chu, и ещё скачал книгу Synthesis of Arithmetic Circuits: FPGA, ASIC and Embedded Systems Jean-Pierre Deschamps (не всё в ней мне понятно, в смысле самого материала, но кое что подчерпнул), эт я привёл если вдруг кому будит интересно... Что же касается нашей литературы, то после прочтения реда буржуинских книг, в груди появилось непонятное щемящее чувство, того, что в наши авторы не совсем понимают, порой, что они пишут... и как бы это помягче то... стиль написания книг нашими авторами, очень напоминает стиль иностранцев... более того, в некоторых наших книжках нашёл картинки и отрывки текста почти полностью содранные у иностранцев
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|