Имитация компилятора Xilinx FIR с файлом COE с использованием GHDL

Ни на одном из форумов, которые я смог найти, мне не задавали вопросов, и я не смог найти, как это сделать, используя документацию GHDL. Очевидно, у меня недостаточно репутации, чтобы задать вопрос GHDL в SuperUser (у них нет тегов), поэтому я должен спросить здесь.

Я пытаюсь смоделировать ядро ​​DSP, которое содержит несколько самописных ядер vhdl, а также несколько ядер Xilinx coregen с использованием GHDL. Я должен признать, что я довольно новичок в GHDL, но не новичок в VHDL. Я знаю, что логика рассматриваемого ядра и тестового стенда верна, поскольку она хорошо моделируется с использованием ISim. Однако у программы есть свои ограничения, поэтому я хочу попробовать GHDL.

Тем не менее, GHDL, похоже, не справляется с имитацией компилятора Xilinx FIR из-за отсутствия файла фильтра.

Я настраиваю свою среду моделирования, используя приведенные ниже фрагменты Makefile.

#GHDL CONFIG
GHDL_CMD    = ghdl
GHDL_FLAGS  = --ieee=synopsys --warn-no-binding

# vhdl filebase
SRCBASE  = ../../../source
ISEBASE  = /opt/Xilinx/14.7/ISE_DS/ISE/vhdl/src

####################
# import all the necessary source files 

# first the external libraries
$(GHDL_CMD) -i $(GHDL_FLAGS)                   --work=unisim        $(ISEBASE)/unisims/{,primitive/}*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS)                   --work=ieee_proposed $(ISEBASE)/ieee_proposed/*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS) --warn-no-library --work=xilinxcorelib $(ISEBASE)/XilinxCoreLib/*.vhd

# then the components roughly in the right order
# (the order actually does not matter, since the analysis step generates the correct order)
mkdir work
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/coregen/*.vhd
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/pcie/pkg_types.vhd  
$(GHDL_CMD) -i $(GHDL_FLAGS) --work=work $(SRCBASE)/DSP/*.vhd
#finally the main testbench (could be merged with the above)
$(GHDL_CMD) -i $(GHDL_FLAGS) dsptop_tb.vhd

########################
# create the Make file (the binding warning is disabled due to the many generates in the xilinx core libraries)
# also analyzes the design and generates the correct hierarchy strcture
$(GHDL_CMD) -m $(GHDL_FLAGS) -fexplicit --work=work dsp_top_tb

# run the stuff
$(GHDL_CMD) -r $(GHDL_FLAGS) -fexplicit --work=work dsp_top_tb

как вы можете понять из операторов импорта, мои исходные файлы на самом деле находятся в другом каталоге, что, однако, не беспокоит GHDL.

До последней инструкции все работает нормально. Однако при выполнении последней команды я получаю сообщение об ошибке:

endfile with a non-opened file

from: xilinxcorelib.fir_compiler_v6_3(behavioral).fn_read_mif_file at fir_compiler_v6_3.vhd:1648

ghdl:error: error during elaboration

Я считаю, что проблема в том, что мой FIR-компилятор создается с использованием Xilinx FIR-компилятора и использует файл COE для указания коэффициентов фильтра. Строка, в которой возникает ошибка, фактически открывает файл с указанием коэффициентов фильтра. В файле VHDL, сгенерированном coregen, он указан здесь

-- Configuration specification
  FOR ALL : wrapped_decimator_7fold USE ENTITY XilinxCoreLib.fir_compiler_v6_3(behavioral)
    GENERIC MAP (
      c_coef_file => "decimator_7fold.mif", -- < Problematic file

Теперь мой вопрос: как заставить GHDL искать файл. Я уже скопировал его в папку, где выполняется команда запуска. Насколько я могу судить, я не могу импортировать файлы, отличные от VHDL, для распознавания GHDL. Итак, как я могу смоделировать фильтр, созданный FIR-компилятором, с помощью GHDL?

Я надеюсь, что кто-то знает, как это сделать.

Заранее спасибо!

Привет, спасибо, что нашли время.

T0eJam 10.04.2019 09:52

Как я изначально сказал, это не Makefile, а просто фрагменты, которые я считаю важными, поскольку они определяют структуру папок и их расположение, а также то, как я запускаю ghdl. C_ELABORATION_DIR на самом деле хороший намек, я его пропустил. НО... как я сказал в конце, я пытался скопировать файл .mif в папку, где выполняется ghdl, но безрезультатно. Я постараюсь указать этот дженерик напрямую. Ваше здоровье

T0eJam 10.04.2019 09:58
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
317
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

@user1155120

Ваше предложение было абсолютно правильным. К сожалению, у меня было больше mif-файлов, чем я знал, и GHDL на самом деле не указал, на какой из них он жаловался. Я узнал об этом, установив параметр c_elaboration_dir напрямую и, в конечном итоге, скопировав неисправный VHD-файл и вставив оператор отчета.

В конце концов, решение, к которому я пришел, заключалось в том, чтобы скопировать все файлы mif в каталог выполнения ghdl, т.е. cp $(SRCBASE)/coregen/*.mif ./ в мейкскрипте. Это решило проблему. Вы хотите опубликовать свой ответ, чтобы я мог принять его в качестве решения, или вы довольны кудо?

Спасибо еще раз!

Это больше похоже на комментарий, чем на ответ.

user1155120 10.04.2019 12:07

Зачем? В нем указано решение проблемы, т.е. копирование всех файлов mif.

T0eJam 10.04.2019 15:01

См. Как задать хороший вопрос? и Как написать хороший ответ?. Я отложил последнюю ссылку, не отвечая на вопрос как есть. Полезной частью вашего вопроса является сообщение об ошибке, содержащее имя файла (найдено в исходном коде ISE 14.7 XilinxCoreLib VHDL). Ваша проблема не может быть воспроизведена без минимальный воспроизводимый пример, вместо этого ее можно устранить.

user1155120 11.04.2019 00:24

VHDL ожидает, что пользовательский код сообщит об ошибках. Строка 1646 fir_compiler_v6_3.vhd использует file_open, который записывает в filestatus тип FILE_OPEN_STATUS (предположительно пишет NAME_ERROR). Это код Xilinx, вы можете винить их. С исходным кодом fir_compiler_v6_3.vhd вы можете устранять неполадки, сообщая о статусе файла и C_ELABORATION_DIR и C_COEF_FILE (вместе путь) вместо MCVe. VHDL следует стандарту интерфейса POSIX, включая определение абсолютного пути к файлу из текущего рабочего каталога (где выполняется ghdl).

user1155120 11.04.2019 00:26

Еще раз спасибо, что нашли время. Ваш последний комментарий, конечно же, является кровавой подробностью того, что я сделал для устранения неполадок. Но я не думаю, что в ответе обязательно должно быть указано, КАК я пришел, чтобы найти ответ. Я также не думаю, что в этом случае был необходим поддающийся проверке пример, поскольку я предполагал, что кто-то с экспертными знаниями (например, вы) тоже посмотрит на мой (уже довольно обширный) текст и подскажет, как решить проблему. Что и произошло, поэтому я считаю, что предоставил достаточно информации для решения проблемы. Полный пример означал бы публикацию полного тестового стенда.

T0eJam 11.04.2019 08:40

То, что я на самом деле считаю, что мне не хватает в моем ответе, - это ваше первое и последнее предложение, которое на самом деле объясняет то, что мне не хватает. Но именно поэтому я попросил вас опубликовать ответ, чтобы я мог принять его как решение. И еще: решение проблемы (если не копировать и не изменять файл coregen vhdl верхнего уровня) состоит в том, чтобы скопировать все файлы mif в каталог выполнения ghdl.

T0eJam 11.04.2019 08:42

Другие вопросы по теме