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

    

Darky777

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

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

  • Посещение

Репутация

0 Обычный

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

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

Информация

  • Город
    СПб

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

584 просмотра профиля
  1. Из-за подобных случаев перешел на QuestaSim. В нем много инструментария, но мне он нравится потому, что он дотошнее проверяет проект и соответственно чаще ругается.
  2. Если речь про JESD204b, то был опыт. Как раз с ZCU102. тоже были проблемы с синхронизацией .В итоге задали клок внешним общим и точным опорником на один из разъемов SMA в zcu102 и на АЦП. Все проблемы с синхронизацией сразу пропали. UPD: Пардон. мой комментарий неуместен. Не обратил внимание на ваш заявленный АЦП. В нем отсутствует JESD
  3. Отлично, идею я понял. еще раз спасибо. Осталось еще разобраться, насколько это "переносимый" вариант для других семейств зайлинска.
  4. Действительно, для этого нужно будет софт писать.. Спасибо!
  5. Если в лоб, то я бы попробовал воспользоваться функцией. Но как по ресурсам оптимизирует синтезатор - мне неизвестно. Это вариант использования за один такт. 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);
  6. Если честно, не совсем понял решения.. Через инстанс примитива или самописный вериложный файл суть не меняется - нужно указать путь к файлу инициализации, будь то .hex или .mem. Речь же идет об этом документе? О дефайнах я не думал.. Надо попробовать. Если что-то получится - отпишу в этой теме
  7. Привет всем! Есть такая задача: инициализировать память в верилоговских исходниках через функцию 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.
  8. Представим что есть вход ... 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; приводить вход к типу и работать со структурой а не с битами.
  9. аккаунт в pudn

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

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