Verilog:“未指定的I / O标准”和“ IO引脚与BUFG之间的路由布置不当”错误

时间:2018-10-09 05:02:22

标签: verilog vivado pwm

我对Verilog和FPGA开发还很陌生。我目前正在从事一个使用Basys 3板和H桥控制两个电机的项目。

该模块当前构建为使用PWM控制电机速度,将输出发送到H桥的ena和enb引脚。为了测试PWM控制,H输入当前是恒定的。

长话短说,我遇到了各种各样的I / O错误,但我还无法完全解决。

这是我的主要模块:

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}]

我遇到的第一个错误(在实施过程中发生)是

错误:[Place 30-574] IO引脚和BUFG之间的路由布置不当。

我做了一些研究,我认为问题是由于     总是@(posege按钮) 时钟不准时。 所以我将这一行添加到约束中以忽略该错误:

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets BUTTON_IBUF]

这使我能够成功运行实施。但是,在尝试生成位流时遇到了以下错误:

错误:[DRC NSTD-1]未指定I / O标准:4个逻辑端口中有1个使用I / O标准(IOSTANDARD)值'DEFAULT',而不是用户分配的特定值。

据我了解,当没有为输入/输出分配初始值时,就会发生此错误,因此它们会假定“ DEFAULT”值是什么。我摆弄了列出的每个“问题引脚”的初始值和值类型。我能够修复其中的大多数问题,但目前“时钟”是唯一剩下的问题引脚。我一直在尝试修复时钟,但是没有运气。

一些帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

1 /您不应使用@ (posedge BUTTON)有两个原因:

  • 您尚未取消按钮的反跳操作,因此单按一次即可触发多个速度增量。

  • 在像这样的简单设计中,所有内容都应运行一个时钟。

您应该将按钮输入与时钟同步,然后添加一个计数器+逻辑以检查信号是否稳定(弹跳已停止)。

2 /错误消息非常明确且具体:

  

未指定的I / O标准:4个逻辑端口中的1个。...

我所做的就是检查所有I / O端口并检查引脚约束。我认为ena信号没有任何限制。