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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Оптимальная реализация мультиплексора
DmitryR
сообщение Jan 17 2008, 09:03
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(DeadMoroz @ Jan 17 2008, 01:44) *
Как я уже говорил, я пробовал разные варианты.

Вы бы положили сюда вариант как вы делаете на case, может все же неправильно? Посмотрите на принципиальную схему после синтеза, что там стоит, мультиплексор или что-то еще.
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение Jan 17 2008, 12:36
Сообщение #17


Местный
***

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



А код с case был такой:
Код
--  -- DATAOUT MX reg -> registers read
--  process(CLK100, sreg_addr, sreg_test, sreg_pfd0, sreg_pfd1)
--  begin
--    if(rising_edge(CLK100)) then  
--        case(sreg_addr) is
--          when SREG_TEST_ADDR => -- read Test reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_test(7 downto 0);
--          when SREG_PFD0_ADDR => -- read Pulse Freq Div 0 reg                
--            dataout_reg(15 downto 0)<=x"00" & sreg_pfd0(7 downto 0);
--          when SREG_PFD1_ADDR => -- read Pulse Freq Div 1 reg                
--            dataout_reg(15 downto 0)<=x"00" & sreg_pfd1(7 downto 0);
--          when SREG_PW0_ADDR => -- read Pulse Width 0 reg                
--            dataout_reg(15 downto 0)<=x"00" & sreg_pw0(7 downto 0);
--          when SREG_PW1_ADDR => -- read Pulse Width 1 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_pw1(7 downto 0);
--          when SREG_PCTL_ADDR => -- read Pulse Control reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_pctl(7 downto 0);
--          when SREG_NCMD_ADDR => -- read NAND flash command reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_ncmd(7 downto 0);
--          when SREG_NSTA_ADDR => -- read NAND flash status reg                  
--            dataout_reg(15 downto 0)<="0000000" & nand_busy & sreg_nsta(7 downto 0);
--          when SREG_NRWC_ADDR => -- read NAND flash read/write counter reg                  
--            dataout_reg(15 downto 0)<=sreg_nrwc(15 downto 0);
--          when SREG_NADR1_ADDR => -- read NAND flash Address 1 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nadr1(7 downto 0);
--          when SREG_NADR2_ADDR => -- read NAND flash Address 2 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nadr2(7 downto 0);
--          when SREG_NADR3_ADDR => -- read NAND flash Address 3 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nadr3(7 downto 0);
--          when SREG_NADR4_ADDR => -- read NAND flash Address 4 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nadr4(7 downto 0);
--          when SREG_NADR5_ADDR => -- read NAND flash Address 5 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nadr5(7 downto 0);
--          when SREG_NID1_ADDR => -- read NAND flash ID 1 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nid1(7 downto 0);
--          when SREG_NID2_ADDR => -- read NAND flash ID 2 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nid2(7 downto 0);
--          when SREG_NID3_ADDR => -- read NAND flash ID 3 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nid3(7 downto 0);
--          when SREG_NID4_ADDR => -- read NAND flash ID 4 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nid4(7 downto 0);
--          when SREG_NID5_ADDR => -- read NAND flash ID 5 reg                  
--            dataout_reg(15 downto 0)<=x"00" & sreg_nid5(7 downto 0);
--                
--          when others =>                  
--            dataout_reg(15 downto 0)<=x"FF" & x"FF";
--        end case;
--    end if;
--  end process;


Блин, может это все из-за CLK который я вставил вначале, я думал, что это все засинтезируется в mux + reg за ним. Завтра проверю.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 17 2008, 13:22
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Надеюсь, значения SREG_XXX идут по порядку? Если нет - мультиплексора не выйдет. Потом, входы мультиплексора должны идти с регистров (sreg_addr в том числе). Кстати, я бы заодно поставил sreg_addr(4 downto 0).
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение Jan 17 2008, 13:37
Сообщение #19


Местный
***

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



не по порядку, через два - регистры же 16битные
constant SREG_TEST_ADDR: std_logic_vector(15 downto 0):=x"0000";
constant SREG_PFD0_ADDR: std_logic_vector(15 downto 0):=x"0002";
constant SREG_PFD1_ADDR: std_logic_vector(15 downto 0):=x"0004";
constant SREG_PW0_ADDR: std_logic_vector(15 downto 0):=x"0006";
constant SREG_PW1_ADDR: std_logic_vector(15 downto 0):=x"0008";
конечно да, можно поменьше разрядов декодировать, разряды 7-1
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jan 18 2008, 12:55
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(DeadMoroz @ Jan 17 2008, 16:37) *
не по порядку, через два - регистры же 16битные
конечно да, можно поменьше разрядов декодировать, разряды 7-1

6-1 только, мультиплексор 32:1 требует 5 управляющих разрядов. Делайте, расскажите что вышло.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jan 18 2008, 14:18
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Если не жалко ресурсов, но важна скорость, то можно сделать 2 параллельных мультиплексора, управляемых поочерёдно (допустим Т-триггером с тактированием от того же CLK100) и быстрый MUX2(x16)-1(x16) им на выход. Управляющие ENэйблы, конечно, тоже придётся где-то защёлкивать.
Тогда вы будете получать запрошенные данные при запросе следующих и при тех же 100МГц за счёт чередования сможете получать данные почти на 200МГц. Пока вы считываете данные с одного, другой коммутирует на свой выход нужный регистр.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post

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

 


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


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