2015-08-06 3 views
0

Я программирую мультиплеер 32: 8 в vhdl. Задача основана на вопросе экзамена, который, очевидно, может быть интерпретирован несколькими способами. Первоначальная задача состояла в том, чтобы: запрограммировать мультиплеер 32: 8, используя «с выбором когда» и «если тогда еще». Я не понял, как будет работать мультиплекс 32: 8, поэтому я не знал, с чего начать, но благодаря вам, ребята, я решил, что буду программировать его как 4: 1 мультиплексор, проходящий 4 группы по 8 бит.Как работает мультиплексор 32: 8?

Это то, что я получил:

library ieee; 
use ieee.std_logic_1164.all; 
entity mux_using_with is 
port (
     input :in std_logic_vector (31 downto 0); 
     sel  :in std_logic_vector (1 downto 0); 
     mux_out :out std_logic_vector (7 downto 0)); 
end entity; 

architecture behavior of mux_using_with is 

begin 
with (sel) select 
mux_out <= input(7 downto 0) when '00', 
      input(15 downto 8) when '01', 
      input(23 downto 16) when '10', 
      input(31 downto 24) when others; 
end architecture; 

И если для версии:

library ieee; 
use ieee.std_logic_1164.all; 
entity mux_using_if is 
port (
     input :in std_logic_vector (31 downto 0); 
     sel  :in std_logic_vector (1 downto 0); 
     mux_out :out std_logic_vector (7 downto 0)); 
end entity; 

architecture behavior of mux_using_if is 
begin 
MUX: 
    process (sel, input) begin 
    if (sel = '00') then 
     mux_out <= input(7 downto 0); 
    elsif (sel = '00') then 
     mux_out <= input(15 downto 8); 
    elsif (sel = '00') then 
     mux_out <= input(23 downto 16); 
    else 
     mux_out <= input(31 downto 24);; 
end if; 
end process; 
end architecture; 

ли я сделал какие-либо очевидные ошибки?

+0

Возможный дубликат [Напишите код VHDL для реализации мультика 32: 8] (http://stackoverflow.com/questions/31783362/write-a-vhdl-code-to-implement-a-328-mux) – Peut22

+0

Вы на правильном пути. Если у вас есть 32 бита ввода и 2 бита выбора, у вас есть мультиплексор 4: 1 (x8). Сколько выходных бит? – user1155120

+0

Также обратите внимание, что 'when '0'' должно быть, когда «00» (длина sel равно 2), и оператор select должен покрывать все возможные значения select (это эквивалент - это case case), который, если вы собираетесь синтезировать не нужно ничего делать (используя выбор «другие»). Версия инструкции if не требуется. – user1155120

ответ

1

A 32: 8 выбирает 8 бит из 32 бит. Существует два очевидных способа сделать это (и другие менее очевидные):

  1. Выберите любую непрерывную группу из 8 бит, начиная с любой точки в 32-битном входе, с возможным обтеканием. На самом деле это «баррель». Есть 32 'стартовых' положения, поэтому вам нужен 5-битный селектор; или
  2. Выберите одну из 4 групп [7: 0], [15: 8], [23:16] или [31:24]. В этом случае вам понадобится 2-битный селектор, чтобы выбрать одну из этих групп.

Я собираюсь предположить, что вы хотите (2), поскольку у вас есть двухбитовый селектор. Таким образом, каждый из ваших 8 выходных битов фактически представляет собой мультиплеер 4: 1. Бит 0 выхода выбирает, например, из бит 0, 8, 16 или 24 входа, в зависимости от состояния вашего 2-битного селектора.

Существует 4 простых способа сделать это в VHDL: последовательный оператор case, выбранное назначение сигнала, выбор прямой логики или элемента массива. Есть примеры всех 4 стилей на Maia site. Они имеют только 1-битный вывод, поэтому ваша задача - превратить его в 8-разрядный вывод. Посмотрите и сообщите нам, если у вас есть проблема.

+0

Спасибо. Думаю, я решил это сейчас. – Thomas

+0

Правильно ли переписывать вопрос, или я должен был разместить новый код в качестве ответа? – Thomas

+0

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

Смежные вопросы