Jackov 1 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба Разглядываю IEEE Std 1364-2001. На стр. 38 есть глава 3.12 Name spaces. Цитата 3.12 Name spaces In Verilog HDL, there are seven name spaces; two are global and five are local. The global name spaces are definitions and text macros. The definitions name space unifies all the module (see 12.1), macromodule (see 12.1), and primitive (see 8.1) definitions. Once a name is used to define a module, macromodule, or primitive, the name shall not be used again to declare another module, macromodule, or primitive. The text macro name space is global. Since text macro names are introduced and used with a leading ‘ character, they remain unambiguous with any other name space (see 19.3). The text macro names are defined in the linear order of appearance in the set of input files that make up the description of the design unit. Subsequent definitions of the same name override the previous definitions for the balance of the input files. There are five local name spaces: block, module, port, specify block, and attribute. Once a name is defined within one of the five name spaces, it shall not be defined again in that space (with the same or a different type). The block name space is introduced by the named block (see 9.8), function (see 10.3), and task (see 10.2) constructs. It unifies the definitions of the named blocks, functions, tasks, parameters, named events and the variable type of declaration (see 3.2.2). The variable type of declaration includes the reg, integer, time, real, and realtime declarations. The module name space is introduced by the module, macromodule, and primitive constructs. It unifies the definition of functions, tasks, named blocks, instance names, parameters, named events, net type of declaration, and variable type of declaration. The net type of declaration includes wire, wor, wand, tri, trior, triand, tri0, tri1, trireg, supply0, and supply1 (see 3.7). The port name space is introduced by the module, macromodule, primitive, function, and task constructs. It provides a means of structurally defining connections between two objects that are in two different name spaces. The connection can be unidirectional (either input or output) or bidirectional (inout). The port name space overlaps the module and the block name spaces. Essentially, the port name space specifies the type of connection between names in different name spaces. The port type of declarations include input, output, and inout (see 12.3). A port name introduced in the port name space may be reintroduced in the module name space by declaring a variable or a wire with the same name as the port name. The specify block name space is introduced by the specify construct (see 14.2). The attribute name space is enclosed by the (* and *) constructs attached to a language element (see 2.8). An attribute name can be defined and used only in the attribute name space. Any other type of name cannot be defined in this name space. И что-то её смысл от меня ускользает. Я так понимаю имеется в виду то что могут совподать имену у разных "сущностей". Например, у переменной и модуля может быть одно имя. Но если так, то почему и в обзаце о пространстве имен блоков и в абзаце про пространство имен модулей пишут о типах переменных. Т.е. переменные существуют в обоих этих пространствах? Или я что-то тут не понял? Английским в совершенстве не владею, возможно упускаю какие-то тонкости формулировок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба 2 hours ago, Jackov said: Т.е. переменные существуют в обоих этих пространствах? В модули вложены именованные блоки, а в них вложенны переменные. Так что да, они видны сразу в 2х пространствах. Пространства имён в Verilog не являются независимыми сущностями - они могут быть вложенны друг в друга, так что то, что живёт в них оказываются сразу в нескольких пространствах Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба 18 минут назад, xvr сказал: В модули вложены именованные блоки, а в них вложенны переменные. Так что да, они видны сразу в 2х пространствах. Пространства имён в Verilog не являются независимыми сущностями - они могут быть вложенны друг в друга, так что то, что живёт в них оказываются сразу в нескольких пространствах То что переменные созданные в одном блоке не видны в другом это область видимости. Пространство имён, если я правильно понимаю, это то, что в пределах одной области видимости мы можем дать одинаковые имена разным сущностям, например типу модуля, инстанции модуля, переменной, атрибуту (* *), т.е.: (*name1*) reg name1; name1 name1(); 3 часа назад, Jackov сказал: в обзаце о пространстве имен блоков и в абзаце про пространство имен модулей пишут о типах переменных Кстати, про задачи и функции тоже пишут и там и там. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 июля, 2023 Опубликовано 23 июля, 2023 · Жалоба 56 minutes ago, Jackov said: что в пределах одной области видимости мы можем дать одинаковые имена разным сущностям, А так же то, что не можете дать одинаковые имена сущностям одного типа. И то, что именованные сущности ищутся в иерархии областей видимости. Так что понятие областей видимости и пространств имён в некотором роде пересекаются - области видимости работают внутри пространств имён и то и другое образуют иерархии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 24 июля, 2023 Опубликовано 24 июля, 2023 · Жалоба 20 часов назад, xvr сказал: А так же то, что не можете дать одинаковые имена сущностям одного типа. И то, что именованные сущности ищутся в иерархии областей видимости. Так что понятие областей видимости и пространств имён в некотором роде пересекаются - области видимости работают внутри пространств имён и то и другое образуют иерархии. Это понятно. Непонятно прочему пространство имён блоков и пространство имён модулей разделены если и там и там одно и тоже? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба On 7/24/2023 at 7:23 PM, Jackov said: Непонятно прочему пространство имён блоков и пространство имён модулей разделены если и там и там одно и тоже? Они вводятся разными конструкциями и не совсем одинаковые - в модулях есть net type of declaration, чего нет в блоках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 2 августа, 2023 Опубликовано 2 августа, 2023 (изменено) · Жалоба 5 часов назад, xvr сказал: Они вводятся разными конструкциями и не совсем одинаковые - в модулях есть net type of declaration, чего нет в блоках. Да, я тоже обратил внимание. И вообще, я немного не под тем углом прочитал всё это, теперь более менее прояснилось. Осталось непонятным почему вообще есть пространство портов, ведь при создании порта в модуле автоматически создаётся wire/reg? Т.е. порты существуют в пространстве модуля, не получится написать так: Цитата module M M1(..., input In, ...); ... wire In; ... endmodule Читаю соответствующий абзац и вообще смысла его не понимаю: Цитата The port name space is introduced by the module, macromodule, primitive, function, and task constructs. It provides a means of structurally defining connections between two objects that are in two different name spaces. The connection can be unidirectional (either input or output) or bidirectional (inout). The port name space overlaps the module and the block name spaces. Essentially, the port name space specifies the type of connection between names in different name spaces. The port type of declarations include input, output, and inout (see 12.3). A port name introduced in the port name space may be reintroduced in the module name space by declaring a variable or a wire with the same name as the port name. Изменено 2 августа, 2023 пользователем Jackov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба 32 minutes ago, Jackov said: Т.е. порты существуют в пространстве модуля, не получится написать так: ... Но вы вы может написать так module tst(aa,bb,cc); input aa; inout bb; output cc; wire aa; tri bb; reg cc; ... endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 2 августа, 2023 Опубликовано 2 августа, 2023 · Жалоба 19 часов назад, RobFPGA сказал: Но вы вы может написать так Хм... Я никогда не был фанатом старого синтаксиса и думал, что согласно ему надо писать так module tst(aa,bb,cc); input aa; inout bb; output reg cc; ... endmodule Оказывается можно и этак. Но всё равно, aa, input aa; wire aa; описывают одну и ту же сущность. Зачем они ввели отдельное пространство имён для портов? Я то думал, что смысл пространств имён в том что мы можем давать одинаковые имена разнородным сущностям/элементам/объектам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться