возникли проблемы с настройкой двух контактов GB_IO

Я использовал следующий код, чтобы настроить fpga ICE40HX1K-VQ100 для ввода внешних часов:

 SB_GB_IO gb_io1 (
    .PACKAGE_PIN( clk ),
    .GLOBAL_BUFFER_OUTPUT( gclk )
 );

Это для контакта IOL_6B_GBIN7.

Само по себе это работает нормально, но мне также нужно было ввести внешний сигнал события, поэтому я добавил этот код:

SB_GB_IO gb_io2 (
   .PACKAGE_PIN( cmp ),
   .GLOBAL_BUFFER_OUTPUT( gcmp )
);

это для контакта IOR_61_GBIN2.

Ну, это не работает так хорошо. Я думал, что это то, что означает библиотека примитивных технологий. Если я просто использую clk, я в порядке. Вывод cmp не работает как провод. Когда я попытался использовать приведенный выше код, он все еще не работает и ведет себя так, как будто не видит сигнал на этом выводе.

Итак, после того, как я напряг свой мозг, пытаясь понять документацию, я должен кричать ДЯДЯ. Может ли кто-нибудь помочь мне с этим, пожалуйста?


person Steve Brown    schedule 23.04.2019    source источник


Ответы (1)


Я полагаю, что ответ заключается в том, что примитиву SB_GB_IO требуются некоторые параметры при использовании для вашего сигнала gcmp. В частности, может быть полезно указать что-то вроде defparam gb_io2.PIN_TYPE = 6'b000001;. Пожалуйста, обратитесь к SBT_ICE_Technology_Library.pdf (доступен либо на веб-сайте Lattice, либо в каталоге документации программного обеспечения iCEcube2), чтобы найти описание возможных параметров для примитивов.

Я не знаю ваших точных требований, вы уверены, что вам нужен глобальный буфер для сигнала gcmp? Возможно, что-то вроде следующего будет работать?

SB_GB_IO gb_io1 
  ( .PACKAGE_PIN(clk), 
    .OUTPUT_ENABLE(1'b1),
    .GLOBAL_BUFFER_OUTPUT(gclk)
    );
defparam gb_io1.PIN_TYPE = 6'b000001;
defparam gb_io1.PULLUP = 1'b0;
defparam gb_io1.NEG_TRIGGER = 1'b0;
defparam gb_io1.IO_STANDARD = "SB_LVCMOS";

SB_IO cmp_pad 
  (.PACKAGE_PIN(cmp), 
   .OUTPUT_ENABLE(1'b1), 
   .D_IN_0(gcmp)); 
defparam cmp_pad.PIN_TYPE = 6'b000001;
defparam cmp_pad.PULLUP = 1'b0;
defparam cmp_pad.NEG_TRIGGER = 1'b0;
defparam cmp_pad.IO_STANDARD = "SB_LVCMOS";

Добро пожаловать в Stack Overflow.

person Baard    schedule 25.04.2019
comment
Как я и писал, сигнал clk работал нормально. Первоначально я думал, что код симулятора будет работать для сигнала события. Я прочитал всю документацию и не мог понять, как эти контакты были настроены. Я хотел бы понять это, и если бы вы могли указать, где в документации я мог бы прочитать об этом, я был бы признателен. Я стараюсь не готовить этот код, но знаю, что я делаю и почему. - person Steve Brown; 27.04.2019
comment
@SteveBrown, я добавил в ответ нехорошую ссылку на документацию примитивов ICE40. Поскольку вы знаете, как использовать примитивы, я предположил, что у вас уже есть эта информация. - person Baard; 27.04.2019
comment
Спасибо за хорошую помощь, Баард. Я видел этот код, но у меня были проблемы с окружающей документацией. Я занимаюсь программированием более 40 лет и использовал более 20 различных языков, но, черт возьми, эта документация действительно была ясна как грязь. Я не люблю магические числа без адекватного объяснения или документации, они сводят меня с ума. Я пробую ваш код для строки clk и сообщу вам и остальным о моих результатах. В итоге я перешел к неглобальному контакту, чтобы обработать другое событие, и все выглядит нормально. - person Steve Brown; 28.04.2019
comment
Документации, на мой взгляд, в большинстве случаев явно не хватает. Очень жаль, потому что я думаю, что Silicon Blue многое сделала правильно. Я полагаю, вы знаете замечательный ресурс clifford.at/icestorm? Исходный файл ice65datasheet.pdf (если вы сможете его найти), хотя и устарел, также дает несколько подробностей о мышлении инженеров Silicon Blue. - person Baard; 29.04.2019