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

    

Darky777

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
  • День рождения 07.07.1994

Информация

  • Город
    СПб

Посетители профиля

638 просмотров профиля
  1. Киньте, пожалуйста. Хотелось бы посмотреть.
  2. Благодарю! это именно то, что нужно. Это помогло мне найти вот этот док, который подробнее обо всем рассказывает. Ранее никогда на него не натыкался.
  3. Добрый день, уважаемые форумчане! Возник странный и, возможно, глуппый вопрос. Есть некий модуль TOP, который, как не трудно догодатся, является верхним в иерархии и все констрейны в частности с распиновкой под FPGA пишется под него (кроме распиновки и заданных клоков там ничего нет). Модуль TOP состоит из модулей А, B и т.д. Требуется оценить, какое количество ресурсов FPGA будет отнимать модуль А. Для этого я делаю топовым файлом в проекте модуль А и ставлю на сборку до стадии имплемента. В связи с тем, что количество IO портов значительно превышает допустимое количество портов у FPGA, стадия Implementation не подходит к концу и желаемый отчет об утилизации ускользает. Воркэраунд для меня был следующим: ставлю в настройках проекта кристалл пожирнее и собираю заново и такой способ меня устраивает, кроме того, что мне приходится ждать, пока соберутся IP-корки, которые входят в модуль А. Собственно вопрос звучит следующим образом: есть ли некая настройка в проекта в Vivado, включив которую можно собрать проект вне контекста проекта, как корку?
  4. Из-за подобных случаев перешел на QuestaSim. В нем много инструментария, но мне он нравится потому, что он дотошнее проверяет проект и соответственно чаще ругается.
  5. Если речь про JESD204b, то был опыт. Как раз с ZCU102. тоже были проблемы с синхронизацией .В итоге задали клок внешним общим и точным опорником на один из разъемов SMA в zcu102 и на АЦП. Все проблемы с синхронизацией сразу пропали. UPD: Пардон. мой комментарий неуместен. Не обратил внимание на ваш заявленный АЦП. В нем отсутствует JESD
  6. Отлично, идею я понял. еще раз спасибо. Осталось еще разобраться, насколько это "переносимый" вариант для других семейств зайлинска.
  7. Действительно, для этого нужно будет софт писать.. Спасибо!
  8. Если в лоб, то я бы попробовал воспользоваться функцией. Но как по ресурсам оптимизирует синтезатор - мне неизвестно. Это вариант использования за один такт. function [4:0] count_ones; input [31:0] vector; integer i; begin count_ones = 0; for (i = 0; i < 32; i=i+1) begin count_ones = count_ones + vector[i]; end end endfunction wire [31:0] a; wire [4:0] result_a; assign a = ... ; assign result_a = count_ones(a);
  9. Если честно, не совсем понял решения.. Через инстанс примитива или самописный вериложный файл суть не меняется - нужно указать путь к файлу инициализации, будь то .hex или .mem. Речь же идет об этом документе? О дефайнах я не думал.. Надо попробовать. Если что-то получится - отпишу в этой теме
  10. Привет всем! Есть такая задача: инициализировать память в верилоговских исходниках через функцию readmemh/readmemb в Vivado, причем так, чтобы файл грамотно подцеплялся не только в Vivado, но и в симуляции в QuestaSim/Modelsim. module sdp_bram #( parameter P_MEM_SIZE = 16384 , parameter P_DATA_SIZE = 72 , parameter P_ADDR_WIDTH = 14 , parameter P_NBPIPE = 1 ,// Number of pipeline Registers in BRAM P_NBPIPE =>1 parameter P_INIT_FILE = "" ) ( input clk , input wea , input rstb , input regceb, // Output Register Enable input mem_en, // Memory Enable input [ P_DATA_SIZE-1:0] dina , input [P_ADDR_WIDTH-1:0] addra , input [P_ADDR_WIDTH-1:0] addrb , output logic [ P_DATA_SIZE-1:0] doutb ); (* ram_style="block" *) logic [P_DATA_SIZE-1:0] mem [P_MEM_SIZE]; logic [P_DATA_SIZE-1:0] mem_reg; logic [P_DATA_SIZE-1:0] mem_pipe [P_NBPIPE - 1:0]; logic mem_en_pipe_reg[P_NBPIPE:0]; // Pipelines for memory enable generate if (P_INIT_FILE != "") begin: use_init_file initial $readmemh(P_INIT_FILE, mem, 0, P_MEM_SIZE-1); end else begin: init_bram_to_zero integer ram_index; initial for (ram_index = 0; ram_index < P_MEM_SIZE; ram_index = ram_index + 1) mem[ram_index] = {P_DATA_SIZE{1'b0}}; end endgenerate .... Эта память - часть проекта, в котором участвует несколько человек. У всех разные операционки Linux Windows, разные пути до проектов. У меня была идея: выцепить из вивадо какую-нибудь переменную окружения, сообщающая о расположении проекта и через относительный путь указывать файл данных для памяти. Основывалась она на том, что в файле проекта .xpr я встретил кучу вот таких строк: <File Path="$PPRDIR/../my_module.v"> <FileInfo> <Attr Name="UsedIn" Val="synthesis"/> <Attr Name="UsedIn" Val="implementation"/> <Attr Name="UsedIn" Val="simulation"/> </FileInfo> </File> Вивадо осознает, что она находится в какой-то директории. Однако если в tcl консоль в виваде ввести : puts "$PPRDIR" то удачно идешь куда подальше он тебе сообщит, что такой переменной не объявлено. Далее я расуждал так: Если где-то получить таки знание о переменной, а потом попробовать проиниализировать память например вот так parameter P_INIT_FILE = "$PPRDIR/../file.hex"; sdp_bram #( .P_MEM_SIZE(P_MEM_SIZE), .P_DATA_SIZE(P_DATA_SIZE), .P_ADDR_WIDTH(P_ADDR_WIDTH), .P_NBPIPE(P_NBPIPE), .P_INIT_FILE(P_INIT_FILE) ) i_sdp_bram ( .clk (clk ), .rstb (1'b0 ), .mem_en(1'b1 ), .wea (wea ), .regceb(reb ), .dina (dina ), .addra (addra), .addrb (addrb), .doutb (doutb) ); То должно сработать. По правде не говоря я не знаю, прокатило ли бы это. Знаю, что с коркой все отлично срабатывает, однако этот вариант не подходит, поскольку под каждую новую память с другими настройками нужно генерить новую корку. Проще говоря, прошу вас поделиться опытом и идеями. Гуглить пытался, но тщетно. Vivado 2018.2.
  11. Представим что есть вход ... input [ 31:0 ] data_i; ... И что идейно он "как-то" парсится. Выделять из вектора нужные биты можно, но не интуитивно. поэтому можно просто сделать тайпдеф typedef struct packed { logic [7:0] a; logic [7:0] b; logic [7:0] c; logic [7:0] d; } data; приводить вход к типу и работать со структурой а не с битами.
  12. аккаунт в pudn

    Благодарю!
  13. аккаунт в pudn

    Приветствую! Помогите, пожалуйста, скачать http://en.pudn.com/Download/item/id/2458114.html
  14. Вообще, действительно, я не знаю о каких либо ограничений в применении тасков при разработке в железе, поскольку никогда так не делал. Видимо это просто не укладывается в мою парадигму разработки. Как я в свое время понял, task предназначен для формирования некого сценария работы чего либо, то бишь для верификации/тестов. А если что-то хочется посчитать и при этом не нагромоздить - использовать функции (как у вас). И ведь неспроста ведь операторы времени (#, wait, @) отсутствуют в функциях. Хотелось бы, чтобы и другие разработчики оставили мнение по этому поводу. Использует ли кто таск в синтезе?
  15. рассихнрон сейчас, наверное, у нас с вами, поскольку я не понял ответа на вопрос.. в каком моменте времени вы считываете данные с SSPI_TX_DATA и по какому критерию? Вы тестировали этот модуль? не хватает информации, чтобы разобраться Как я понимаю, тестбенчей не было, раз вы вывели значение на дисплей. Попробуйте в лоб вывести значение SSPI_TX_DATA. Как мне подсказывает интуиция результат будет тот же.