DI_m Опубликовано 17 марта, 2013 Поделиться Опубликовано 17 марта, 2013 Здравствуйте! Перейду сразу к делу. От меня потребовалось написать код 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; Хотелось бы услышать критику, замечания и пожелания, если таковые возникнут. Указать на ошибки и, если возможно подсказать решения. Потому как в программировании я не силен. За ранее спасибо! 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 17 марта, 2013 Поделиться Опубликовано 17 марта, 2013 У мультиплексора четыре восьмибитных сигнала на входе должно быть? В коде всё наоборот как-то. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
DI_m Опубликовано 17 марта, 2013 Автор Поделиться Опубликовано 17 марта, 2013 Да. 4 восьмибитных. Я решил, что если так, тогда выход должен быть 32-х битным. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Vascom Опубликовано 17 марта, 2013 Поделиться Опубликовано 17 марта, 2013 Нет, мультиплексор это четыре восьмибитных входа и один восьмибитный выход. Какой из входных сигналов попадёт на выход определяется управляющим сигналом, в данном случае двухбитным. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
DI_m Опубликовано 17 марта, 2013 Автор Поделиться Опубликовано 17 марта, 2013 Тогда там будет так? x1, x2, x3, x4 : in std_logic; clk :in std_logic_vector(1 downto 0); out : out std_logic_vector(7 downto 0); 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 17 марта, 2013 Поделиться Опубликовано 17 марта, 2013 (изменено) x1, x2, x3, x4 : in std_logic_vector(7 downto 0); И clk переименуй, например в out_sel. Изменено 17 марта, 2013 пользователем Vascom 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
DI_m Опубликовано 17 марта, 2013 Автор Поделиться Опубликовано 17 марта, 2013 Большое спасибо! Получилось следующее: 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; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
NebsteR Опубликовано 17 марта, 2013 Поделиться Опубликовано 17 марта, 2013 (изменено) Как все сложно в VHDL 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 Изменено 17 марта, 2013 пользователем NebsteR 0 > Правила форума < ...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике... ...это не дым от канифоли, нет... это души умерших транзисторов.... Первый закон Ома: никому не рассказывать про Ома! Ну вот, а ты говорил ноль... Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 18 марта, 2013 Поделиться Опубликовано 18 марта, 2013 Да, на Verilog всё гораздо понятнее и нагляднее. Сам на верилоге пишу Хотя по функциональности они равнозначны. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
BFGr Опубликовано 25 марта, 2013 Поделиться Опубликовано 25 марта, 2013 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. используйте любое. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
NebsteR Опубликовано 31 марта, 2013 Поделиться Опубликовано 31 марта, 2013 Продолжим темку, хоть вопрос и не по 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? 0 > Правила форума < ...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике... ...это не дым от канифоли, нет... это души умерших транзисторов.... Первый закон Ома: никому не рассказывать про Ома! Ну вот, а ты говорил ноль... Ссылка на комментарий Поделиться на другие сайты Поделиться
Vascom Опубликовано 31 марта, 2013 Поделиться Опубликовано 31 марта, 2013 (изменено) Очень просто. Вот так: 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. Изменено 31 марта, 2013 пользователем Vascom 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
NebsteR Опубликовано 31 марта, 2013 Поделиться Опубликовано 31 марта, 2013 (изменено) Хм, ну-ка, попробуем... С generate я тоже пробовал, но оно ругалось, требовало end после (или вместо ) begin и endgenerate... Вероятно, именно имени ему и не хватало, щас проверим Изменено 31 марта, 2013 пользователем NebsteR 0 > Правила форума < ...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике... ...это не дым от канифоли, нет... это души умерших транзисторов.... Первый закон Ома: никому не рассказывать про Ома! Ну вот, а ты говорил ноль... Ссылка на комментарий Поделиться на другие сайты Поделиться
NebsteR Опубликовано 31 марта, 2013 Поделиться Опубликовано 31 марта, 2013 Спасибо, отлично работает, занимает ожидаемое кол-во ресурсов и в RTL Viewer'е (Quartus II x64) выглядит тоже ожидаемо 0 > Правила форума < ...из древних времен доходят до нас слухи о колдунах и волшебниках... - кто бы мог подумать, что так может начинаться дипломная работа по радиотехнике... ...это не дым от канифоли, нет... это души умерших транзисторов.... Первый закон Ома: никому не рассказывать про Ома! Ну вот, а ты говорил ноль... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.