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

Эквивалентны ли два модуля?

Доброго всем.

Прошу простить за кому-то очевидный вопрос, но мне хотел бы прояснить...
Я переписал доставшийся мне по наследству кусок кода

always_ff @(posedge clk_orig or posedge RST_orig)
    if (RST_orig) count_echo_orig <= 2'h0;
    else if (end_frame_orig)
             if (TSR_orig) count_echo_orig <= 2'h0;
             else if (count_echo_orig <= 2'd2) count_echo_orig <= count_echo_orig + 2'd1;

В таком виде:

    always @(posedge clk_cmp or posedge RST_cmp)
        count_echo_cmp <= RST_cmp ? 2'h0 : end_frame_cmp && TSR_cmp ? 2'h0 : count_echo_cmp <= 2'd2 ? count_echo_cmp + 2'd1 : count_echo_cmp;

Но гложут сомнения, что не всё чисто.

Попробовал спросить Quartus RTL-Viewer отобразить всё сразу:

module cmp (
    input logic clk_orig, clk_cmp,
    input logic RST_orig, RST_cmp,
    input logic end_frame_orig, end_frame_cmp,
    input logic TSR_orig, TSR_cmp,
    output logic [1:0] count_echo_orig, count_echo_cmp
);

    always_ff @(posedge clk_orig or posedge RST_orig)
        if (RST_orig) count_echo_orig <= 2'h0;
        else if (end_frame_orig)
             if (TSR_orig) count_echo_orig <= 2'h0;
             else if (count_echo_orig <= 2'd2) count_echo_orig <= count_echo_orig + 2'd1;
            
    always @(posedge clk_cmp or posedge RST_cmp)
        count_echo_cmp <= RST_cmp ? 2'h0 : end_frame_cmp && TSR_cmp ? 2'h0 : count_echo_cmp <= 2'd2 ? count_echo_cmp + 2'd1 : count_echo_cmp;
        
endmodule : cmp  

Но то, что я увидел

Clipboard01.thumb.png.654adc29b13804f7352eb493233c730e.png

сразу понять не могу: то это или не то. Посему прошу помощи зала ..

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


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

1. проверка по RTL-Viewer это как гадание на кофейной гуще, особенно с учетом того факта, что у квартуса он, мягко говоря, оторван от железа и это именно Register Transfer Level Viewer.

2. Автору первого кода мозг вправить на предмет более читаемого Coding Styles

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

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


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

В текстовом редакторе строки экономите? =) Их там в запасе много. Вечером на половине такой конструкции уже внимание теряется. Так вроде сходу одинаково

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


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

Код не эквивалентный. 2й должен быть таким:

always @(posedge clk_cmp or posedge RST_cmp)
        count_echo_cmp <= RST_cmp ? 2'h0 : end_frame_cmp && TSR_cmp ? 2'h0 : end_frame_orig && count_echo_cmp <= 2'd2 ? count_echo_cmp + 2'd1 : count_echo_cmp;

Но писать так не стоит :)

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


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

Как по мне, так первый вариант кода лучше.Сделать нормальное форматирование. Добавить чутка комментариев - и будет норм. Второй вариант - абсолютно нечитаем. Чем проще написано - тем лучше читать и сопровождать. Есть даже принцип кодинга - KISS https://ru.wikipedia.org/wiki/KISS_(принцип)

 

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


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

count_echo_orig <= 
    RST_cmp ? 
        2'h0 
    : end_frame_orig ? 
        TSR_orig ? 
            2'h0 
        : count_echo_orig <= 2'd2 ? 
            count_echo_orig + 2'd1 
        : count_echo_orig
    : count_echo_orig
;

    

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


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

"Причесал" исходный код насколько возможно согласно воззрениям большинства:

    always_ff @(posedge clk_cmp or posedge RST_cmp)
        if (RST_cmp) 
            count_echo_cmp <= 2'h0;
        else if (end_frame_cmp)
                if (TSR_cmp) 
                    count_echo_cmp <= 2'h0;
                else if (count_echo_cmp <= 2'd2) 
                         count_echo_cmp <= count_echo_cmp + 2'd1;
             else count_echo_cmp <= count_echo_cmp;

И RTL-Viewer показал то, что требовалось:

Clipboard02.thumb.png.9170b9d60979b578f4aefb68c872c6a2.png

Но вот вопрос: если у меня не код, а два чёрных ящика: как мне понять, эквивалентны ли они или нет?

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


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

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

17 minutes ago, MaratZuev said:

Но вот вопрос: если у меня не код, а два чёрных ящика: как мне понять, эквивалентны ли они или нет?

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

Удачи! Rob.

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


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

Два черных ящика можно сравнить только по интерфейсам. А два куска кода сравнить ... вообще это называется LEC - logical equivalence check, и для этой процедуры есть специальные тулы (conformal, formality и т.д.).

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

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


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

Проблема сопоставления кода всегда включает в себя человеческий фактор, поэтому только formality и ему подобное.

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


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

12 часов назад, MaratZuev сказал:

"Причесал" исходный код насколько возможно согласно воззрениям большинства

К какому if относится последний else?

 

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


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

14 hours ago, MaratZuev said:

"Причесал" исходный код насколько возможно согласно воззрениям большинства:

уже лучше, но лет через 5, вам придет понимание, что рекомендация, а в некоторых, корпоративных случаях, обязательное требование использования операторных скобок, имеет под собой веские основания)

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


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

On 2/1/2020 at 8:06 AM, andrew_b said:

К какому if относится последний else?

Правильный вопрос. Посыпаю голову. Недописал.

On 2/1/2020 at 9:41 AM, des00 said:

уже лучше, но лет через 5, вам придет понимание, что рекомендация, а в некоторых, корпоративных случаях, обязательное требование использования операторных скобок, имеет под собой веские основания)

Да мне уже сейчас пришло, судя по выше"скорректированному"мною коду и комментарию вашему и вопросу andrew_b )

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


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

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

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

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

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

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

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

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

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

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