Перейти к содержанию
    

Интересно узнать мнение уважаемых коллег насколько корректно такое описание для синтеза:

mux_out <= mux_in(CONV_INTEGER(mux_sl)) ?

XST не ругается, но синтезирует нечто странное: MUX c шиной управления на 1 бит меньшей входной шины.

И вообще как правильно и компактно описать мультиплексор скажем 37 в 1 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

приведите типы участвующих в выражении сигналов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

приведите типы участвующих в выражении сигналов

mux_out : STD_LOGIC, mux_in : STD_LOGIC_VECTOR(29 downto 0), mux_sl : STD_LOGIC_VECTOR(4 downto 0);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И вообще как правильно и компактно описать мультиплексор скажем 37 в 1 ?

 

На мой взгляд коректнее описывать мультиплексор через case :) Посмотрите Language Templates там есть примеры синтезируемых базовых конструкций.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На мой взгляд коректнее описывать мультиплексор через case

Так всегда и делал, но очень уж длинно получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mux_out : STD_LOGIC, mux_in : STD_LOGIC_VECTOR(29 downto 0), mux_sl : STD_LOGIC_VECTOR(4 downto 0);

ну вообще-то это должно быть синтезабельным. киньте, плз, для полноты ощущений тогда ещё и ругань XST и эскиз получаемой схемки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вообще-то это должно быть синтезабельным. киньте, плз, для полноты ощущений тогда ещё и ругань 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не думаю, что это правильная синтезабельная конструкция. Она была бы правильной, будь порт mux_in 32-х разрядным. А так что прикажете синтезатору выдавать, когда mux_sl="11111" ?

вы правы. это я действительно упустил, что размер вектора не степень двойки.

сорри :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно узнать мнение уважаемых коллег насколько корректно такое описание для синтеза:

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

 

Только с разрядностью определитесь.

post-7621-1217233075_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так описывать мультиплексор правильно (по крайней мере для xst), сам так пишу. На картинке показано как имплементится mux 8:1, проверял в фпга эдиторе.

 

См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок.

 

Никому не нужна степень двойки по выбору мультиплексирования. Если нет состояния например тех же 1111.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никому не нужна степень двойки по выбору мультиплексирования. Если нет состояния например тех же 1111.

 

Извините, не понял Вашего утверждения. Как это не нужна степень двойки по выбору мультиплексирования? Я говорил о том, что если управляющий вход мультиплексора - шина, то ее разрядность определяет количество возможных входов мультиплексора, которое по определению равно 2**(разрядность управляющего входа). Если реально входов данных у мультиплексора меньше, то описанный выше способ задания мультиплексора приводит к проблемам неопределенности выхода для ряда входных значений управляющего входа мультиплексора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, не понял Вашего утверждения. Как это не нужна степень двойки по выбору мультиплексирования? Я говорил о том, что если управляющий вход мультиплексора - шина, то ее разрядность определяет количество возможных входов мультиплексора, которое по определению равно 2**(разрядность управляющего входа). Если реально входов данных у мультиплексора меньше, то описанный выше способ задания мультиплексора приводит к проблемам неопределенности выхода для ряда входных значений управляющего входа мультиплексора.

Было бы желательно привести пример такого утверждения. Желательно законченое описания.

VHDL не знаю. Вот для затравки (Что я хотел сказать)

 

module mux_c

(

input [7:0] input_bus,

output mux_out

);

 

assign mux_out = input_bus[8'd4];

 

endmodule

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было бы желательно привести пример такого утверждения. Желательно законченое описания.

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

 

Что будет на выходе в этом случае?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

См. выше. Число входов мультиплексора = 8 - степень двойки, поэтому можно использовать в качестве индекса двоичный вектор, данном случае, разрядности 3. Если число входов мультиплексора не является степень двойки, то тогда такой подход некорректен, синтезируется, но является потенциальным источником ошибок.

 

Собсно я и написал Только с разрядностью определитесь. см выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...