Jump to content

    
Sign in to follow this  
MaratZuev

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

Recommended Posts

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Код не эквивалентный. 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;

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

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites

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
;

    

Share this post


Link to post
Share on other sites

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

    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

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

Share this post


Link to post
Share on other sites

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

17 minutes ago, MaratZuev said:

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
12 часов назад, MaratZuev сказал:

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

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

 

Share this post


Link to post
Share on other sites
14 hours ago, MaratZuev said:

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

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

Share this post


Link to post
Share on other sites
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 )

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this