Nick_K 0 8 июля, 2019 Опубликовано 8 июля, 2019 · Жалоба Доброго времени, уважаемые. В процессе написания кода возникла необходимость сделать user-френдли компонент с упрощенным редактированием. В чём основная суть: создаётся в начале файла несколько структур, в которые "пользователь" (человек, далее работающий с кодом) может добавлять одномерные векторы (рандомной длинны), нужное количество. В упрощённом варианте первая структура несёт все елементы, во второй указано только то, что подлежит сбросу по определённому ивенту. module component_1(...); typedef struct packed{ logic [1:0] first; logic [0:0] second; logic [2:0] third; } t_elements; t_elements common_elements; typedef struct packed{ logic [0:0] second; } t_reset; t_reset reset_elements; always_ff @(posedge clk) if (reset == 1) for(int i=0; i < $size(t_elements); i++) // тут пошла отсебятина ибо не представляю как реализовать if (reset_elements.i == common_elements.i) common_elements.i <= '0; Как сделать референс/перечисление/другой вариант, чтобы автоматизировать задачу и не заставлять юзера лезть в дебри кода, для правки сбрасываемых компонентов? Возможно есть вариант с одной структурой и какими-то указателями. Я уже и через enum пробовал вытащить имена и думал за union. Всё какое-то громоздкое и неработающее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 8 июля, 2019 Опубликовано 8 июля, 2019 · Жалоба Приветствую! Вы не можете задавать имя поля структуры через какую-либо переменную, имя поля это идентификатор и должно задаваться явно. В вашем случае можно попробовать упростить задачу пользователю через macro: `define RST_STRUCT_FIELD(st_name, fld_name) \ if (rst) begin : a_rst_``fld_name \ st_name.fld_name <= '0; \ end \ typedef struct packed { logic [1:0] f_0; logic [1:0] f_1; logic [1:0] f_2; } st_TEST_t; st_TEST_t st_test; `define RESET_FOR_LAZY_USER \ `RST_STRUCT_FIELD(st_test, f_0) \ `RST_STRUCT_FIELD(st_test, f_2) \ always_ff @(posedge clk) begin st_test.f_0 <= st_test.f_0+1; st_test.f_1 <= st_test.f_1+2; st_test.f_2 <= st_test.f_2+3; // ... `RESET_FOR_LAZY_USER end Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба Благодарю за столь развёрнутый ответ. Попробую сделать так. Вдруг появятся другие варианты реализации (возможно не через структуру, но с сохранением словесного присвоения) буду благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 15 minutes ago, Nick_K said: Вдруг появятся другие варианты реализации (возможно не через структуру, но с сохранением словесного присвоения) буду благодарен. вам же для синтеза, тогда только так. для моделирования можно было бы извернуться через классы или ассоциативные массивы и перечисления Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 1 hour ago, des00 said: вам же для синтеза, тогда только так. для моделирования можно было бы извернуться через классы или ассоциативные массивы и перечисления Тоже верно. У меня тут возникла "больная" идея... А можно ли всё запихнуть в BD? Чтобы юзеру только блочёк перетащить и сконфигурировать в окошке. Я знаю, что это реально, вопрос где более детально про это почитать можно, или с примерами лучше даже. Там по идее будет скриптование на TCL работать и всех делов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба Приветствую! 29 minutes ago, Nick_K said: У меня тут возникла "больная" идея... А можно ли всё запихнуть в BD? Вы озвучите основную идею какой сервис вы хотите сделать юзеру? Чтобы он мог и RTL-ить и при этом про reset не думать . BD в Vivado это tcl скрипт. Там можно такого наворотить - что юзеру будет достаточно только подумать и глазами посмотреть, а вареники сами в рот полезут BD сама сгенерируется Но все же кому-то вареники надо будет лепить... Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 9 июля, 2019 Опубликовано 9 июля, 2019 · Жалоба 2 hours ago, RobFPGA said: Приветствую! Вы озвучите основную идею какой сервис вы хотите сделать юзеру? Чтобы он мог и RTL-ить и при этом про reset не думать . BD в Vivado это tcl скрипт. Там можно такого наворотить - что юзеру будет достаточно только подумать и глазами посмотреть, а вареники сами в рот полезут BD сама сгенерируется Но все же кому-то вареники надо будет лепить... Удачи! Rob. В общем то вы правы отчасти. Нужно иметь возможность реконфигурировать на разные порты и вопрос не только в ресете, там куча других функций может быть встроена. з.ы. Под юзером, кстати, я понимаю и себя через год-два. Когда уже забыл что писал, но при этом есть лёгкая возможность редактировать, ибо это та часть проекта в которой основные конфиги прописаны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться