spamsink: (lenin)
[personal profile] spamsink


int array[0:7];

initial begin
    array[0] <= -1;
    for (int j = 1; j < 8; j++)
        array[j] <= 1 + array[j-1];
end


А-а-а-а-а-а!

Date: 2015-07-17 09:36 pm (UTC)
From: [identity profile] archaicos.livejournal.com
Переведи для тайнописью не владеющих.

Date: 2015-07-17 10:48 pm (UTC)
From: [identity profile] archaicos.livejournal.com
А, у тебя была опечатка.

Date: 2015-07-17 10:11 pm (UTC)
From: [identity profile] rkatsyv.livejournal.com
1. Да фигли тут понимать
2. Аааааааа!!

P.S. При этом же еще и работать не будет

Date: 2015-07-17 10:19 pm (UTC)
From: [identity profile] ygam.livejournal.com
для j=0 array[j-1] не существует. В этом смысл?

Date: 2015-07-17 10:42 pm (UTC)
From: [identity profile] rkatsyv.livejournal.com
Это просто ошибка.
А вот
array[j] <= 1 + array[j-1];
вместо
array[j] <= j;
вот это уже плоскогорье Деккан

Date: 2015-07-17 10:44 pm (UTC)
From: [identity profile] ygam.livejournal.com
Теперь понял.

Date: 2015-07-19 12:41 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Это мощно. Я б не догадался. Но я не знаю верилога. Думал что там из-за ненужного доступа к памяти ломается какая-то оптимизация, или всё медленнее в 1000 раз чем могло бы быть, и т.п..

Чисто из любопытства. Как тогда происходит присваивание в данном случае? Значение j кешируется, а потом оно всё одномоментно забивается в array?

Date: 2015-07-19 01:20 am (UTC)
ak_47: (default)
From: [personal profile] ak_47
Понравилось. :) Хорошая гимнастика для ума писать так, зная что это всё подвешено в воздухе, а потом - раз, и сбросилось в переменные.

Лирическое отступление. На Ц/Ц++ меня обычно раздражает код вида:
bool CheckFlag(bool flag)
{
    if (flag == true)
        return true;

    return false;
}


Глупое животное! Золота Кода не может быть слишком много!

Date: 2015-07-19 01:36 am (UTC)
ak_47: (Default)
From: [personal profile] ak_47
Однозначно!

Date: 2015-07-18 03:37 am (UTC)
From: [identity profile] rkatsyv.livejournal.com
Yes, yes, mutatis mutandis

Date: 2015-07-18 03:41 am (UTC)
From: [identity profile] rkatsyv.livejournal.com
Опять же, это просто ошибка или плохое знание используемого языка.
Что, конечно, плохо, но бывает.
А вот сама идея написать array[j] <= 1 + array[j-1]; указывает на то, что человек думает жопой.

Date: 2015-07-18 01:48 am (UTC)
From: [identity profile] igorek.livejournal.com
А-а-а-а-а-а - в смысле зачем?
индусы писали небось? :)

Date: 2015-07-18 01:50 am (UTC)
From: [identity profile] igorek.livejournal.com
Так будет лучше? ;)

int array[0:7];

initial begin
for (int j = 0; j < 8; j++)
array[j] <= j-1;
end

Date: 2015-07-18 02:31 am (UTC)
From: [identity profile] igorek.livejournal.com
ссылка на память против константы - кто побеждает?

Date: 2015-07-18 02:24 am (UTC)
From: [identity profile] igorek.livejournal.com
Не уловил, знание географии слабое

Date: 2015-07-18 02:44 am (UTC)
vak: (Default)
From: [personal profile] vak
Неблокирующее присваивание тут смешно смотрится.
В правой части присваивания для array[1:7] оказывается неопределенное значение.

Date: 2015-07-18 02:52 am (UTC)
From: [identity profile] archaicos.livejournal.com
Жуткая семантика. :)

Date: 2015-07-18 03:37 am (UTC)
vak: (Default)
From: [personal profile] vak
Запретить бы неблокирующие присваивания в блоке initial.
Если без явной задержки.

Date: 2015-07-18 10:35 am (UTC)
From: [identity profile] janatem.livejournal.com
Все-таки это демонстрация скорее кривизны парадигмы языка, нежели прокладки между клавиатурой и экраном.

Вот почему бы все содержимое блока initial не вычислить до дна на ранней стадии (а если циклится, то вывалиться с ошибкой)? Нет, это конечно корявое решение, надо что-то в консерватории менять.

Date: 2015-07-20 06:10 pm (UTC)
From: [identity profile] kcmamu.livejournal.com
Не всегда это можно. Там бывает бесконечный по времени цикл с разумными целями (например, генератор тактовых импульсов).

Date: 2015-07-20 07:49 pm (UTC)
From: [identity profile] janatem.livejournal.com
Это как раз не очень понятно. Вроде бы слово initial означает, что всё должно произойти за конечное время.

Вообще идея закопать и сделать неявными парадигматически значимые понятия (такие как тактовый сигнал и асинхронный ресет) в языке чревата тем, что регулярно будет появляться код, приведенный в посте.

Date: 2015-07-20 09:14 pm (UTC)
From: [identity profile] kcmamu.livejournal.com
Слово "initial" обозначает всего лишь, что данная активность запускается один раз при старте системы. С тем же успехом можно было бы его в язык не вводить, а взамен завести системный сигнал, который дергается один раз в самом начале работы: "initial" = "always @($PowerOn)".

А вообще для понимания этого языка полезно уметь написать для него design compiler, пусть даже совсем прямолинейный. Там разница между "=" и "<=" становится очевидна.
Page generated Mar. 7th, 2026 07:37 pm
Powered by Dreamwidth Studios