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

В чём смысл такого сравнения?

Всем добра.

Продолжаю разбирать чужое добро и наткнулся на такой кусок кода:

input [25:0] a_cpu;
input cs_cpu;
reg ena;

always @(negedge cs_cpu)
    if (a_cpu[21:0] >= 22'h0)
        ena <= 1'b1;
    else
        ena <= 1'b0;

Не понятно, а что: возможны варианты, когда if отработает по ветви a_cpu[21:0] < 22'h0 ? 

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


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

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

8 minutes ago, MaratZuev said:

Не понятно, а что: возможны варианты, когда if отработает по ветви a_cpu[21:0] < 22'h0 ? 

В симуляторе запросто   -  любой бит a_cpu  может быть равен X или Z.

Удачи! Rob.

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


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

9 minutes ago, MaratZuev said:

Всем добра.

Продолжаю разбирать чужое добро и наткнулся на такой кусок кода:


input [25:0] a_cpu;
input cs_cpu;
reg ena;

always @(negedge cs_cpu)
    if (a_cpu[21:0] >= 22'h0)
        ena <= 1'b1;
    else
        ena <= 1'b0;

Не понятно, а что: возможны варианты, когда if отработает по ветви a_cpu[21:0] < 22'h0 ? 

a_cpu[21:0] = 'U' или 'Z' может быть?

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


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

Судя по коду, просто предположение 

Вход со знаком, там еще 4 бита висит, и возможно автор кода сделал ошибку при проверке на отрицательные числа или что-то еще.

Было явно указано 22 бита, при 26-ти битном входе, без использования кастинга.

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


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

`timescale 1ns / 1ns

module cmp;

    reg [25:0] a_cpu;
    reg cs_cpu;
    reg ena;

    always @(negedge cs_cpu)
            if (a_cpu[21:0] >= 22'h0)
                ena <= 1'b1;
            else
                ena <= 1'b0;
    
    initial begin
        cs_cpu = 1'b0;
        forever #10 cs_cpu = ~cs_cpu;
    end
    
    initial begin
        #5 a_cpu  = 25'h0000000;
        #20 a_cpu = 25'h3ffffff;
        #20 a_cpu = 25'hzzzzzzz;
        #20 a_cpu = 25'hxxxxxxx;
    end
    
    initial
        #100 $stop;
        
    initial
        $monitor("Time = %2t, a_cpu = 0x%7h, ena = b%0b", $stime, a_cpu, ena);
            
endmodule     

Даёт 

# Time =  0, a_cpu = 0xxxxxxxx, ena = b0
# Time =  5, a_cpu = 0x0000000, ena = b0
# Time = 20, a_cpu = 0x0000000, ena = b1
# Time = 25, a_cpu = 0x1ffffff, ena = b1
# Time = 45, a_cpu = 0xZzzzzzz, ena = b1
# Time = 60, a_cpu = 0xZzzzzzz, ena = b0
# Time = 65, a_cpu = 0xXxxxxxx, ena = b0

И

Clipboard01.thumb.gif.cf90bb0fad5b279ee4dd35bb9995731e.gif

Да, действительно, нижняя ветвь имеет место быть хотя бы в симуляторе. Всем спасибо.

Единственный вопрос: почему в строке 

# Time = 25, a_cpu = 0x1ffffff, ena = b1

a_cpu равен 0x1ffffff, а не 0x3ffffff, как задано?

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


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

1 hour ago, MaratZuev said:

Не понятно, а что: возможны варианты, когда if отработает по ветви a_cpu[21:0] < 22'h0 ? 

а a_cpu[21:0] может быть воспринято как отрицательное число?

Или оно unsigned по умолчание?

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


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

4 minutes ago, Tpeck said:

а a_cpu[21:0] может быть воспринято как отрицательное число?

По названию и сути это - адрес процессора

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


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

15 minutes ago, MaratZuev said:

Единственный вопрос: почему в строке 

# Time = 25, a_cpu = 0x1ffffff, ena = b1

a_cpu равен 0x1ffffff, а не 0x3ffffff, как задано?

Потому что 0x3ffffff это 26-ти битное число, а 25'h3ffffff - 25-ти битное. Старший бит в это число не помещается..

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


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

16 минут назад, MaratZuev сказал:

a_cpu равен 0x1ffffff, а не 0x3ffffff, как задано?

У вас константа 25'h3ffffff (25 бит), а a_cpu - 26 бит

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


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

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

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

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

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

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

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

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

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

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