oleg679976 0 3 января, 2021 Опубликовано 3 января, 2021 · Жалоба Добрый день, коллеги! Начал изучать SV по материалам с данного сайта http://simhard.com/wiki/index.php/Спец_курс_(Верификация_цифровых_схем)/Практические_задания_(Лекция_1). Для закрепления естественно проделываю практические задачи. Пришел сюда, так как ни google, ни chipverify, ни testbench.in не помогли мне найти ответ. Сейчас выполняю задание: "Создать тип данных структура, содержащую 4 различных поля. Поля должны иметь тип целочисленный, строковый, бит-вектор. Создать две переменные полученного типа. Проинвертировать все битовые поля в первой переменной. Значение всех полей первой и второй переменных типа структуры вывести в консоль. Формат вывода: VAR1 FIELD1: <value> VAR1 FIELD2: <value> ... VAR2 FIELD1: <value> VAR2 FIELD1: <value> ..." Не могу никак понять как проинвертировать структуру? Исходя их формулировки задания есть ощущения, что это должно делать в одно действие, но простое инвертирование, как в Verilog дает ошибку, с другой стороны смущает, что типы данных в структуре абсолютно разные и инвертировать string, как-то странно. Код симулирую на EDAPLAYGROUND в Aldec Riviera Pro 2020.04: // Code your testbench here // or browse Examples module task_2; typedef struct {integer field1; string field2; bit [10:0] field3; logic [10:0] field4;} my_struct; /*my_struct var1, var2; var1 = '{36, "453", 234, 434}; var2 = var1;*/ my_struct var1 = '{36, "453", 234, 434}; //my_struct var2 = ~var1; //my_struct var2 = !var1; my_struct var2 = var1; initial begin $display("var1 field1: %p", var1.field1); $display("var1 field2: %p", var1.field2); $display("var1 field3: %p", var1.field3); $display("var1 field4: %p", var1.field4); $display("var2 field1: %p", var2.field1); $display("var2 field2: %p", var2.field2); $display("var2 field3: %p", var2.field3); $display("var2 field4: %p", var2.field4); end endmodule Также вопрос по декларации и инициализации структуры. Данный код выдает ошибку: /*my_struct var1, var2; var1 = '{36, "453", 234, 434}; var2 = var1;*/ Так нельзя задавать? Просто на сайте chipverify задается так, или дело в операторе initial? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 3 января, 2021 Опубликовано 3 января, 2021 · Жалоба В задании же написано: 34 минуты назад, oleg679976 сказал: Проинвертировать все битовые поля в первой переменной. Надо сделать логическую инверсию тех полей, которые не строковые и не целые. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg679976 0 3 января, 2021 Опубликовано 3 января, 2021 · Жалоба 8 часов назад, andrew_b сказал: В задании же написано: Надо сделать логическую инверсию тех полей, которые не строковые и не целые. my_struct var2 = '{36, "453", !234, !434}; Так получается? Я другого способа не вижу, может подскажете чего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 3 января, 2021 Опубликовано 3 января, 2021 · Жалоба Приветствую! 9 hours ago, oleg679976 said: Сейчас выполняю задание: "Создать тип данных структура, содержащую 4 различных поля. Поля должны иметь тип целочисленный, строковый, бит-вектор. Создать две переменные полученного типа. Проинвертировать все битовые поля в первой переменной. Значение всех полей первой и второй переменных типа структуры вывести в консоль. Вам же в задании не сказано инвертировать все поля разом? Ну так и инвертируйте поэлементно! Зачем себе жизнь усложнять var1 = '{36, "453", 234, 434}; initial begin var1.field1 = ~var1.field1; var1.field3 = ~var1.field3; var1.field4 = ~var1.field4; ... Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg679976 0 3 января, 2021 Опубликовано 3 января, 2021 · Жалоба 37 минут назад, RobFPGA сказал: Приветствую! Вам же в задании не сказано инвертировать все поля разом? Ну так и инвертируйте поэлементно! Зачем себе жизнь усложнять var1 = '{36, "453", 234, 434}; initial begin var1.field1 = ~var1.field1; var1.field3 = ~var1.field3; var1.field4 = ~var1.field4; ... Удачи! Rob. Спасибо, понял! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg679976 0 11 января, 2021 Опубликовано 11 января, 2021 · Жалоба Коллеги, может кто-нибудь объяснит про инициализацию массива словами из строковой переменной? Задание звучит так: "Объявить строковую переменную mystr. По умолчанию переменная должна быть инициализирована строкой содержащей больше 30 символов. Заполнить строку используя функцию $value$plusargs("MYSTR=%s",mystr) Строка может содержать любое количество символов пробела, разделяющие строку на слова, слов более одного. Создать массив строковых переменных и заполнить их словами из исходной переменной. Размер строки может изменяться в ходе проверки задания и передаваться через +MYSTR параметр. В конце и начале строки могут быть доп пробелы. Слова могут быть разделены множеством пробелов. В консоль вывести содержимое строки в формате: MYSTR=<строка> В консоль вывести содержимое массива в формате MYSTR[1]=<строка> MYSTR[2]=<строка>" У меня два вопроса: 1) Если необходимо задать использовать слова из строки, то получается нужно каким-то образом организовать сортировку слов и пробелов? Выделить слова из строки, класть в переменные слова, а потом из них рандомом инициализировать? 2) Есть какой-нибудь метод инициализации массивов? Посмотрел на вышеупомянутых сайтах, ничего такого не увидел, только через цикл. Пока набросал такой код, в нем просто рандомно инициализировал: // Code your testbench here // or browse Examples module task4; string mystr; integer myarray [0:9] = '{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; initial begin if ($value$plusargs("STRING=%s", mystr)) $display("GOT STRING"); foreach (myarray) begin $display("Array element %d: %d", i, myarray); //fork #1 myarray = $random % 14539876; #1 $display("Array element %d: %d", i, myarray); //join end end initial $monitor("%t Array %p", $time, myarray); endmodule Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 11 января, 2021 Опубликовано 11 января, 2021 · Жалоба Приветствую! 1 hour ago, oleg679976 said: Задание звучит так: "Объявить строковую переменную mystr. По умолчанию переменная должна быть инициализирована строкой содержащей больше 30 символов. ... Опять вы себе жизнь усложняете Где в задании сказано что инициализировать mystr по умолчанию надо рандомными словами? То есть объявление string mystr = "bla bla bla и еще 18 символов!" как раз укладывается в условие задачи Если же хочется заполнят рандомными словами тогда да - придется в цикле сначала генерировать эти слова а уж затем склеивать их в строку. Ну и получив строку через $value$plusargs (или взяв то что задали по умолчанию) придется парсить выделяя слова в пробелах. По умолчанию массивы инициализируются константами через = `{....}. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oleg679976 0 13 января, 2021 Опубликовано 13 января, 2021 · Жалоба 11.01.2021 в 17:18, RobFPGA сказал: Приветствую! Опять вы себе жизнь усложняете Где в задании сказано что инициализировать mystr по умолчанию надо рандомными словами? То есть объявление string mystr = "bla bla bla и еще 18 символов!" как раз укладывается в условие задачи Если же хочется заполнят рандомными словами тогда да - придется в цикле сначала генерировать эти слова а уж затем склеивать их в строку. Ну и получив строку через $value$plusargs (или взяв то что задали по умолчанию) придется парсить выделяя слова в пробелах. По умолчанию массивы инициализируются константами через = `{....}. Удачи! Rob. Спасибо за ответ! Правда в задании указано: "Создать массив строковых переменных и заполнить их словами из исходной переменной. ", поэтому и задал вопрос) Что-то нет настроения заморачиваться с парсерами, учитывая сколько всего еще предстоит изучать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 13 января, 2021 Опубликовано 13 января, 2021 · Жалоба Приветствую! 1 minute ago, oleg679976 said: Спасибо за ответ! Правда в задании указано: "Создать массив строковых переменных и заполнить их словами из исходной переменной. ", поэтому и задал вопрос) Что-то нет настроения заморачиваться с парсерами, учитывая сколько всего еще предстоит изучать. Это понятно, лень матушку надо лелеять и баловать Но увы - массив строковых переменных словами из одной исходной строки без парсера (даже простейшего) не заполнить. Так что "Пилите Шура, пилите ..." (... строку на слова) Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться