Jump to content
DI_m

Vhdl Mux 4 В 1, 8 Bit

Recommended Posts

Здравствуйте! Перейду сразу к делу.

От меня потребовалось написать код VHDL для 8-ми битного мультиплексора 4 в 1.

Сам код написан:

library IEEE;
use IEEE.std_logic_1164.all;
entity mux is
port
(
x1, x2, x3, x4 : in std_logic;
clk :in std_logic_vector(8 downto 0);
out : out std_logic_vector(32 downto 0)
);
end mux;
architecture ttl of mux
begin
process clk
begin
if(clk(0)="0" and clk(1)="0") then out<=x1;
elsif(clk(0)="0" and clk(1)="1") then out<=x2;
elsif(clk(0)="1" and clk(1)="0") then out <=x3;
else out<=x4;
end if;
end process;
end ttl;

Хотелось бы услышать критику, замечания и пожелания, если таковые возникнут.

Указать на ошибки и, если возможно подсказать решения. Потому как в программировании я не силен.

За ранее спасибо!

Share this post


Link to post
Share on other sites

У мультиплексора четыре восьмибитных сигнала на входе должно быть? В коде всё наоборот как-то.

Share this post


Link to post
Share on other sites

Да. 4 восьмибитных. Я решил, что если так, тогда выход должен быть 32-х битным.

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

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

Share this post


Link to post
Share on other sites

Тогда там будет так?

x1, x2, x3, x4 : in std_logic;

clk :in std_logic_vector(1 downto 0);

out : out std_logic_vector(7 downto 0);

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

x1, x2, x3, x4 : in std_logic_vector(7 downto 0);

И clk переименуй, например в out_sel.

Edited by Vascom

Share this post


Link to post
Share on other sites

Большое спасибо!

Получилось следующее:

library IEEE;
use IEEE.std_logic_1164.all;
entity mux is
port
(
x1, x2, x3, x4 : in std_logic_vector(7 downto 0);
out_sel :in std_logic_vector(1 downto 0);
out : out std_logic_vector(7 downto 0)
);
end mux;
architecture ttl of mux
begin
process out_sel
begin
if(out_sel(0)="0" and out_sel(1)="0") then out<=x1;
elsif(out_sel(0)="0" and out_sel(1)="1") then out<=x2;
elsif(out_sel(0)="1" and out_sel(1)="0") then out <=x3;
else out<=x4;
end if;
end process;
end ttl;

Share this post


Link to post
Share on other sites

Как все сложно в VHDL :crazy:

Verilog HDL, один из вариантов...

module BCD_mux_4(
  input wire [1:0] select,
  input wire [3:0] in0,
  input wire [3:0] in1,
  input wire [3:0] in2,
  input wire [3:0] in3,
  output reg [3:0] out);

always @*
case (select)
  2'b00: out = in0;
  2'b01: out = in1;
  2'b10: out = in2;
  2'b11: out = in3;
endcase
endmodule

Edited by NebsteR

Share this post


Link to post
Share on other sites

Да, на Verilog всё гораздо понятнее и нагляднее. Сам на верилоге пишу :)

Хотя по функциональности они равнозначны.

Share this post


Link to post
Share on other sites

library ieee;
use ieee.std_logic_1164.all;
entity mux_cxem_net is
port(A,B,C,D:in std_logic_vector(7 downto 0);
 ADR:in std_logic_vector(1 downto 0);
Y:out std_logic_vector(7 downto 0));
end entity mux_cxem_net;
architecture body_1 of mux_cxem_net is
begin
Y<=A when ADR="00" else
 B when ADR="01" else
C when ADR="10" else
D when ADR="11" else
(others=>'X');
end architecture body_1;
architecture body_2 of mux_cxem_net is
begin
with ADR select
Y<=A when "00",
 B when "01",
C when "10",
D when others;
end architecture body_2;
architecture body_3 of mux_cxem_net is
begin
process(ADR,A,B,C,D)
begin
if ADR="00" then
 Y<=A;
elsif ADR="01" then
Y<=B;
elsif ADR="10" then
Y<=C;
else
Y<=D;
 end if;
end process;
end architecture body_3;
architecture body_4 of mux_cxem_net is
begin
process(ADR,A,B,C,D)
begin
case ADR is
 when "00" => Y <= A;
when "01" => Y <= B;
when "10" => Y <= C;
when others => Y <=D;
end case;
end process;
end architecture body_4;

все четыре архитектурных тела описывают одно и то же-- 8битный мультиплексор 4-1. используйте любое.

Share this post


Link to post
Share on other sites

Продолжим темку, хоть вопрос и не по vhdl, а по verilog...

Есть шина 256 бит, в которой каждые два бита - управление мультиплексором 4->1, которых 128... Как верилогу объяснить, что от него требуется 128 экземпляров подобных мультиплексоров?

...
input wire [255:0] in_sel;
integer i;

always @*
begin
  for (i=0; i<128; i=i+1)
  begin
  case (in_sel[i*2+1:i*2])
	 2'b00: ...
	 2'b01: ...
	 2'b10: ...
	 2'b11: ...
  endcase
  end
end

Вот такого он не понимает, ругается на то, что i - не константа...

Должно быть 128 мультиплексоров, у которых вход выбора - in_sel[1:0] у первого, in_sel[3:2] у второго и т.д. ... in_sel[255:254] у последнего...

Не писать же 128 раз одно и то же, только меняя биты в case?

Share this post


Link to post
Share on other sites

Очень просто. Вот так:

input wire [255:0] in_sel;
genvar i;

generate
for (i=0; i<128; i=i+1)
begin : MUX_4_TO_1
	always @*
	 case (in_sel[i*2+1:i*2])
			 2'b00: ...
			 2'b01: ...
			 2'b10: ...
			 2'b11: ...
	 endcase
end
endgenerate

То есть для этого есть специальная конструкция generate, именно для подобных случаев, когда требуется много однотипных частей, модулей. И, вроде бы, в таком случае обязательно надо задавать имя после begin.

Edited by Vascom

Share this post


Link to post
Share on other sites

Хм, ну-ка, попробуем... С generate я тоже пробовал, но оно ругалось, требовало end после (или вместо :) ) begin и endgenerate... Вероятно, именно имени ему и не хватало, щас проверим :)

Edited by NebsteR

Share this post


Link to post
Share on other sites

Спасибо, отлично работает, занимает ожидаемое кол-во ресурсов и в RTL Viewer'е (Quartus II x64) выглядит тоже ожидаемо :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Jossa
      Доброго времени суток! Есть ли здесь те, кто может помочь разобраться с VHDL? я новичок и хочу понять, что делает этот код. С Вычислением контрольных битов мне удалось разобраться, а что делает процесс (DU)? Всё это дело пишу в aldec active-hdl.
       
      entity xm is port ( DU: IN STD_LOGIC_VECTOR (1 to 7); DC: OUT STD_LOGIC_VECTOR (1 to 7); NOERROR: OUT STD_LOGIC ); end xm; architecture xm of xm is function syndrome (D: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is variable SYN: STD_LOGIC_VECTOR (2 downto 0); begin SYN(0) := D(1) xor D(3) xor D(5) xor D(7); SYN(1) := D(2) xor D(3) xor D(6) xor D(7); SYN(2) := D(4) xor D(5) xor D(6) xor D(7); return(SYN); end syndrome; begin process (DU) variable i: INTEGER; begin DC <= DU; i := CONV_INTEGER(syndrome(DU)); if i = 0 then NOERROR <= '1'; else NOERROR <= '0'; DC(i) <= not DU(i); end if; end process; end xm;  

    • By Brender3000
      Санкт-Петербург.  По цене договоримся легко, но желательно (если с пересылом) такое кол-во сразу прикидывать, чтобы хотя бы примерно, ну от 500 р , Просто из-за 200 р. на почту лень бегать и там еще очередь стоять. Фотки нужных МС пришлю заранее естественно, большая часть в кучу в аттаче.
      Связь или здесь в лс или:
      Ватсап +79117214333
      Вконтакт  https://vk.com/the_working_dead
      Список:
      ====================================
      SSM2166S - усилитель микрофона с настройкой компрессии и подавлением шумов, корпус SOIC-14
      http://www.analog.com/media/en/technical-documentation/data-sheets/SSM2166.pdf
      INA128UA - высокоточный инструментальный ОУ с низким потреблением 700мкА,питание ±2.25 V to ±18 V, корпус SO-8
      http://www.ti.com/lit/ds/symlink/ina129.pdf
      A3964SB - драйвер шагового движка
      https://media.digikey.com/pdf/Data Sheets/Allegro PDFs/3964.pdf
      740L600 - оптопара, TTL-буфер
      http://213.114.131.21/_pdf/74_TTL/74OL6000.pdf
      AQW213EH - сдвоенная оптопара
      https://ru.mouser.com/ds/2/315/panasonic electric works_aqw-dip-current-limiting--1196835.pdf
      HT9200A - генератор тонального сигнала/2.5V~5.5V/3.58MHz/Serial/8 DIP/
      http://www.farnell.com/datasheets/79214.pdf
      RPM6938 - ИК приемник
      https://www.mouser.com/ds/2/348/rpm6900-313874.pdf
      IDT7202LA - асинхронный FIFO на полевиках 1024x9
      https://www.mouser.com/ds/2/464/IDT_7200-7202_DST_20171127-880469.pdf
      PCF7942AT - транспондер и контроллер бесконтактного досутпа
      http://www.ic72.com/pdf_file/p/70131.pdf
      VB027 - высоковольтный драйвер катушек зажигания
      http://pdf.datasheetcatalog.com/datasheet/stmicroelectronics/5589.pdf
       
      SP706-EP - низкопотребляющий контроллер напряжения 4.40V DIP-8
      http://pdf.datasheetcatalog.com/datasheet/sipex/SP708CN.pdf
      DS1013S - 3 линии задержки
      http://www.phenix.bnl.gov/phenix/WWW/muon/muid_fee/whitus/data_sheets/DS1013.pdf
      TCM38C17IDL- 4 канальный ИКМ
      https://media.digikey.com/pdf/Data Sheets/Texas Instruments PDFs/TCM38C17IDL.pdf
      LF398AN - усилитель выборки и хранения
      http://www.ti.com/lit/ds/symlink/lf398-n.pdf
      MAX7408 - эллиптический фильтр низких частот 5 порядка
      https://datasheets.maximintegrated.com/en/ds/MAX7408-MAX7415.pdf
      LXT6234QE - мультиплексор, корпус PQFP-100
      http://www.ic72.com/pdf_file/l/151749.pdf
      2N4012 - n-p-n биполярный транзистор
      http://kazus.ru/datasheets/pdf-data/1946963/NJSEMI/2N4012.html
      M27V160-100FX1 - 16 Mbit (2Mb x8 or 1Mb x16) EEPROM корпус FDIP42WB (с окошком)
      https://ru.mouser.com/ds/2/389/stmicroelectronics_cd00001045-1204542.pdf
      MAX9388EUP - мультиплексор, корпус TSSOP-20
      https://datasheets.maximintegrated.com/en/ds/MAX9386-MAX9388.pdf
      PGA204BU - инструментальный ОУ с настройкой КУ, SOIC-16
      http://www.ti.com/lit/ds/symlink/pga204.pdf
      MAX211EWI -  Трансивер RS-232, SO-28
      https://datasheets.maximintegrated.com/en/ds/MAX200-MAX213.pdf
      ALTERA MAX EPM9320ALC84-10 - ПЛИС
      https://www.altera.com/en_US/pdfs/literature/ds/archives/m9000.pdf



    • Guest Антон
      By Guest Антон
      Доброго времени суток. Нужна помощь с программированием простеньких схем цифровой схемотехники. Нужно на 2 языках написать код+tb. Всего схем около сотни. В них входят мультиплексоры, демультиплексоры, декодеры, счетчики. Естественно не за бесплатно. Это пример самой сложной ( по моему субъективному мнению) схемы.
      По всем вопросам и предложениям можете написать мне на почту tarasov123789@mail.ru
       


    • By MaDiEQ
      При проектировании устройств какие конструкции языка VHDL лучше использовать ?
      1 State machine организовывать как переменную со своим типом state1, state2 ... или можно создать variable state: natural range 0 to (конечное состояние):=0; Какая конструкция будет занимать меньше ресурсов?
      2 Операторы ветвления if else или case?
      3 Если нужен переход по изменению сигнала wait или опять же if?
      4 Как использовать Component / port map? использую только в тестбенче но возможно так вот кодом соединять провода нескольких файлов vhd? хотелось узнать
    • By KumoKairo
      Добрый день.
      Относительно недавно стал увлекаться радиоэлектроникой и в процессе работы возник такой вопрос:
      Есть у меня 16ти разрядный мультиплексор к155кп1, и есть потребность в демультиплексоре. Есть ли возможность использовать этот мультиплексор "наоброт"? В процессе поиска в интернете наткнулся на аналогии с западными микросхемами, там ссылаются на 74150, в описании которого иногда пишут про возможность использования в качестве демультиплексора (так через косую черту и пишут - MUX/DEMUX). Хотелось бы сэкономить время на сборку проверочной схемы (плюс чтобы исключить возможность "порчи" микросхемы) - может кто-то знает точно ответ на этот вопрос?
      Спасибо.
  • Сообщения

    • Схем-то полно в сети. Непонятна сама концепция данной приблуды - одновременная регулировка оборотов десятка вентиляторов одним заданием. Они все в одну точку дуют что-ли? Датчик температуры, получается, один на всех.
    • Ещё вариант на 555 ... http://www.ebastlirna.cz/modules.php?name=News&file=article&sid=199  
    • это по существу не диод, а сам транзистор и есть. Диод же как мы знаем технологический. Надо только не забыть кудато прицепить затвор, чтобы переход случайно и в обратную сторону не открылся. вообще все эти эрзац-диоды шляпа полнейшая. В наши то времена. Вам не кажется?
    • Вот К50-12 как не странно у меня все на отлично! Я их 250 Вольтовых щас покупаю по 100 руб. за коробок! И Вашим диодам цена примерно та же, ну чуть повыше, - за сохран, вид конечно шикарный у них, хоть в Музей!..
    • В тот момент у меня их не было.
    • Зачем вам схема ? Вы в детстве игрушечные машинки разбирали ? Я и свои все переломал и братику успевал.   Зарядка: плюс через резистор порядка 10 ом на плюс аккумулятора. Минус напрямую. Всё это с гнезда зарядки. Подключение: провода с клемм аккумулятора через предохранитель и вкл./выкл. идут на крайние контакты силового двухполюсного переключателя - ваш реверс вперёд/назад. На средние контакты припаиваются провода от мотора. Переключателем  меняется полярность V на двигатель, ему деваться некуда, он крутит вперёд/назад. Предохранитель по рабочему току с неб. запасом, он обязателен. В случае замыкания будет пожар.  Про фары даже писАть нечего. Вот схему на коленке нарисовал.  
    • И на "старуху" бывает проруха.
  • Покупай!

×
×
  • Create New...