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

 
 
> Оптимальная реализация мультиплексора
DeadMoroz
сообщение Jan 15 2008, 13:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-02-05
Пользователь №: 2 391



Ситуация такая - в проекте имеется большой мультиплексор к которому подключена куча регистров. Timing Analyzer показывает, что это самое тормознутое место в проекте. Сейчас проект растет, при этом Fmax падает. Т.е. необходимо оптимизировать узкие места. Я пробовал несколько способов описания мультиплексора (с помощью case, if, tri-state), но особого изменения по скорости нет. Сейчас использую такое описание:
Код
  -- DATA output MX
  process(nand_busy, sreg_test_sel, sreg_pfd0_sel, sreg_pfd1_sel, sreg_pw0_sel, sreg_pw1_sel, sreg_pctl_sel,
  sreg_ncmd_sel, sreg_nsta_sel, sreg_nrwc_sel, sreg_nadr1_sel, sreg_nadr2_sel, sreg_nadr3_sel,
  sreg_nadr4_sel, sreg_nadr5_sel, sreg_nid1_sel, sreg_nid2_sel, sreg_nid3_sel, sreg_nid4_sel, sreg_nid5_sel,
  nand_buf_sel,
  nand_dout)
  begin
    if(sreg_test_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_test(7 downto 0);
    elsif(sreg_pfd0_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_pfd0(7 downto 0);
    elsif(sreg_pfd1_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_pfd1(7 downto 0);
    elsif(sreg_pw0_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_pw0(7 downto 0);
    elsif(sreg_pw1_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_pw1(7 downto 0);
    elsif(sreg_pctl_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_pctl(7 downto 0);  
    elsif(sreg_ncmd_sel='1') then                              
      dataout_mx(15 downto 0)<=x"00" & sreg_ncmd(7 downto 0);  
    elsif(sreg_nsta_sel='1') then
      dataout_mx(15 downto 0)<=sreg_ncsta(7 downto 0) & sreg_nsta(7 downto 0);  
    elsif(sreg_nrwc_sel='1') then
      dataout_mx(15 downto 0)<=sreg_nrwc(15 downto 0); -- 16 bits
    elsif(sreg_nadr1_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nadr1(7 downto 0);  
    elsif(sreg_nadr2_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nadr2(7 downto 0);  
    elsif(sreg_nadr3_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nadr3(7 downto 0);  
    elsif(sreg_nadr4_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nadr4(7 downto 0);  
    elsif(sreg_nadr5_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nadr5(7 downto 0);  
    elsif(sreg_nid1_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nid1(7 downto 0);  
    elsif(sreg_nid2_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nid2(7 downto 0);  
    elsif(sreg_nid3_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nid3(7 downto 0);  
    elsif(sreg_nid4_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nid4(7 downto 0);  
    elsif(sreg_nid5_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & sreg_nid5(7 downto 0);  
    elsif(nand_buf_sel='1') then
      dataout_mx(15 downto 0)<=x"00" & nand_dout(7 downto 0);  
    else                                                      
      dataout_mx(15 downto 0)<=x"FFFF";  
    end if;
  end process;  

  -- DATA output reg
  process(CLK100, dataout_mx)
  begin
    if(rising_edge(CLK100)) then
      dataout_reg(15 downto 0)<=dataout_mx(15 downto 0);
    end if;
  end process;


Как можно соптимизировать этого монстра - разбить на кучу маленьких и запайплайнить? Или как?
Сейчас Fmax=106MHz и очень не хочется делать ее меньше. Кстати, использую Spartan-3E(-4).
Принимаются любые соображения.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DeadMoroz   Оптимальная реализация мультиплексора   Jan 15 2008, 13:25
- - dxp   Цитата(DeadMoroz @ Jan 15 2008, 19:25) Ка...   Jan 15 2008, 14:02
- - Victor®   Цитата(DeadMoroz @ Jan 15 2008, 17:25) Си...   Jan 15 2008, 15:13
- - sazh   Т.е. необходимо оптимизировать узкие места. Я проб...   Jan 15 2008, 15:33
- - alex5991   Цитата(DeadMoroz @ Jan 15 2008, 17:25) Си...   Jan 15 2008, 15:52
- - DeadMoroz   Victor - не пойму, почему форма сигнала может изме...   Jan 15 2008, 23:38
|- - Victor®   Цитата(DeadMoroz @ Jan 16 2008, 03:38) Vi...   Jan 16 2008, 07:50
- - des00   2 DeadMoroz. А не могли бы вы конкретизировать к...   Jan 16 2008, 03:32
- - Postoroniy_V   Цитата(DeadMoroz @ Jan 15 2008, 22:25) Си...   Jan 16 2008, 04:47
- - Евгений Николаев   DeadMoroz, фактически у Вас 8-битные регистры, но ...   Jan 16 2008, 06:17
- - DeadMoroz   des00 - так сразу не скажу где затык - в цепи данн...   Jan 16 2008, 14:11
|- - DmitryR   Цитата(DeadMoroz @ Jan 16 2008, 17:11) de...   Jan 16 2008, 15:07
|- - des00   Цитата(DeadMoroz @ Jan 16 2008, 09:11) de...   Jan 17 2008, 03:57
- - DeadMoroz   Как я уже говорил, я пробовал разные варианты. Как...   Jan 16 2008, 22:44
|- - DmitryR   Цитата(DeadMoroz @ Jan 17 2008, 01:44) Ка...   Jan 17 2008, 09:03
- - yuri_d   Цитата(DeadMoroz @ Jan 15 2008, 16:25) Ка...   Jan 17 2008, 08:39
- - DeadMoroz   А код с case был такой: Код-- -- DATAOUT MX reg -...   Jan 17 2008, 12:36
|- - DmitryR   Надеюсь, значения SREG_XXX идут по порядку? Если н...   Jan 17 2008, 13:22
- - DeadMoroz   не по порядку, через два - регистры же 16битные ...   Jan 17 2008, 13:37
|- - DmitryR   Цитата(DeadMoroz @ Jan 17 2008, 16:37) не...   Jan 18 2008, 12:55
- - Евгений Николаев   Если не жалко ресурсов, но важна скорость, то можн...   Jan 18 2008, 14:18


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

 


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


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