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

Гонки в комбинаторной логике

Добрый день!

 

Понадобился дешифратор 3->8, взял пример программы отсюда: http://www.dsol.ru/stud/book7/chapter6/page6_03.html

 

module decode (Ain, En, Yout);

input En;

input [2:0] Ain;

output [7:0] Yout;

reg [7:0] Yout;

always @(En or Ain)

begin

if (!En)

Yout = 8'b0;

else

case (Ain)

3'b000 : Yout = 8'b00000001;

3'b001 : Yout = 8'b00000010;

3'b010 : Yout = 8'b00000100;

3'b011 : Yout = 8'b00001000;

3'b100 : Yout = 8'b00010000;

3'b101 : Yout = 8'b00100000;

3'b110 : Yout = 8'b01000000;

3'b111 : Yout = 8'b10000000;

default : Yout = 8'b00000000;

endcase

end

endmodule

 

Все бы хорошо, но только иногда возникают непонятные "иголки" (см. рисунок).

переписал по-своему:

 

module Desh_3__ (in, t);

input wire [2:0] in;

output wire [7:0] t;

assign t[0] = ~(in[0] | in[1] | in[2]);

assign t[1] = ~(~in[0] | in[1] | in[2]);

assign t[2] = ~(in[0] | ~in[1] | in[2]);

assign t[3] = in[0] & in[1] & ~in[2];

assign t[4] = ~(in[0] | in[1] | ~in[2]);

assign t[5] = in[0] & ~in[1] & in[2];

assign t[6] = ~in[0] & in[1] & in[2];

assign t[7] = in[0] & in[1] & in[2];

endmodule

 

Результат такой же!

в чем проблема?

 

 

post-38493-1297335489_thumb.jpg

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


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

 

Все нормально, эти "иголки" возникают в результате переходных процессов после которых сигналы принимают устойчивое состояние.

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


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

Все нормально, эти "иголки" возникают в результате переходных процессов после которых сигналы принимают устойчивое состояние.

 

Можно добиться красивой картинки без иголок. Если провести функциональное моделирование.

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


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

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

Из-за "иголок" другие модули будут запускаться не в свое время!

 

Как их убрать?

 

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


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

Как их убрать?

противогоночное кодирование, код Грея для этого, всегда выручал ...

 

Опишите условия и окружение этого узла: всему свое решение...

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


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

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

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


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

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

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


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

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

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


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

Можно добиться красивой картинки без иголок. Если провести функциональное моделирование.

 

:lol:

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


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

judchin , расскажите, пожалуйста, как вы моделировали? Какие-то особые условия задавали, например, задержки? Судя по диаграмме, то задержки учитываются. Я сам начинающий, засимулировал эту схему, но в Xilinx ISE и у меня все ОК, без всяческих иголок, но я сделал самый простой тест.

initial
  begin
    Ain = 0;
    Ein = 1;
    #100;
    forever #5 Ain = Ain + 1;
  end

 

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


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

judchin , расскажите, пожалуйста, как вы моделировали? Какие-то особые условия задавали, например, задержки? Судя по диаграмме, то задержки учитываются. Я сам начинающий, засимулировал эту схему, но в Xilinx ISE и у меня все ОК, без всяческих иголок, но я сделал самый простой тест.

initial
  begin
    Ain = 0;
    Ein = 1;
    #100;
    forever #5 Ain = Ain + 1;
  end

Увы, но такой код не синтезируется....

У меня на сайте в разделе статьи - "Краткий курс HHL"... На днях выложил раздел о асинхронных частотах и сбросах...

 

 

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


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

iosifk, прошу прощения, "такой код не сентизируется" это Вы про мой тестбенч? С этим согласен, на то он и тестбенч. Меня интересовал как раз код тестбенча при котором появляются иголки указанные на диаграмме judchin.

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


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

Это плата за асинхронность схемы. На синтезированном варианте с ненулевыми задержками ситуация может быть еще "интереснее" : )

Все решения уже описаны выше:

Для убирания подобных "просечек" нужно делать не чисто комбинационную схему, а синхронную со "срезами" в нужных местах.

Если возможно изменение нескольких разрядов в шине одновременно - то нужно использовать код Грея.

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


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

А запись типа

output [7:0] VECT;

input [2:0] N;

assign VECT=1<<N;

 

Разве не является таким же декодером?

 

а иголки убираются просто

 

input CLK;

input [2:0] N;

output reg [7:0] VECT;

initial

VECT=8'h0;

always@(posedge CLK)

begin

VECT<=1<<N;

end

 

:lol:

:maniac:

не сбивайте человека он хочет понять...

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

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


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

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

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

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

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

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

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

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

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

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