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

Vhdl Mux 4 В 1, 8 Bit


DI_m

Рекомендуемые сообщения

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

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

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

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

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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;

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

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

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

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

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

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

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

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

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
Ссылка на комментарий
Поделиться на другие сайты

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

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

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

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

> Правила форума <

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

...это не дым от канифоли, нет... это души умерших транзисторов....

Первый закон Ома: никому не рассказывать про Ома!

Ну вот, а ты говорил ноль...

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
    • Чтобы меньше было излучения, нужно мотать тороидальную. Возможно для повышения добротности по омическому сопротивлению лучше этот ТОР мотать в пару слоев. Если ее намотать на шило, то она вряд ли будет вообще работать как катушка.   Индуктивность прямо пропорциональна площади сечения, которая в свою очередь прямо пропорциональна квадрату диаметра. К тому же индуктивность в обратной пропорции с длиной намотки.
    • Я в ходе отладки выяснил, что сбоит в функции:  void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) При чем поведение очень странное. Отладочные сообщения даже не выводятся в начале функции. В ходе экспериментов понял что связано это с объявлением массивов и решил объявить большие буферы которые на 4КБ и 0.25КБ: uint8_t current_sector_buf[4096]; uint8_t buf[256]; глобально. В оригинале, буферы объявлялись локально в функции. После изменения буквально двух строчек кода, все заработало. Также, в оригинальном проекте было сильно напутано из функциями. Я решил функции выкинуть из main.c и вставить в w25q.c Эти функции: void w25qEraseSector(uint16_t sector) void w25qWritingByUSB(uint32_t dpagenum, uint8_t *bufByUSB) Поиск данной проблемы реально отобрало кучу времени. На будущее буду знать что и такое бывает...
    • есть готовый  драйвер BTS7960 до 43А (долговременно до 10) с шим и все, что нужно и стоит недорого. И не надо изобретать  велосипед. Даже с учетом завышения параметров  уж 5А свободно.
    • А есть внятное описание этого M18? По моему он не очень "интегирируется" с микроконтроллером, да и нужно ли? По схеме выше - подключить его к U1C, выход U1C кинуть на +С12, U1D вообще выкинуть вместе с D1,D2 и R13.
  • Похожий контент

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