?

Log in

No account? Create an account

Как бы рабочее, как бы программистское - Общество дровосеков Бердичева по изучению Мишны

Jan. 6th, 2012

01:09 pm - Как бы рабочее, как бы программистское

Previous Entry Share Next Entry



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

Дан блок кода, состоящий из 4-х операторов присваивания:

X = A;
X <= B;
X <= X + 1;
X = D;

где "=" - обычное присваивание, а "<=" - "необычное". Известно, что после завершения выполнения этого блока значение X равно A+1. Что можно сказать о семантике "необычного" присваивания?

Comments:

[User Picture]
From:yakov_sirotkin
Date:January 6th, 2012 09:20 pm (UTC)
(Link)
Обычное присваивание меняет внутреннее состояние X, а необычное - внешнее?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 6th, 2012 09:26 pm (UTC)
(Link)
Что такое "внешнее состояние"?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:leonidph1972
Date:January 6th, 2012 09:26 pm (UTC)
(Link)
необычное присваивание работает с пайпланом
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 6th, 2012 09:28 pm (UTC)
(Link)
Т.е. как именно?
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:excubitus
Date:January 6th, 2012 09:31 pm (UTC)
(Link)
Лень искать, но есть подозрение, что это какое-то отложенное присваивание, выполняющееся только после выхода из блока. X, небось, связан с каким-нибудь индикатором, который должен красиво мигнуть при переходе от А к А+1.
(Reply) (Thread)
[User Picture]
From:iime
Date:January 6th, 2012 09:36 pm (UTC)
(Link)
Это было бы нечестно)
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:spamsink
Date:January 6th, 2012 09:37 pm (UTC)
(Link)
Идея в том, чтобы понять без поиска. "Отложенное присваивание" - правильный для данного примера ответ. Этот пример чисто искусственный, а в реальной жизни такое присваивание позволяет, например, записывать обмен значениями между двумя переменными любого типа без привлечения третьей:

X <= Y;
Y <= X;

(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:msh
Date:January 6th, 2012 09:35 pm (UTC)
(Link)
Все операции синхронизированы с клоком и = и <= выполняются в разное время такта?
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 6th, 2012 09:39 pm (UTC)
(Link)
Можно и так сказать, но нужно уточнить, что значит "выполняются".
(Reply) (Parent) (Thread)
[User Picture]
From:ilya_dogolazky
Date:January 6th, 2012 10:31 pm (UTC)
(Link)
А вот задачка про другой язык программирования, ну скажем Метапост.

X=A;
X:=X+1;
X=D;

После его выполнения А получается на единицу меньше чем D. В чём семантика значков "=" и ":=" ?

Edited at 2012-01-06 10:32 pm (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 6th, 2012 10:41 pm (UTC)
(Link)
Стандартная семантика присваивания для = и := удовлетворяет такой формулировке.

В интерфейсе ЖЖ не хватает фичи оповещения о редактировании комментария в процессе написания ответа на него. "=" - ребро между узлом типа "значение" и узлом типа "функция", ":=" - определение функции в узле. Так годится?

Edited at 2012-01-06 10:47 pm (UTC)
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:ygam
Date:January 7th, 2012 01:15 am (UTC)
(Link)
Еще в языке SISAL можно написать:

X := old Y;
Y := old X

http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=00130079

Edited at 2012-01-07 01:16 am (UTC)
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 7th, 2012 01:31 am (UTC)
(Link)
У меня нет подписки. Вот тут хорошо: http://www2.cmp.uea.ac.uk/~jrwg/Sisal/16.Seq.loops.html
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:janatem
Date:January 7th, 2012 09:58 am (UTC)
(Link)
Если этот код валиден, то Verilog воистину странный язык. Я знаю VHDL и осмелюсь утверждать, что достаточно хорошо понимаю принципы описания цифровой аппаратуры.

Даже если предположить, что одно из присваиваний подразумевает onclock, а другое -- просто alias (соединение проводников), всё равно непонянто, почему не будет ошибки типа multisource. Даже если на разных "=>" разные клоки, будет либо явно multisource, либо мусорное значение в результате.
(Reply) (Thread)
[User Picture]
From:spamsink
Date:January 7th, 2012 06:04 pm (UTC)
(Link)
Верилог по сравнению с VHDL действительно странен (моим первым HDL был как раз VHDL, и когда я начинал учить верилог, он меня удивил, но VHDL я уже успел практически забыть).

Фокус в том, что ни одно из присваиваний ничего само по себе не подразумевает. Наличие и тип регистра для переменной выводится из data flow graph, построенного из блока(плюс еще некоторые синтаксические тонкости, но это детали).

почему не будет ошибки типа multisource

Потому что все эти присваивания - внутри одного блока. Один блок - один source.
(Reply) (Parent) (Thread)