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

парни помогите не понимаю почему не выполняется условие

 

Имею четыре сигнала 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

 

 

Ниже привожу диаграмму

post-52410-1296569609_thumb.jpg

post-52410-1296570186_thumb.jpg

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

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


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

Почему может не срабатывать такое условие, сигнал data_out всегда стоит 1. Ниже привожу диаграмму

Как связанна диаграмма сия и сигнал data_out ? И две диаграммы даны для симметрии ?? %)

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


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

Почему может не срабатывать такое условие, сигнал data_out всегда стоит 1

Ниже привожу диаграмму

На диаграмме видно, что DATA обновляется, когда ENA==1. У вас в куске проекта не видно ни ENA, ни DATA.

 

И две диаграммы даны для симметрии ?? %)

Это стереокартинка. Недавно обсуждалась в "офтопике" :)

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


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

Как связанна диаграмма сия и сигнал data_out ? И две диаграммы даны для симметрии ?? %)

 

data_out это новый сигнал с выхода тригера, который в зависимости от условия на входе, будет 1 или 0

 

На диаграмме видно, что DATA обновляется, когда ENA==1. У вас в куске проекта не видно ни ENA, ни DATA.

 

DATA и ENA это входные сигналы, с передатчика, и они не имеют особого значения

 

Это стереокартинка. Недавно обсуждалась в "офтопике" :)

 

мне нужжно чтобы когда 4 сигнала принимали значения как в условии if, на выходе сигнал dataout принимал значение 0. Я написал вот такое условие которое приведено выше, но почему оно не работает? Может в констукции if нельзя так писать условие?

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


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

мне нужжно чтобы когда 4 сигнала принимали значения как в условии if, на выходе сигнал dataout принимал значение 0. Я написал вот такое условие которое приведено выше, но почему оно не работает? Может в констукции if нельзя так писать условие?

Конструкция написана криво, но верно. Речь о том, что временная диаграмма не соответствует описанию, или есть какие-то дополнительные условия, неприведенные в описании.

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


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

Гость MHC
Пять к одному ставлю, что на картинке показан входной клок, блокируемый сигналом EN :)

 

Кста, это подтверждается изменением сигнала «DATA» в момент 介 rising_edge(ENA).

ЗЫЖ: плохая практика моделировать модули низкого уровня в behavioral :)

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

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


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

DATA и ENA это входные сигналы, с передатчика, и они не имеют особого значения

А где ж, простите, выходной сигнал, о котором мы ведем беседу?

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


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

Конструкция написана криво, но верно. Речь о том, что временная диаграмма не соответствует описанию, или есть какие-то дополнительные условия, неприведенные в описании.

а в чем именно кривость? 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 провалился в нуль, но по этому условию он не проваливается, а всегда стоит

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


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

а в чем именно кривость? dataout всегда стоит 1, просто на диаграмме он не приведен

но по этому условию он не проваливается, а всегда стоит

 

Выделите проблему в отдельный модуль.

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

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


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

Так покажите, как data_out определен в проекте, и как используется.

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


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

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

 

Вот такой код, не работает конструкция:(

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


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

это правильно?

    output data_in_1;
    output data_in_2;

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


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

это правильно?
    output data_in_1;
    output data_in_2;

Это сделано для того чтобы в удобно было в симуляторе смотреть

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


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

так на эти цепи ничего не приходит.

Делайте не так, как "удобно", а как "положено" :)

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


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

Что за модуль 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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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