judchin 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Добрый день! Понадобился дешифратор 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 Результат такой же! в чем проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rundll 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Все нормально, эти "иголки" возникают в результате переходных процессов после которых сигналы принимают устойчивое состояние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Все нормально, эти "иголки" возникают в результате переходных процессов после которых сигналы принимают устойчивое состояние. Можно добиться красивой картинки без иголок. Если провести функциональное моделирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
judchin 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба По фронтам будут запускаться последовательно другие модули. Из-за "иголок" другие модули будут запускаться не в свое время! Как их убрать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serhiy_UA 1 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Как их убрать? противогоночное кодирование, код Грея для этого, всегда выручал ... Опишите условия и окружение этого узла: всему свое решение... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rundll 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Если в системе есть тактовый сигнал, можно привязаться к нему. Поставьте триггеры на выходах сигналов, тем самым устранив метастабильные состояния. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Единственно верное решение избавиться от иголок - тактируемая схема, синхронно изменяющая все свои сигналы - выходные, промежуточные... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 14 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Собственно попадался на этом. На выходе счетчика было несколько лигических элементов. С одного из элементов счетчик загружался заданным значением. Не работало. Сразу после каждого счетного импульса на выходах счетчика какое то время бегало все что угодно. Выходов два - или многофазная синхронизация , ну, по крайней мере, двухфазная или, если схеме не очень сложная, можно костыль подставить в виде локальной задержки разрешения работы схемы , которая с дешифратора берет данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба Можно добиться красивой картинки без иголок. Если провести функциональное моделирование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superpriz 0 10 февраля, 2011 Опубликовано 10 февраля, 2011 · Жалоба judchin , расскажите, пожалуйста, как вы моделировали? Какие-то особые условия задавали, например, задержки? Судя по диаграмме, то задержки учитываются. Я сам начинающий, засимулировал эту схему, но в Xilinx ISE и у меня все ОК, без всяческих иголок, но я сделал самый простой тест. initial begin Ain = 0; Ein = 1; #100; forever #5 Ain = Ain + 1; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба judchin , расскажите, пожалуйста, как вы моделировали? Какие-то особые условия задавали, например, задержки? Судя по диаграмме, то задержки учитываются. Я сам начинающий, засимулировал эту схему, но в Xilinx ISE и у меня все ОК, без всяческих иголок, но я сделал самый простой тест. initial begin Ain = 0; Ein = 1; #100; forever #5 Ain = Ain + 1; end Увы, но такой код не синтезируется.... У меня на сайте в разделе статьи - "Краткий курс HHL"... На днях выложил раздел о асинхронных частотах и сбросах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superpriz 0 11 февраля, 2011 Опубликовано 11 февраля, 2011 · Жалоба iosifk, прошу прощения, "такой код не сентизируется" это Вы про мой тестбенч? С этим согласен, на то он и тестбенч. Меня интересовал как раз код тестбенча при котором появляются иголки указанные на диаграмме judchin. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sleep 0 18 февраля, 2011 Опубликовано 18 февраля, 2011 · Жалоба Это плата за асинхронность схемы. На синтезированном варианте с ненулевыми задержками ситуация может быть еще "интереснее" : ) Все решения уже описаны выше: Для убирания подобных "просечек" нужно делать не чисто комбинационную схему, а синхронную со "срезами" в нужных местах. Если возможно изменение нескольких разрядов в шине одновременно - то нужно использовать код Грея. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
POVRU 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 (изменено) · Жалоба А запись типа 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 :maniac: не сбивайте человека он хочет понять... Изменено 23 февраля, 2011 пользователем PVL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться