Можно ли разрешить несколько драйверов на провод? - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать процессор на ПЛИС, но я не знаю, как создать основную шину данных. В идеале, у меня будет проводная решетка, которая имеет несколько входов и выходов, которые включаются в разное время, но если я это сделаю, я получаю ошибку «Несколько сетей драйверов».

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


module Top(
    input [7:0] sw,
    output [7:0] led,
    input we,
    input oe,
    input clk
    );

    wire [7:0] regData;
    Register register (regData, we, oe, clk);

    assign led = regData;
    assign regData = sw;

endmodule

Точное сообщение об ошибке: «[DRC MDRV-1] Несколько сетей драйверов: Сеть led_OBUF [0] имеет несколько драйверов: register / led_OBUF [0] _inst_i_1 / O и sw_IBUF [0] _inst / O». " один из них для каждого бита в регистре (8 бит)

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Нет, не внутри ПЛИС.
Единственный способ - подключить шину данных к драйверам, поддерживающим три состояния. Но все современные ПЛИС (и ASIC) запрещают использование трех состояний на чипе. Вы обнаружите, что FPGA больше не имеют внутренних драйверов с тремя состояниями (или общих шин). Для совместного использования шины вам придется использовать мультиплексирование для объединения сигналов.

Один из способов сделать это - установить шину на все нули, когда она не используется / активна. Затем вы можете логически-ИЛИ все шины вместе. Это фактически то же самое, что мультиплексирование, но в более распределенном виде.

1 голос
/ 10 июля 2019

Предположительно, это ошибка вашего синтезатора, а не симулятора.Вы не дали достаточно кода - MCVE - чтобы показать, используете ли вы логику с тремя состояниями или нет, но независимо от того, используете вы это или нет, вы выбираете неправильный подход.

В прошлом людииспользовала логику трех состояний для реализации шин, потому что ресурсов маршрутизации было мало.Ресурс маршрутизации можно сохранить, управляя сетью из нескольких мест (например, каждый ведомый мог управлять общей шиной данных).Логика трех состояний, однако, противна.(Есть проблемы, вызванные конфликтом и проблемами, если ничто не приводит в движение шину.) Вы не хотите использовать это, если вам не нужно.И вам не нужно, потому что в современных чипах ресурс маршрутизации обильный.Так что не используйте логику трех состояний внутри вашего проекта;не используйте в своем дизайне сети с множественным управлением.

Вместо этого используйте обычные (с одиночным управлением) логические структуры.Например, для реализации шины данных необходимо иметь отдельные шины записи данных (у которых будет один драйвер - мастер шины) и множество шин чтения данных (каждая из которых будет иметь один драйвер - каждый подчиненный).Затем используйте обычный мультиплексор для мультиплексирования шин чтения данных.

...