реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос по Verilog, Мультиплексор и высокоимпендансное состояние
SRVS
сообщение Mar 19 2017, 21:02
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 19-03-17
Пользователь №: 95 911



Нужно реализовать одноразрядный мультиплексор 8-в-1 со входом разрешения работы EN. Активный уровень сигнала EN – логический «0». При подаче на вход EN сигнала с уровнем логической «1», выходной сигнал мультиплексора должен устанавливаться в высокоимпедансное состояние.

Вот, что у меня получилось:

CODE
module multiplexor(A, B, C, D0, D1, D2, D3, D4, D5, D6, D7, Q);
input A, B, C, D0, D1, D2, D3, D4, D5, D6, D7;
output Q;
assign Q = ((D0&~A&~B&~C)|(D1&A&~B&~C)|(D2&~A&B&~C)|(D3&~A&~B&C)|(D4&A&B&~C)| (D5&~A&B&C)|(D6&A&~B&C)|(D7&A&B&C|)|(~EN);
endmodule


Подскажите, пожалуйста, как дополнить код, чтобы при EN = 1 выход устанавливался бы в высокоимпендансное состояние
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 19 2017, 21:10
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 450
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(SRVS @ Mar 20 2017, 01:02) *
Нужно реализовать одноразрядный мультиплексор 8-в-1 со входом разрешения работы EN. Активный уровень сигнала EN – логический «0». При подаче на вход EN сигнала с уровнем логической «1», выходной сигнал мультиплексора должен устанавливаться в высокоимпедансное состояние.

Вот, что у меня получилось:

CODE
module multiplexor(A, B, C, D0, D1, D2, D3, D4, D5, D6, D7, Q);
input A, B, C, D0, D1, D2, D3, D4, D5, D6, D7;
output Q;
assign Q = ((D0&~A&~B&~C)|(D1&A&~B&~C)|(D2&~A&B&~C)|(D3&~A&~B&C)|(D4&A&B&~C)| (D5&~A&B&C)|(D6&A&~B&C)|(D7&A&B&C|)|(~EN);
endmodule


Подскажите, пожалуйста, как дополнить код, чтобы при EN = 1 выход устанавливался бы в высокоимпендансное состояние

Если выходы мультиплексора не выходят из микросхемы наружу, то задача о 3-м состоянии поставлена неправильно. Внутри ПЛИС 3-е состояние не работает...
А вообще добавьте к выходам трехстабильный буфер и напишите, что при EN == 1 выход будет в Z...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
RobFPGA
сообщение Mar 19 2017, 21:41
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 883
Регистрация: 23-12-04
Пользователь №: 1 643



Приветствую!

Цитата(SRVS @ Mar 20 2017, 00:02) *
Нужно реализовать одноразрядный мультиплексор 8-в-1 со входом разрешения работы EN. Активный уровень сигнала EN – логический «0». При подаче на вход EN сигнала с уровнем логической «1», выходной сигнал мультиплексора должен устанавливаться в высокоимпедансное состояние.

Вот, что у меня получилось:
assign Q = ((D0&~A&~B&~C)|(D1&A&~B&~C)|(D2&~A&B&~C)|(D3&~A&~B&C)|(D4&A&B&~C)| (D5&~A&B&C)|(D6&A&~B&C)|(D7&A&B&C|)|(~EN);
...
Подскажите, пожалуйста, как дополнить код, чтобы при EN = 1 выход устанавливался бы в высокоимпендансное состояние

Похвальное трудолюбие! Но если надо сделать мультиплексор на 128 входов?
Код
module mux (sel, din, dou);
input  wire          en;
input   wire [2:0] sel;
input   wire [7:0] D;
output wire       Q;

assign Q= (en==1'b0) ? D[sel] : 1'bz;

Но если препод требует чтобы порты обязательно были A,B,C... то
Код
...
wire [7:0] din_i;
wire [2:0] sel_i;
assign din_i={D7,D6,D5,D4,D3,D2,D1,D0};
assign sel_i={C,B,A};
assign Q= (en==1'b0) ? din_i[sel_i] : 1'bz;
...

Но тогда он может заподозрить неладное и готовьтесь что придется объяснять что за магия со скобками.

Удачи! Rob.
Go to the top of the page
 
+Quote Post
SRVS
сообщение Вчера, 16:40
Сообщение #4





Группа: Новичок
Сообщений: 2
Регистрация: 19-03-17
Пользователь №: 95 911



Огромное спасибо, Rob! Во всём разобрался, дополнил код, проверил на ModelSim, всё работает, как надо
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd March 2017 - 20:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016