14 сообщений в этой теме

DI_m    0

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

От меня потребовалось написать код 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;

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

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

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

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


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

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

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


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

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

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


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

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

  • Одобряю 1

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


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

Найдите миллионы труднодоступных

электронных компонентов

DI_m    0

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

x1, x2, x3, x4 : in std_logic;

clk :in std_logic_vector(1 downto 0);

out : out std_logic_vector(7 downto 0);

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


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

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

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

Изменено пользователем Vascom

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


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

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

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

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;

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


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

Как все сложно в 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

Изменено пользователем NebsteR

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


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

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

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

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


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

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. используйте любое.

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


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

Продолжим темку, хоть вопрос и не по 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?

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


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

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

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.

Изменено пользователем Vascom

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


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

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

Изменено пользователем NebsteR

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


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

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

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: 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



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


    • Автор: 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? хотелось узнать
    • Автор: KumoKairo
      Добрый день.
      Относительно недавно стал увлекаться радиоэлектроникой и в процессе работы возник такой вопрос:
      Есть у меня 16ти разрядный мультиплексор к155кп1, и есть потребность в демультиплексоре. Есть ли возможность использовать этот мультиплексор "наоброт"? В процессе поиска в интернете наткнулся на аналогии с западными микросхемами, там ссылаются на 74150, в описании которого иногда пишут про возможность использования в качестве демультиплексора (так через косую черту и пишут - MUX/DEMUX). Хотелось бы сэкономить время на сборку проверочной схемы (плюс чтобы исключить возможность "порчи" микросхемы) - может кто-то знает точно ответ на этот вопрос?
      Спасибо.
    • Автор: Werq
      Прошу помощи , как средствами языка VHDL , управлять вот таким вот 7ми сегментным индикатором.

  • Сообщения

    • Реверс - меняет каналы местами, левый \ правый - один канал раскидывает на обе колонки. P.S. Дизайнеру или как их тогда называли - 10 лет расстрела за такую гнусную морду.
    • Посчитать то я могу  - а раз можете посчитать, зачем задавать глупые вопросы? Я дал Вам критерий определения пригодности сердечника. Вполне простой и понятный. Берёте линейку и калькулятор, и находите произведение площадей. Если меньше 120-ти - не пригоден. Больше или равно - пригоден. Это что, настолько недоступно? А, если доступно, то давайте и Вы, "без пены". 
    • Ох, уж, эти сельские электрики. Вот опять новый термин, "от Василича" - Линейная верхняя полка. А нижняя какая? Нелинейная, что ли? Меандр, Василичь, это всегда и везде, периодический сигнал - сумма бесконечного ряда синусоидальных нечётных гармоник, с уменьшающейся, по определённомку закону, амплитудой. А раз это периодический сигнал (набор синусоид), то и резец, и пластинка, и игла,  и динамик смогут воспроизвести меандр. Понятно, не идеально. С конечной точностью. Как и всё в этом мире. Любая система, будь то резец или транзисторный усилитель, имеют конечную скорость нарастания сигнала (перемещения) и ограниченный, с двух сторон, частотный частотный диапазон. Это и делает меандр на выходе менее "меандровым", чем на входе. Василичь? Откуда ты такие бредовые цифры высасываешь? Говоришь, с интернетом любой профессор? По ходу тебе даже интернет помочь не способен. Открыл бы Википедию, что ли. 48.3, Василичь, а не  60 - 80! И, это, при учёте бесконечного числа гармоник. Впрочем, если учесть, скажем, первые 200 (меандр 100 Гц, полоса 20 кГц), то Кг уменьшится ненамного - до 48 %. Даже для 1-го кГц (20 гармоник), будет 47%.  Про сделать "лабораторку", которыми ты тут хвалишься, просто молчу. Зачем? "Ребята" всё схавают. 
    • Это ж Америка 60-х! Картон и контакты. Это реле на выходные сетевые розетки. 5А макс. и 500Вт максимум общей. Да, ТО-3. Не видно, какие. Сверху на крышках ничего не написано. Сбоку не видно. Все оригинальные комплектующие 65г. В схему особо не вникал, но банки по 2200мкФ 100В. 2шт. вместе запараллелены, на них 100В и на двух по 50В. На 2-х коллекторах по 100В, на 2-х других по 50В.  Так что +/-50В. Квази-комплементарный выход. Радиаторы изолированы. На малом сигнале еле тёплые. Реле на выходе нет.  Переходной процесс при включении в колонках. При  выключении ничего не слышно особо. Без сигнала в колонках тихо, только ВЧ чуть шумят. Со 100В резистором гасится 76В 40мА на стабилитрон 24В для лампочки (зелёной) индикации ТБ и фильтров. Кнопки под крышкой.
      Со 100В гасится 52В 17-19мА на это пресловутое картонное реле. Жесть, в общем. Кстати - не понятно назначение некоторых положений переключателя режима.
      Стерео и моно понятно, а вот реверс и правый, левый - нет. При переключении ничего особо не меняется. Чуть заметно что-то на реверсе только.
    • Допустим проблема диалога брелок -приемник   Есть чем посмотреть что брелок вещает приемнику при нажатии на кнопку?
    • не страшно, иди копать ЯМЫ, разгружать ВАГОНЫ и т.п., а ремонтом и обслуживанием ПРОМЭЛ займутся те, кто в этом специалист ... и , поверь, их услуги - не дешевы.   забудь, если не авторизован и не дилер.
    • чушь, бред, гадание, жажда халявы ...   Просто к мастеру или за новой. Ремонта "по словам и фото" - не будет, да и не готов ты к нему.