Methane 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Народ. Есть interface. В нем через typedef struct и typedef union задана куча регистров. Вопрос, как получить адрес поля в структуре? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
prst 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Народ. Есть interface. В нем через typedef struct и typedef union задана куча регистров. Вопрос, как получить адрес поля в структуре? а какой язык? судя по вопросу напршивается ответ на язык С, а судя по разделу наверно речь про *HDL? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба а какой язык? судя по вопросу напршивается ответ на язык С, а судя по разделу наверно речь про *HDL? Судя по вопросу - SV. А в Си тоже interface есть? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба а какой язык? судя по вопросу напршивается ответ на язык С, а судя по разделу наверно речь про *HDL? Вот. Хочется ofsetof, но для SV. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Вопрос, как получить адрес поля в структуре? что значит 1) получить 2) адрес поля ? ЗЫЖ может это наведёт на нужную мысль без постороннего вмешательства. про оператор bits помним? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба что значит 1) получить 2) адрес поля ? ЗЫЖ может это наведёт на нужную мысль без постороннего вмешательства. про оператор bits помним? Помню, но перечислять все структуры перед нужной, крайне коряво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Помню, но перечислять все структуры перед нужной, крайне коряво. ну так расскажите тогда всё-таки что вы имеете ввиду под словом получть? опять телепатством приходится заниматься. по имени поля получить номер бита в векторе? зыж вы помните надеюсь, что структуры даже в программистских языках не обязаны лежать в линейном отрезке памяти(т.е. запакованность структуры это искл., а не правило)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба ну так расскажите тогда всё-таки что вы имеете ввиду под словом получть? опять телепатством приходится заниматься. по имени поля получить номер бита в векторе? зыж вы помните надеюсь, что структуры даже в программистских языках не обязаны лежать в линейном отрезке памяти(т.е. запакованность структуры это искл., а не правило)? Если я пишу packed, что в Си что в SV, то обязаны. Я не могу понять, только, почему я не могу получить смещение. У меня есть имя, и я хочу знать как далеко это имя находится от начала структуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Если я пишу packed, что в Си что в SV, то обязаны. я вам про что и говорю. вы в своём вопросе разве указали, что структура пакованная? почему постоянно приходится додумывать вопрос, а потом ещё клещами вытаскивать ответ, правильно ли угадана суть вопроса? может вы смещение в байтах ищите(для непакованой структуры,меж прочим, тоже работает). по существу: самое простое, что в голову приходит, это определить для типа функцию или макрос, где вычислять через bits. простого решения, думаю нет, т.к. это всё-таки не си в котором речь идёт о разнице адресов в памяти, а об абстрактном моделистском языке не привязаном к реализации. но я ещё подумаю - надо стандарт последний полистать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба я вам про что и говорю. вы в своём вопросе разве указали, что структура пакованная? почему постоянно приходится додумывать вопрос, а потом ещё клещами вытаскивать ответ, правильно ли угадана суть вопроса? может вы смещение в байтах ищите(для непакованой структуры,меж прочим, тоже работает). Потому что я думал что это ОЧЕВИДНО. по существу: самое простое, что в голову приходит, это определить для типа функцию или макрос, где вычислять через bits. простого решения, думаю нет, т.к. это всё-таки не си в котором речь идёт о разнице адресов в памяти, а об абстрактном моделистском языке не привязаном к реализации. но я ещё подумаю - надо стандарт последний полистать. Все плохо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба ОЧЕВИДНО. для вопрошающего - да, а для читающего - приходится несколько раз перечитывать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 16 сентября, 2010 Опубликовано 16 сентября, 2010 · Жалоба Потому что я думал что это ОЧЕВИДНО.Мне кажется, что после первого вопроса уважаемого CaPpuCcino, уже должно было стать понятно, что это не так. :) По теме: Если не секрет - а зачем Вам это? Может быть существуют более простые способы решения стоящей задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба Мне кажется, что после первого вопроса уважаемого CaPpuCcino, уже должно было стать понятно, что это не так. :) По теме: Если не секрет - а зачем Вам это? Может быть существуют более простые способы решения стоящей задачи. Ок. Попытаюсь объяснить. На PCIe карточке я сделал несколько адресных пространств. Одно из них RW, другое RO (есть еще,но это мелочи). У меня линейно идут регистры RW, потом начиная с границы 256КБ идет RO. Каждое за IO операции отвечает один модуль (в терминах верилога). Он на входе получает interface, в котором через typedef struct заданы регистры отдельных переферийныйх устройств. Каждое адресное пространство периферийного устройства имеет размер кратный 64 бит. Это дает мне возможность завести структуру. typedef struct { logic [63:0] start_day, logic [63:0] end_day logic [60:0] bad_days; logic [2:0] good_days; }counter_t typedef struct { dooms_day_device_t dooms_day_device[5], counter_t days_left итд } Когда мне нужен новый регистр, я просто его дописываю в структуру, и мне больше ничего нигде дописывать не нужно. Цикл for автоматически пройдет по ней и сгенерит нужный регистр. Потом я захотел ловить момент записи в регистр. Вроде все просто, но мне нужно знать где находится good_days, относительно начала таблицы, чтбы я мог проанализировать адрес и бай-энейбл биты, и поймать момент записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба typedef struct { logic [63:0] start_day, logic [63:0] end_day logic [60:0] bad_days; logic [2:0] good_days; }counter_t typedef struct { dooms_day_device_t dooms_day_device[5], counter_t days_left } pipa_t } Потом я захотел ловить момент записи в регистр. Вроде все просто, но мне нужно знать где находится good_days, относительно начала таблицы, чтбы я мог проанализировать адрес и бай-энейбл биты, и поймать момент записи. в случае упакованной структуры, он всегда будет в младших битах pipa_t. А если вы его сместите, то функция get_good_days_position и функция $bits спасут отца русской демократии %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Methane 0 17 сентября, 2010 Опубликовано 17 сентября, 2010 · Жалоба в случае упакованной структуры, он всегда будет в младших битах pipa_t. А если вы его сместите, то функция get_good_days_position и функция $bits спасут отца русской демократии %) В старших адресах. И мне не нужна функция get_good_days_position. Мне нужна функция $offset(pipa.days_left.good_days) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться