Я пишу интерфейсы для fpga и dsp, которые должны взаимодействовать с двухпортовой памятью, разделяемой элементом управления dpram в vhdl. У меня есть внешние входы-выходы, поступающие от шины SPI на одной стороне к fpag для связи с dsp, а с другой стороны есть камера для dsp. Так что мои вторжения похожи на Havinf, когда FIFO сбрасывается после каждого чтения и записи прерываний с помощью dsp.
Теперь моя проблема
- Я хочу включать некоторые прерывания за раз и отключать другие.
- При выполнении маскировки с помощью логической функции XOR другие прерывания, поступающие от UART, имеют таймаут.
- Когда это сделано, камера получает сигнал, но не может управляться.
Я использую следующий алгоритм для обработки всех асинхронных входов:
- В event2reg_array_proc: сохранить все входные данные в параллельные буферы «fifo_data_input_array», каждый вход (флаг) должен быть помещен в отдельный буфер.
- В reg_array2fifo_proc2: последовательно считывать каждый буфер и сохранять их в формате FIFO «fifo320x32».
- В основном автомате считывает вывод из FIFO и выполняет соответствующую обработку, каждый цикл считывает только одно значение, это должен быть один флаг.
Если вы получаете несколько флагов, которые остаются в регистре даже после обработки, причиной может быть:
- В event2reg_array_proc: и reg_array2fifo_proc2:, если один флаг (в буфере) был записан в fifo, он должен быть очищен из буфера. Я использую "fifo_cnt", чтобы управлять этим. Вы можете использовать симуляцию для проверки.
- Линейная камера отправляет сигнал FRAME_VALID так же, как и сигнал LINE_VALID, поэтому вы можете получить много CAM2DSP_FRAME_SYNC_FLAG с линейной камерой.
Так что любой может предложить какой-либо алгоритм для включения определенных прерываний, пока камера все еще обменивается данными с DSP.