|
Обращение матриц на ПЛИС |
|
|
|
 |
Ответов
|
Feb 11 2006, 13:36
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Код ------------------------------------------------------------ -- Square Root Calculator (FLEX10k) -- < fpsqrt2.vhd > -- 1998/11/11 (Wed) -- yamaoka@tube.ee.uec.ac.jp ------------------------------------------------------------
library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all;
library metamor; use metamor.attributes.all;
entity fpsqrt2 is port ( CLK : in std_logic; A : inout std_logic_vector(15 downto 0); BL : in std_logic_vector(7 downto 0); BH : out std_logic_vector(7 downto 0); OBF : in std_logic_vector(1 downto 0); ACK : out std_logic_vector(1 downto 0); STB : out std_logic_vector(1 downto 0); IBF : in std_logic_vector(1 downto 0); CL : in std_logic_vector(5 downto 0) );
attribute pinnum of A : signal is "BC23,BB24,BC25,BB26,BC27,BB28,BC29,BB30,BC31,BB32,BC33,BB34,BC35,BB36,BC37,B B38"; attribute pinnum of BL : signal is "BC13,BB14,BC15,BB16,BC17,BB18,BC19,BB20"; attribute pinnum of BH : signal is "BC5,BB6,BC7,BB8,BC9,BB10,BC11,BB12"; attribute pinnum of CLK : signal is "D22"; attribute pinnum of OBF : signal is "AV18,AV28"; attribute pinnum of ACK : signal is "AU19,AU29"; attribute pinnum of STB : signal is "AU21,AU31"; attribute pinnum of IBF : signal is "AV20,AV30"; attribute pinnum of CL : signal is "AU23,AV24,AU25,AU33,AV34,AU35";
end fpsqrt2;
architecture RTL of fpsqrt2 is
signal A_REG : std_logic_vector(15 downto 0); signal ACK_BUF : std_logic_vector(1 downto 0); signal IN_CNT : std_logic; signal OUT_CNT : std_logic;
signal FA, FB : std_logic_vector(31 downto 0); signal SQ : std_logic; signal EQ : std_logic_vector(7 downto 0); signal MQ : std_logic_vector(22 downto 0); signal QL, QH : std_logic_vector(15 downto 0);
begin
ACK_BUF <= OBF; ACK <= ACK_BUF;
A <= "ZZZZZZZZZZZZZZZZ" when ACK_BUF = "00" else A_REG;
------------< Input Data from PC >-------------- process ( BL(0), OBF ) begin if BL(0) = '1' then FA <= "00000000000000000000000000000000"; IN_CNT <= '0'; elsif OBF'event and OBF = "11" then if IN_CNT = '0' then FA(15 downto 0) <= A; IN_CNT <= '1'; else FA(31 downto 16) <= A; IN_CNT <= '0'; end if; end if; end process;
------------< Output Data to PC >-------- process ( BL(0), BL(1), IBF ) begin if BL(0) = '1' then OUT_CNT <= '0'; A_REG <= "0000000000000000"; STB <= "11"; elsif rising_edge( BL(1) ) then STB <= "00"; if OUT_CNT = '0' then A_REG <= QL; OUT_CNT <= '1'; else A_REG <= QH; OUT_CNT <= '0'; end if; end if; if IBF = "11" then STB <= "11"; end if; end process;
process variable MA : std_logic_vector(25 downto 0); variable TEQ : std_logic_vector(7 downto 0); variable TMQ : std_logic_vector(24 downto 0); variable TMP1, TMP2, REMAIN : std_logic_vector(27 downto 0); begin wait until rising_edge( CLK );
TEQ := FA(30 downto 23) - "01111111"; EQ <= ( TEQ(7) & TEQ(7 downto 1) ) + "01111111";
if FA(23) = '1' then MA := "01" & FA(22 downto 0) & '0'; else MA := '1' & FA(22 downto 0) & "00"; end if;
TMP1 := "00000000000000000000000000" & MA( 25 downto 24 ); TMP2 := "0000000000000000000000000001";
for I in 0 to 24 loop REMAIN := TMP1 - TMP2; if REMAIN(27) = '0' then TMQ(24-I) := '1'; if I <= 11 then TMP1( (I+3) downto 0 ) := REMAIN( (I+1) downto 0 ) & MA( (23-(2*I)) downto (22-(2*I))); else TMP1( (I+3) downto 0 ) := REMAIN( (I+1) downto 0 ) & "00"; end if; TMP2( (I+3) downto 0 ) := TMP2( (I+2) downto 1 ) & "01"; TMP2(2) := '1'; else TMQ(24-I) := '0'; if I <= 11 then TMP1( (I+3) downto 0 ) := TMP1( (I+1) downto 0 ) & MA( (23-(2*I)) downto (22-(2*I))); else TMP1( (I+3) downto 0 ) := TMP1( (I+1) downto 0 ) & "00"; end if; TMP2( (I+3) downto 0 ) := TMP2( ( I+2 ) downto 1) & "01"; end if; end loop; SQ <= '0';
TMQ := TMQ + "0000000000000000000000001"; MQ <= TMQ(23 downto 1);
end process;
QL <= MQ(15 downto 0); QH <= SQ & EQ & MQ(22 downto 16);
end RTL; может поможет?
|
|
|
|
Сообщений в этой теме
jojo Обращение матриц на ПЛИС Feb 3 2006, 18:29 cdg ИМХО если не за 1 такт надо, то с ПЛИС и не стоит ... Feb 7 2006, 08:58 jojo Да, я все больше убеждаюсь, что ПЛИС "дороже ... Feb 7 2006, 10:46 cdg В пору аспирантской юности, помнится сталкивался с... Feb 7 2006, 15:26 Harbour На плис проект будет работать все равно быстрее че... Feb 8 2006, 07:35 des00 Цитата(Harbour @ Feb 8 2006, 02:35) На пл... Feb 8 2006, 08:52 Harbour Это правда если сравнивать современные DSP с доист... Feb 9 2006, 09:34 dxp Цитата(Harbour @ Feb 9 2006, 15:34) Это п... Feb 9 2006, 10:57 jojo Думаю, по меньшей мере последние этапы обращения м... Feb 9 2006, 11:17 Harbour Цитата(dxp @ Feb 9 2006, 12:57) Цитата(Ha... Feb 9 2006, 14:48 dxp Цитата(Harbour @ Feb 9 2006, 20:48) Ну-ну... Feb 10 2006, 05:25  des00 Цитата(dxp @ Feb 10 2006, 00:25) И если у... Feb 10 2006, 06:07 des00 Ну в качестве примера, RLE кодирование большого ма... Feb 9 2006, 15:33 Harbour Как по мне так RLE параллелится, это сильно зависи... Feb 9 2006, 18:45 Harbour Цитата(dxp @ Feb 10 2006, 07:25) Цитата(H... Feb 10 2006, 06:53 dxp Цитата(Harbour @ Feb 10 2006, 12:53) Ну-у... Feb 10 2006, 07:18 des00 Цитата(Harbour @ Feb 10 2006, 01:53) Как ... Feb 10 2006, 08:09 Harbour Статей про распараллеливание рле полно в инете, во... Feb 10 2006, 10:50 des00 ЦитатаСтатей про распараллеливание рле полно в ине... Feb 10 2006, 11:49 Harbour Цитата(des00 @ Feb 10 2006, 13:49) Тут сл... Feb 10 2006, 12:56 jojo #include <math.h>
Обращение выполняется за ... Feb 10 2006, 13:35 Harbour Прикинул на пальцах Ваши матрицы, вот чего вышло :... Feb 11 2006, 12:46 jojo В процессоре этап 1 выполняется за 14.3 мкс (7128 ... Feb 11 2006, 17:09 jojo Вытащил из процессора таблицу начальных приближени... Feb 13 2006, 10:53
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|