Verilog: «Неуказанный стандарт ввода-вывода» и «Плохое размещение для маршрутизации между выводом ввода-вывода и BUFG» Ошибки - PullRequest
0 голосов
/ 09 октября 2018

Я довольно новичок в разработке Verilog и FPGA.В настоящее время я работаю над проектом по управлению двумя двигателями с использованием платы Basys 3 и моста H.

В настоящее время модуль построен для использования ШИМ для управления скоростью двигателя, посылая вывод на контакты ena и enbна H-мосту.Входы H в настоящее время постоянны для проверки управления ШИМ.

Короче говоря, я столкнулся с множеством ошибок ввода / вывода, которые я просто не смог полностью обернуть вокруг себя.

Вот мой основной модуль:

module RDrive(
    input clock,
    input BUTTON,
    input H1, H2, H3, H4,
    output ena, enb
    );

    wire clock, BUTTON, H1, H2, H3, H4;

    reg[1:0] speed;
    reg[3:0] counter, width;
    reg PWMtemp;

    wire ena, enb;

    // initial values
    initial begin
        counter <= 4'b0000;
        speed = 0;
        PWMtemp <= 0;
        width <= 0;
    end

    // Every button press increments speed value
    always @ (posedge BUTTON)
    begin
        speed <= speed + 1;
        // width adjusted for PWM module
        case (speed)
            2'b00 : width <= 4'b0000;
            2'b01 : width <= 4'b0101;
            2'b10 : width <= 4'b1010;
            2'b11 : width <= 4'b1111;
            default : width <= 4'b0000;
        endcase
    end

    // PWM
    always @ (posedge clock)
    begin
        if (counter < width) PWMtemp <= 1;
        else PWMtemp <= 0;
        counter <= counter + 1;
    end

    assign ena = PWMtemp;
    assign enb = PWMtemp;

endmodule

Вот мой тестовый стенд:

module RDrive_TB(

    );
    reg clock;
    wire ena = 0;
    wire enb = 0;
    reg BUTTON, H1, H2, H3, H4;

    initial begin
        BUTTON = 0;
        clock = 0;
        // H values for testing PWM speed control
        H1 = 1;
        H2 = 0;
        H3 = 1;
        H4 = 0;

        // Simulating button presses
        #1000;
        BUTTON = 1;
        #10;
        BUTTON = 0;

        #1000;
        BUTTON = 1;
        #10;
        BUTTON = 0;

        #1000;
        BUTTON = 1;
        #10;
        BUTTON = 0;

        #1000;
        BUTTON = 1;
        #10;
        BUTTON = 0;

    end

    // clock generator
    always begin
        #1 clock = ~clock;
    end

    RDrive RDriveTest(clock, BUTTON, H1, H2, H3, H4, ena, enb);


endmodule

и вот мои ограничения:

set_property PACKAGE_PIN W5 [get_ports CLK100MH]
set_property IOSTANDARD LVCMOS33 [get_ports CLK100MH]
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports 
CLK100MH]

set_property PACKAGE_PIN U18 [get_ports BUTTON]
set_property IOSTANDARD LVCMOS33 [get_ports BUTTON]

##Sch name = JA8
set_property PACKAGE_PIN K2 [get_ports {enb}]
set_property IOSTANDARD LVCMOS33 [get_ports {enb}]

Первая ошибка (возникшая во время реализации), которую я получил, была такой:

ОШИБКА: [Место 30-574] Плохое размещение для маршрутизации между выводом ввода-вывода и BUFG.

Я сделал несколькоисследования, и я думаю, что проблема была результатом того, что всегда @ (заданная КНОПКА) не точно в срок с часами.Поэтому я добавил эту строку в ограничения, чтобы игнорировать ошибку:

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets BUTTON_IBUF]

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

ОШИБКА: [DRC NSTD-1] Неуказанный стандарт ввода-вывода: 1 из 4 логических портов использует значение стандарта ввода-вывода (IOSTANDARD) 'ПО УМОЛЧАНИЮ »вместо назначенного пользователем конкретного значения.

Насколько я понимаю, эта ошибка возникает, когда входам / выходам не назначается начальное значение, поэтому они принимают любое значение« ПО УМОЛЧАНИЮ ».Я возился с начальными значениями и типами значений каждого из «проблемных выводов», которые были перечислены.Я смог исправить большинство из них, но в настоящее время «часы» - единственный оставшийся проблемный штифт.Я уже некоторое время пытаюсь починить часы, но безуспешно.

Некоторая помощь будет принята с благодарностью, спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

1 / Вы не должны использовать @ (posedge BUTTON) по двум причинам:

  • Вы не отменили нажатие кнопки, поэтому одно нажатие может вызвать несколько приращений скорости.

  • В таком простом дизайне все должно работать от одних часов.

Вы должны синхронизировать ввод кнопок с часами, а затем добавить счетчик + логику кпроверьте, является ли сигнал стабильным (отскок прекратился).

2 / Сообщение об ошибке очень четкое и конкретное:

Unspecified I / O Standard: 1 из 4 логических портов....

Все, что я сделал, это проверил все ваши порты ввода / вывода и проверил ваши ограничения выводов.Я не вижу ограничений для сигнала ena.

...