Fitc
Свой-
Постов
80 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Fitc
-
Звание
Частый гость
Контакты
-
ICQ
Array
-
Я это обычно делаю удалением текущей библиотеки и созданием новой. Открыть окно "Library", щелкнуть правой кнопкой по библиотеке, в контекстном меню выбрать Delete, в окне "Delete library mappings" отметить "Delete physical library as well", нажать Yes. В окне "Library" щелкнуть правой кнопкой в области окна и в контекстном меню выбрать New->Library..., в окне Create New Library ввести Library Name (work), Library Physical Name (work). Нажать Ок.
-
внутри модуля интерфейс объявляется как обычно. В Quartus поддержка SystemVerilog всегда была не очень, сейчас не знаю как обстоят дела
-
Verilog $random
Fitc ответил likeasm тема в Языки проектирования на ПЛИС (FPGA)
автоматизированно проще всего это сделать средствами tcl-скрипта: в random передать в качестве аргумента параметр или макроопределение, значение которого передается в команде запуска моделирования, сгенерировать средствами tcl случайный seed и передать его в команду запуска моделирования, при этом не забыть сохранить значение seed, чтобы в случае ошибки воспроизвести random-последовательность -
Verilog $random
Fitc ответил likeasm тема в Языки проектирования на ПЛИС (FPGA)
random генерирует псевдослучайные значения в соответствии с алгоритмом генерации псевдослучаных значений, впервые определенном ЕМНИП в стандарте IEEE 1364-2001. Аргументом является начальное значение генератора псевдослучаных чисел (seed). Для одинакового seed последолвательность псевдослучайных значений между запусками моделирования не изменяется. -
Проблема с ModelSim
Fitc ответил jenya7 тема в Среды разработки - обсуждаем САПРы
Если абсолютный установочный путь содержит неанглийские или спец. символы, то можно попробовать переустановить по нормальному пути Попробуйте создать проект через командную строку, выполнив в окне transcript следующую команду: project new c:/my_new_proj my_new_proj1 где c:/my_new_proj - местоположение проекта, my_new_proj1 - имя проекта -
Да. В 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
-
Так и есть, поскольку макроопределение подставляется перед компиляцией, а generate выполняется во время линковки (elaboration) В вашем случае можно порт объявить в виде массива, разрядность которого определяется через список параметров модуля, а в generate обращаться к соответствующему элементу массива
-
Приведите полный код. По данному описанию ничего не понятно ////////////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 ////////////////////////////////
-
Не надо определять в одной области видимости интерфейсы с одинаковыми именами. Modelsim сначала распознал первый интерфейс bus_a, встретив второй интерфейс с тем же именем, он переопределил интерфейс bus_a. Если в разделе "TOP 1" везде поменять bus_a на bus_b все успешно скомпилится и запустится
-
Если сделать `include "<имя подпапки>/<имя файла>" для каждого файла в индивидуальную область видимости, например, в отдельный module или package (есть только в SystemVerilog), то можно обращаться через имя модуля/пакета к параметру, например, my_module::my_param. Только не понятно зачем так делать, если параметр можно сделать массивом и обращаться к определенному элементу по индексу.
-
Потому что assign и initial являются параллельными процессами, порядок выполнения которых не определен. В данном случае первым выполняется процесс initial, когда assign еще не выполнился и не присвоил значение wire. А inline-инициализация статических переменных ЕМНИП выполняется раньше выполнения процессов. Если в initial в начале добавить задержку, то вариант с wire также сработает.
-
Вы хотите в ходе работы тестбенча, т.е. во время непрерывного моделирования делать include файлов? Это невозможно. Так как `include это директива препроцессора, выполняемая во время препроцессинга/компиляции. Значения localparam во время моделирования также нельзя изменять, они устанавливаются на этапе линковки (elaboration). Если же нужно по очереди перезапускать моделирование с разными значениями localparam, то следует написать tcl-скрипт, который найдет все подпапки с нужными вам файлами, добавит incdir к нужной подпапке в команду vlog и запустит моделирование на заданный промежуток времени (или пока моделирование не завершится), далее добавит incdir к следующей подпапке и т.д., пока есть не обработанные файлы. Если нужны именно параметры, то рекомендую добавить список параметров к моделируемому/тестируемому модулю. В модуль верхнего уровня добавить параметры, значения которых устанавливаются в vsim с помощью параметра -g или -G. Другой вариант - это промоделить все варианты одновременно, тогда нужно создать массив параметров и в generate создать экземпляр с нужным набором параметров, далее все это параллельно промоделить.
-
Если используете $urandom_range, значит пишете на SystemVerilog. $urandom_range не лучший вариант генерации псевдослучайных воздействий в SystemVerilog из-за равномерного распределения. Лучше использовать классы со случайными переменными и констрейнтами (см.стандарт или SystemVerilog for Veriifcation). Но на начальных этапах можете и $urandom_range использовать. Что мешает присвоить сигналу readdatavalid результат $urandom_range(1,0)?
-
localparam Path = "D:/Sig0/test"; localparam Filename = "/ref.hex"; reg[7:0] Number; initial begin Number = "1"; $readmemh({Path, Number, Filename}, RefMem); end
-
localparam Path = "D:\\Path\\"; localparam Filename = "Filename.txt"; $readmemh({Path, Filename}, mem);