Перейти к содержанию

    

Fitc

Свой
  • Публикаций

    80
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Fitc

  • Звание
    Частый гость
  1. Цитата(misyachniy @ Jun 12 2017, 13:58) При моделировании Modelsim создает папки файлы типа @_opt* и в них файлы типа vopt*. Я это обычно делаю удалением текущей библиотеки и созданием новой. Открыть окно "Library", щелкнуть правой кнопкой по библиотеке, в контекстном меню выбрать Delete, в окне "Delete library mappings" отметить "Delete physical library as well", нажать Yes. В окне "Library" щелкнуть правой кнопкой в области окна и в контекстном меню выбрать New->Library..., в окне Create New Library ввести Library Name (work), Library Physical Name (work). Нажать Ок.
  2. Цитата(L47 @ Jun 9 2017, 08:36) в литературе по SV не нашел примеров с объявлением интерфейса внутри модуля. внутри модуля интерфейс объявляется как обычно. В Quartus поддержка SystemVerilog всегда была не очень, сейчас не знаю как обстоят дела
  3. Цитата(likeasm @ May 20 2017, 01:27) Спасибо за ответ, я похоже не так сформировал вопрос. Если не брать чтение из файла, сформировать случайный seed для функции random можно стандартными средствами Verilog? автоматизированно проще всего это сделать средствами tcl-скрипта: в random передать в качестве аргумента параметр или макроопределение, значение которого передается в команде запуска моделирования, сгенерировать средствами tcl случайный seed и передать его в команду запуска моделирования, при этом не забыть сохранить значение seed, чтобы в случае ошибки воспроизвести random-последовательность
  4. random генерирует псевдослучайные значения в соответствии с алгоритмом генерации псевдослучаных значений, впервые определенном ЕМНИП в стандарте IEEE 1364-2001. Аргументом является начальное значение генератора псевдослучаных чисел (seed). Для одинакового seed последолвательность псевдослучайных значений между запусками моделирования не изменяется.
  5. Цитата(Jenya7 @ May 8 2017, 11:27) Может кто нибудь встречался с такой проблемой. Проинсталировал ModelSim. Открываю File -> New -> Project - ничего не происходит. Должно появиться окно - мастер настройки нового проекта. Если абсолютный установочный путь содержит неанглийские или спец. символы, то можно попробовать переустановить по нормальному пути Попробуйте создать проект через командную строку, выполнив в окне transcript следующую команду: project new c:/my_new_proj my_new_proj1 где c:/my_new_proj - местоположение проекта, my_new_proj1 - имя проекта
  6. Цитата(Kokos @ May 4 2017, 10:39) Я правильно понимаю что порт в виде массива можно использовать только в systemverilog? Да. В verilog двумерные массивы в портах к сожалению не поддерживаются. Нужно писать что-то типа: Кодinput[pWORDS_CNT*pWORD_LENGTH-1:0] arr; genvar geni; for(geni=0; geni<pWORDS_CNT; ++geni) begin   wire[pWORD_LENGTH-1:0] my_word;   assign my_word = arr[geni*pWORD_LENGTH+pWORD_LENGTH-1:geni*pWORD_LENGTH]; end
  7. Цитата(Kokos @ May 3 2017, 17:19) Но модельсим ругается. такое ощущение, что макрос принимает не значение y, а использует как аргумент сам символ y Так и есть, поскольку макроопределение подставляется перед компиляцией, а generate выполняется во время линковки (elaboration) В вашем случае можно порт объявить в виде массива, разрядность которого определяется через список параметров модуля, а в generate обращаться к соответствующему элементу массива
  8. Цитата(L47 @ Apr 29 2017, 20:09) экземпляр: Код bus_a bus_a(.reset(reset)); есть два проекта которых необходимо объединить в тестбенче. В Топ модулях проектов используются одинаковые подмодули, в которых используются одинаковые интерфейсы, если я задам в одном из Топ модулей имя интерфейса другим то он не будет стыковаться с его внутренним подмодулем использующим стандартный интерфейс. например так: создаю экземпляр: Кодbus_a bus_X(.reset(reset)); подключаю подмодуль: Кодm2_1 m2_1(.bus_a(bus_X)); в подмодуле имею объявление порта: Кодmodule m2_1(bus_a bus_a) получаю ошибку о не соответствии интерфейсов: Приведите полный код. По данному описанию ничего не понятно Цитата(L47 @ Apr 29 2017, 20:09) Подскажите пожалуйста, как определять в интерфейсы в разных областях видимости? Код////////////TB//////////////     module tb(); logic reset = 'b0;     top1 m1(         .reset(reset)         );     top2 m2(         .reset(reset)         );     endmodule ////////////TOP1////////////////////     module top1(input logic reset);   interface bus_a(input logic reset);       logic clk;       logic clk_b;       endinterface              module m1(input logic reset);       bus_a bus_a(.reset(reset));       m1_1 m1_1(.bus_a(bus_a));       endmodule          module m1_1(bus_a bus_a);       logic m1_1_clk = 'b0;       assign bus_a.clk = m1_1_clk;       assign bus_a.clk_b = ~ m1_1_clk;       always #10 m1_1_clk <= ~m1_1_clk;       endmodule   m1 m1_instance(     .reset(reset)     ); endmodule      /////////////TOP2///////////////// module top2(input logic reset);   interface bus_a(input logic reset);       logic clk;       logic clk_a;       endinterface          module m2(input logic reset);       bus_a bus_a(.reset(reset));       m2_1 m2_1(.bus_a(bus_a));       endmodule   module m2_1(bus_a bus_a);       logic m2_1_clk = 'b0;       assign bus_a.clk = m2_1_clk;       assign bus_a.clk_a = ~ m2_1_clk;       always #20 m2_1_clk <= ~m2_1_clk;       endmodule   m2 m2_instance(         .reset(reset)         ); endmodule ////////////////////////////////
  9. Цитата(L47 @ Apr 28 2017, 12:10) ошибка в modelsim: Не надо определять в одной области видимости интерфейсы с одинаковыми именами. Modelsim сначала распознал первый интерфейс bus_a, встретив второй интерфейс с тем же именем, он переопределил интерфейс bus_a. Если в разделе "TOP 1" везде поменять bus_a на bus_b все успешно скомпилится и запустится
  10. Цитата(Koluchiy @ Apr 25 2017, 14:48) Спасибо за помощь. Скажите, а как-то можно разделить пространства имен? Чтобы localparam'ы (или обхявления какого-то другого вида) с одинаковыми именами, определенные в разных подключенных файлах, считались разными, и чтобы к ним можно было обращаться как-нибудь типа имя_файла.имя_параметра? Если сделать `include "<имя подпапки>/<имя файла>" для каждого файла в индивидуальную область видимости, например, в отдельный module или package (есть только в SystemVerilog), то можно обращаться через имя модуля/пакета к параметру, например, my_module::my_param. Только не понятно зачем так делать, если параметр можно сделать массивом и обращаться к определенному элементу по индексу.
  11. Цитата(Koluchiy @ Apr 24 2017, 19:08) Спасибо! А почему с reg работает, а с wire - нет? Потому что assign и initial являются параллельными процессами, порядок выполнения которых не определен. В данном случае первым выполняется процесс initial, когда assign еще не выполнился и не присвоил значение wire. А inline-инициализация статических переменных ЕМНИП выполняется раньше выполнения процессов. Если в initial в начале добавить задержку, то вариант с wire также сработает.
  12. Цитата(Koluchiy @ Apr 24 2017, 19:17) Здравствуйте, уважаемые гуру. Есть набор каталогов с разными именами. В каждом есть файл .v с одинаковым для всех каталогов именем. Во всех файлах определены одинаковые localparamы. Надо: последовательно в ходе работы тестбенча в Моделсиме "подключать" эти файлы один за другим. А потом "отключать". Как это можно сделать? Никакого `uninclude в Верилоге вроде нету. Можно бы подключить все эти файлы, но тогда будет куча localparam с одинаковыми именами. Как-то можно сделать так, чтобы их можно было различать? Обращаться к параметрам типа файлХ.параметерY, например. Ну или еще чего-то в этом духе придумать. Вы хотите в ходе работы тестбенча, т.е. во время непрерывного моделирования делать include файлов? Это невозможно. Так как `include это директива препроцессора, выполняемая во время препроцессинга/компиляции. Значения localparam во время моделирования также нельзя изменять, они устанавливаются на этапе линковки (elaboration). Если же нужно по очереди перезапускать моделирование с разными значениями localparam, то следует написать tcl-скрипт, который найдет все подпапки с нужными вам файлами, добавит incdir к нужной подпапке в команду vlog и запустит моделирование на заданный промежуток времени (или пока моделирование не завершится), далее добавит incdir к следующей подпапке и т.д., пока есть не обработанные файлы. Если нужны именно параметры, то рекомендую добавить список параметров к моделируемому/тестируемому модулю. В модуль верхнего уровня добавить параметры, значения которых устанавливаются в vsim с помощью параметра -g или -G. Другой вариант - это промоделить все варианты одновременно, тогда нужно создать массив параметров и в generate создать экземпляр с нужным набором параметров, далее все это параллельно промоделить.
  13. Цитата(sawyer0 @ Apr 24 2017, 15:42) помогите описать поведение сигнала readdatavalid, чтобы было как на картинке (не сплошной, а 'рваный' и случайный). я сделал, так чтобы он был без разрывов, подряд. как теперь исправить, на псевдослучпайное поведение? Если используете $urandom_range, значит пишете на SystemVerilog. $urandom_range не лучший вариант генерации псевдослучайных воздействий в SystemVerilog из-за равномерного распределения. Лучше использовать классы со случайными переменными и констрейнтами (см.стандарт или SystemVerilog for Veriifcation). Но на начальных этапах можете и $urandom_range использовать. Что мешает присвоить сигналу readdatavalid результат $urandom_range(1,0)?
  14. Кодlocalparam Path = "D:/Sig0/test"; localparam Filename = "/ref.hex"; reg[7:0]    Number; initial begin         Number = "1";     $readmemh({Path, Number, Filename}, RefMem); end
  15. localparam Path = "D:\\Path\\"; localparam Filename = "Filename.txt"; $readmemh({Path, Filename}, mem);