ecs 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 (изменено) · Жалоба парни помогите не понимаю почему не выполняется условие Имею четыре сигнала line_a_1 line_a_2 line_b_1 line_b_2, ниже простое условие always@ (posedge clk) begin if ((line_a_1 == 0) && (line_a_2 == 0) && (line_b_1 == 1) && (line_b_2 == 1)) begin data_out = 'b0; end else begin data_out = 'b1; end end Почему может не срабатывать такое условие, сигнал data_out всегда стоит 1 Ниже привожу диаграмму Изменено 1 февраля, 2011 пользователем ecs Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Почему может не срабатывать такое условие, сигнал data_out всегда стоит 1. Ниже привожу диаграмму Как связанна диаграмма сия и сигнал data_out ? И две диаграммы даны для симметрии ?? %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Почему может не срабатывать такое условие, сигнал data_out всегда стоит 1 Ниже привожу диаграмму На диаграмме видно, что DATA обновляется, когда ENA==1. У вас в куске проекта не видно ни ENA, ни DATA. И две диаграммы даны для симметрии ?? %) Это стереокартинка. Недавно обсуждалась в "офтопике" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecs 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Как связанна диаграмма сия и сигнал data_out ? И две диаграммы даны для симметрии ?? %) data_out это новый сигнал с выхода тригера, который в зависимости от условия на входе, будет 1 или 0 На диаграмме видно, что DATA обновляется, когда ENA==1. У вас в куске проекта не видно ни ENA, ни DATA. DATA и ENA это входные сигналы, с передатчика, и они не имеют особого значения Это стереокартинка. Недавно обсуждалась в "офтопике" :) мне нужжно чтобы когда 4 сигнала принимали значения как в условии if, на выходе сигнал dataout принимал значение 0. Я написал вот такое условие которое приведено выше, но почему оно не работает? Может в констукции if нельзя так писать условие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба мне нужжно чтобы когда 4 сигнала принимали значения как в условии if, на выходе сигнал dataout принимал значение 0. Я написал вот такое условие которое приведено выше, но почему оно не работает? Может в констукции if нельзя так писать условие? Конструкция написана криво, но верно. Речь о том, что временная диаграмма не соответствует описанию, или есть какие-то дополнительные условия, неприведенные в описании. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость MHC 1 февраля, 2011 Опубликовано 1 февраля, 2011 (изменено) · Жалоба Пять к одному ставлю, что на картинке показан входной клок, блокируемый сигналом EN :) Кста, это подтверждается изменением сигнала «DATA» в момент 介 rising_edge(ENA). ЗЫЖ: плохая практика моделировать модули низкого уровня в behavioral :) Изменено 1 февраля, 2011 пользователем MHC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба DATA и ENA это входные сигналы, с передатчика, и они не имеют особого значения А где ж, простите, выходной сигнал, о котором мы ведем беседу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecs 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Конструкция написана криво, но верно. Речь о том, что временная диаграмма не соответствует описанию, или есть какие-то дополнительные условия, неприведенные в описании. а в чем именно кривость? dataout всегда стоит 1, просто на диаграмме он не приведен Кста, это подтверждается изменением сигнала «DATA» в момент 介 rising_edge(ENA). ЗЫЖ: плохая практика моделировать модули низкого уровня в behavioral :) вообщем про сигналы DATA(данные) и ENA(строб данных), это входные данные которые подаются на передатчик, а передатчик уже посылает эти данные по своему 1 проводному интерфейсу. В данном проекте, эти данные нужны только да передатчика, он подключен, как отдельный файл. А где ж, простите, выходной сигнал, о котором мы ведем беседу? dataout не показан на рисунке, он всегда стоит единицей Вся петрушка, с передатчика выходят 2 провода line_a_1 и line_a_2, старт посылки отслеживается одновременно на 2х проводах выглядит он как один такт стоит 1 а следующий такт 0 сигналы line_b_1 и line_b_2 это теже самые сигналы как line_a_1 и line_a_2 только задержанные на такт, и вот на диаграмме у меня в момент обозначенный красным кругом, эти сигналы принимают нужные значения, и нужно чтобы сигнал dataout провалился в нуль, но по этому условию он не проваливается, а всегда стоит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба а в чем именно кривость? dataout всегда стоит 1, просто на диаграмме он не приведен но по этому условию он не проваливается, а всегда стоит Выделите проблему в отдельный модуль. Промоделируйте, задав входные воздействия как на диаграмме. И покажите реакцию на входные воздействия. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Так покажите, как data_out определен в проекте, и как используется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecs 0 2 февраля, 2011 Опубликовано 2 февраля, 2011 · Жалоба module verilog_reciv(clk,ena,data_in,data_in_1,data_in_2,data_out,line_1_in,line_2_in); parameter size = 8; input [size-1:0] data_in; input clk, ena; output data_in_1; output data_in_2; output data_out; // test output line_1_in; output line_2_in; reg data_out; reg line_1_in; reg line_2_in; wire data_in_1; wire data_in_2; verilog_test #(size) D1(clk,ena,data_in,data_in_1,data_in_2); // ïåðåäàò÷èê always@ (posedge clk) begin line_1_in = data_in_1; line_2_in = data_in_2; if (((line_1_in == 1) && (line_2_in == 1)) && ((data_in_1 == 0) && (data_in_2 == 0))) //begin data_out = 'b0; //end else //begin data_out = 'b1; //end end endmodule Вот такой код, не работает конструкция:( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 февраля, 2011 Опубликовано 2 февраля, 2011 · Жалоба это правильно? output data_in_1; output data_in_2; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecs 0 2 февраля, 2011 Опубликовано 2 февраля, 2011 · Жалоба это правильно? output data_in_1; output data_in_2; Это сделано для того чтобы в удобно было в симуляторе смотреть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 2 февраля, 2011 Опубликовано 2 февраля, 2011 · Жалоба так на эти цепи ничего не приходит. Делайте не так, как "удобно", а как "положено" :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 2 февраля, 2011 Опубликовано 2 февраля, 2011 · Жалоба Что за модуль D1? Триггер? Что за выходы data_in_1,data_in_2 и если 8 триггеров, то почему одноразрядные? Для чего здесь используете именно блокирующее присваивание, может в нем дело: always@ (posedge clk) begin line_1_in = data_in_1; line_2_in = data_in_2; if (((line_1_in == 1) && (line_2_in == 1)) && ((data_in_1 == 0) && (data_in_2 == 0))) data_out = 'b0; else data_out = 'b1; end Я б для данного случая переписал так: always @(posedge clk) begin line_1_in <= data_in_1; line_2_in <= data_in_2; if (line_1_in&line_2_in&~data_in_1&~data_in_2) data_out <= 1'b0; else data_out <= 1'b1; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться