Asb 1 26 июля, 2008 Опубликовано 26 июля, 2008 · Жалоба Интересно узнать мнение уважаемых коллег насколько корректно такое описание для синтеза: mux_out <= mux_in(CONV_INTEGER(mux_sl)) ? XST не ругается, но синтезирует нечто странное: MUX c шиной управления на 1 бит меньшей входной шины. И вообще как правильно и компактно описать мультиплексор скажем 37 в 1 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 26 июля, 2008 Опубликовано 26 июля, 2008 · Жалоба приведите типы участвующих в выражении сигналов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Asb 1 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба приведите типы участвующих в выражении сигналов mux_out : STD_LOGIC, mux_in : STD_LOGIC_VECTOR(29 downto 0), mux_sl : STD_LOGIC_VECTOR(4 downto 0); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба И вообще как правильно и компактно описать мультиплексор скажем 37 в 1 ? На мой взгляд коректнее описывать мультиплексор через case :) Посмотрите Language Templates там есть примеры синтезируемых базовых конструкций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Asb 1 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба На мой взгляд коректнее описывать мультиплексор через case Так всегда и делал, но очень уж длинно получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба mux_out : STD_LOGIC, mux_in : STD_LOGIC_VECTOR(29 downto 0), mux_sl : STD_LOGIC_VECTOR(4 downto 0); ну вообще-то это должно быть синтезабельным. киньте, плз, для полноты ощущений тогда ещё и ругань XST и эскиз получаемой схемки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба ну вообще-то это должно быть синтезабельным. киньте, плз, для полноты ощущений тогда ещё и ругань XST и эскиз получаемой схемки Не думаю, что это правильная синтезабельная конструкция. Она была бы правильной, будь порт mux_in 32-х разрядным. А так что прикажете синтезатору выдавать, когда mux_sl="11111" ? Мое утверждение подтверждается предупреждением от XST при попытке синтеза: ========================================================================= * HDL Analysis * ========================================================================= Analyzing Entity <test_mux> in library (Architecture ). WARNING:Xst:790 - "F:/Temp/test_subst/test_mux.vhd" line 15: Index value(s) does not match array range, simulation mismatch. Entity <test_mux> analyzed. Unit generated. ========================================================================= * HDL Synthesis * ========================================================================= Performing bidirectional port resolution... Synthesizing Unit <test_mux>. Related source file is "F:/Temp/test_subst/test_mux.vhd". Found 1-bit 30-to-1 multiplexer for signal <mux_out>. Summary: inferred 1 Multiplexer(s). Unit <test_mux> synthesized. ========================================================================= HDL Synthesis Report Macro Statistics # Multiplexers : 1 1-bit 30-to-1 multiplexer : 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 27 июля, 2008 Опубликовано 27 июля, 2008 · Жалоба Не думаю, что это правильная синтезабельная конструкция. Она была бы правильной, будь порт mux_in 32-х разрядным. А так что прикажете синтезатору выдавать, когда mux_sl="11111" ? вы правы. это я действительно упустил, что размер вектора не степень двойки. сорри :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avesat 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Интересно узнать мнение уважаемых коллег насколько корректно такое описание для синтеза: mux_out <= mux_in(CONV_INTEGER(mux_sl)) ? XST не ругается, но синтезирует нечто странное: MUX c шиной управления на 1 бит меньшей входной шины. И вообще как правильно и компактно описать мультиплексор скажем 37 в 1 ? Так описывать мультиплексор правильно (по крайней мере для xst), сам так пишу. На картинке показано как имплементится mux 8:1, проверял в фпга эдиторе. И вот дока в довесок http://www.xilinx.com/support/documentatio...tes/xapp466.pdf Только с разрядностью определитесь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Так описывать мультиплексор правильно (по крайней мере для xst), сам так пишу. На картинке показано как имплементится mux 8:1, проверял в фпга эдиторе. См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок. Никому не нужна степень двойки по выбору мультиплексирования. Если нет состояния например тех же 1111. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Никому не нужна степень двойки по выбору мультиплексирования. Если нет состояния например тех же 1111. Извините, не понял Вашего утверждения. Как это не нужна степень двойки по выбору мультиплексирования? Я говорил о том, что если управляющий вход мультиплексора - шина, то ее разрядность определяет количество возможных входов мультиплексора, которое по определению равно 2**(разрядность управляющего входа). Если реально входов данных у мультиплексора меньше, то описанный выше способ задания мультиплексора приводит к проблемам неопределенности выхода для ряда входных значений управляющего входа мультиплексора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Извините, не понял Вашего утверждения. Как это не нужна степень двойки по выбору мультиплексирования? Я говорил о том, что если управляющий вход мультиплексора - шина, то ее разрядность определяет количество возможных входов мультиплексора, которое по определению равно 2**(разрядность управляющего входа). Если реально входов данных у мультиплексора меньше, то описанный выше способ задания мультиплексора приводит к проблемам неопределенности выхода для ряда входных значений управляющего входа мультиплексора. Было бы желательно привести пример такого утверждения. Желательно законченое описания. VHDL не знаю. Вот для затравки (Что я хотел сказать) module mux_c ( input [7:0] input_bus, output mux_out ); assign mux_out = input_bus[8'd4]; endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба Было бы желательно привести пример такого утверждения. Желательно законченое описания. VHDL не знаю. Вот для затравки (Что я хотел сказать) module mux_c ( input [7:0] input_bus, output mux_out ); assign mux_out = input_bus[8'd4]; endmodule Это вполне нормальное описание (на сколько я знаю Verilog, т.к. пишу на VHDL), кроме, разве что, числа 8'd4, т.к. разрядность индекса входной шины не может быть равна 8 при всего-лишь 8 разрядах самой шины. Я же говорил вот о какой проблеме: module mux_c ( input [5:0] input_bus, output mux_out ); assign mux_out = input_bus[8'd7]; endmodule Что будет на выходе в этом случае? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
avesat 0 28 июля, 2008 Опубликовано 28 июля, 2008 · Жалоба См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок. Собсно я и написал Только с разрядностью определитесь. см выше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться