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

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

 

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

 

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 выход устанавливался бы в высокоимпендансное состояние

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


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

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

 

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

 

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...

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


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

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

 

Нужно реализовать одноразрядный мультиплексор 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.

 

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


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

Огромное спасибо, Rob! Во всём разобрался, дополнил код, проверил на ModelSim, всё работает, как надо

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


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

20.03.2017 в 00:10, iosifk сказал:

Если выходы мультиплексора не выходят из микросхемы наружу, то задача о 3-м состоянии поставлена неправильно. Внутри ПЛИС 3-е состояние не работает...

А вообще добавьте к выходам трехстабильный буфер и напишите, что при EN == 1 выход будет в Z...

Доброго времени суток! Можете подробнее описать что и как работает? Мне нужно разобраться в этой теме как можно скорее, а я пока никак не могу вникнуть.

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;

зачем нам din и dou если мы их дальше не используем? Разве на их местете не должно быть mux(sel, D, Q)? Что делать, если разрешение En отрицательное? и что означает каждый символ в последней строчке?: assign Q= (en==1'b0) ? D[sel] : 1'bz;

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


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

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

48 minutes ago, RHCP2 said:

Доброго времени суток! Можете подробнее описать что и как работает? Мне нужно разобраться в этой теме как можно скорее, а я пока никак не могу вникнуть.

...  зачем нам din и dou если мы их дальше не используем?

Это просто ошибка copy/paste   должно быть:

module mux (en, sel, din, dou);
  input  wire       en;
  input  wire [2:0] sel;
  input  wire [7:0] din;
  output wire       dou;
  
  assign dou = (en==1'b0) ? din[sel] : 1'bz;
endmodule

 

48 minutes ago, RHCP2 said:

... Разве на их местете не должно быть mux(sel, D, Q)?

На каком месте?  
 

48 minutes ago, RHCP2 said:

и что означает каждый символ в последней строчке? assign Q= (en==1'b0) ? D[sel] : 1'bz;

Ох,  хорошо что это не VHDL, ладно по порядку:
assign  - символ английского (это важно!) алфавита А
assign  - два подряд идущие символа  S, 
assign  - как не странно это символ I
... 
:biggrin:

На самом деле  строка  assign dou = (en==1'b0) ? din[sel] : 1'bz;   состоит из 2 последовательных  mux  -   mux_8to1:  ( tmp = din[sel] )  и  mux_2to1:  dou = (sel==0) ? tmp : 1'bz;  

48 minutes ago, RHCP2 said:

Что делать, если разрешение En отрицательное?

Это как отрицательное ?  равное -1, -1000?  Хотя  в записи условия выбора  (var==value) ? ... : ... ;  вы можете сравнивать var  с любым значением value.  

 

Удачи! Роб.

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


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

7 часов назад, RobFPGA сказал:

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

Это просто ошибка copy/paste   должно быть:


module mux (en, sel, din, dou);
  input  wire       en;
  input  wire [2:0] sel;
  input  wire [7:0] din;
  output wire       dou;
  
  assign dou = (en==1'b0) ? din[sel] : 1'bz;
endmodule

 

На каком месте?  
 

Ох,  хорошо что это не VHDL, ладно по порядку:
assign  - символ английского (это важно!) алфавита А
assign  - два подряд идущие символа  S, 
assign  - как не странно это символ I
... 
:biggrin:

На самом деле  строка  assign dou = (en==1'b0) ? din[sel] : 1'bz;   состоит из 2 последовательных  mux  -   mux_8to1:  ( tmp = din[sel] )  и  mux_2to1:  dou = (sel==0) ? tmp : 1'bz;  

Это как отрицательное ?  равное -1, -1000?  Хотя  в записи условия выбора  (var==value) ? ... : ... ;  вы можете сравнивать var  с любым значением value.  

 

Удачи! Роб.

Доброе утро! Под символами я имел ввиду что например значит 1'bz и откуда взяли z xD, а так же какую роль выполняет "?" и ":".

Насчет отрицательного En могу лишь сказать, что ТЗ задано следующим образом (Вариант 6), и да, там ошибка в Х должно быть (3...0), а в У 6*(3...0) естественно:

image.png

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


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

56 minutes ago, RHCP2 said:

image.png

Такое ощущение, что в вариантах 6 и 7 терминология перепутана. У мультиплексора входы должны быть 6*[3..0], а не выходы. А у демультиплексора наоборот.

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


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

11 минут назад, dimka76 сказал:

Такое ощущение, что в вариантах 6 и 7 терминология перепутана. У мультиплексора входы должны быть 6*[3..0], а не выходы. А у демультиплексора наоборот.

Так и есть, я об этом написал(конкретно про вариант 6) :)

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


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

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

3 hours ago, RHCP2 said:

Доброе утро! Под символами я имел ввиду что например значит 1'bz и откуда взяли z xD, а так же какую роль выполняет "?" и ":".

Правильно заданный вопрос это половина ответа!   Боюсь спросить - это у вас задание на выпускные экзамены :acute: или (все же надеюсь) что вступительные ? 

1'bz - (читается как  один бZик  :biggrin:) обозначает что  выход  с данным уровнем  считается переведенным в 3-тье состояние  - не 0 и не 1, а высокоомное, фактически отключен от остальной части схемы. 

Бывает еще   1'bx  - (что за Херня :biggrin: ) обозначающая  что вход никуда не подключен, а на выход попадает  непонятно что.  При  этом запись 1'b.. говорит что назначается сигнал шириной в 1 бит.  
 

Как интерпретировать + -   в таблице  это все же надо спросить препода который вам такую табличку дал. Может он специально это сделал и ждет хитрец кто из сознательных студентов и за сколько часов до экзамена задаст вопросы по этой непонятке :lol2:

Он же (хитрец) должен был рассказать как работает тернарный оператор ? : Но с этим легче - на крайний случай можно за 5 мин  и в интернете найти что это такое.  

 

Удачи! Rob.

P.S.   термины в скобка помеченные знаком :biggrin: необязательны  к запоминанию. 

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


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

34 минуты назад, RobFPGA сказал:

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

Правильно заданный вопрос это половина ответа!   Боюсь спросить - это у вас задание на выпускные экзамены :acute: или (все же надеюсь) что вступительные ? 

 

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

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


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

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

41 minutes ago, RHCP2 said:

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

Понятно,  то есть книжечка все же у вас есть. А что за книжечка?  Читали?  И что не поняли? 

 

Удачи! Rob.

P.S. А хитрец препод  мониторит небось форум и  смотрит кто и как "самостоятельно" изучает предмет :biggrin: 

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


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

7 часов назад, RobFPGA сказал:

P.S. А хитрец препод  мониторит небось форум и  смотрит кто и как "самостоятельно" изучает предмет :biggrin: 

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

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


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

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

1 minute ago, sorok-odin said:

И ставит себе пометки в блокнотик, что студентам надо разжевывать всё-всё-всё

Если все разжевывать то у студентов повыпадают все "зубы" к выпуску.  Студентов надо учить как грызть гранит науки. А для этого препод тоже должен быть с "зубами".  

Удачи! Rob.

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


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

On 7/10/2020 at 1:19 AM, RobFPGA said:

Это как отрицательное ?  равное -1, -1000?  Хотя  в записи условия выбора  (var==value) ? ... : ... ;  вы можете сравнивать var  с любым значением value.  

Очевидно имеется ввиду положительная/отрицательная логика http://elektro-dox.ru/cif-electr/21.html

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


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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