verilog - Verilog:“未指定的 I/O 标准”和“IO 引脚和 BUFG 之间的布线位置不佳”错误
问题描述
我对 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 之间的布线位置不佳。
我做了一些研究,我认为问题是由于总是@(posedge BUTTON)没有与时钟完全同步。所以我将此行添加到约束以忽略错误:
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets BUTTON_IBUF]
这使我能够成功运行实施。但是,我在尝试生成比特流时遇到了以下错误:
错误:[DRC NSTD-1] 未指定的 I/O 标准:4 个逻辑端口中有 1 个使用 I/O 标准 (IOSTANDARD) 值“DEFAULT”,而不是用户分配的特定值。
据我了解,当输入/输出未分配初始值时会发生此错误,因此它们假定“默认”值是什么。我摆弄了列出的每个“问题引脚”的初始值和值类型。我能够修复其中的大部分,但目前“时钟”是唯一剩下的问题引脚。我一直在尝试修复时钟一段时间,但没有运气。
一些帮助将不胜感激,谢谢!
解决方案
1/ 你不应该使用@ (posedge BUTTON)
有两个原因:
您尚未解除按钮的弹跳,因此单次按下即可触发多个速度增量。
在这样的简单设计中,一切都应该运行在一个时钟上。
您应该将按钮输入与时钟同步,然后添加一个计数器 + 逻辑以检查信号是否稳定(弹跳已停止)。
2/ 错误信息非常清楚具体:
未指定的 I/O 标准:4 个逻辑端口中的 1 个......
我所做的只是检查您所有的 I/O 端口并检查您的引脚约束。我看不到ena
信号的限制。
推荐阅读
- python - 在 CVXPY 中对 PSD 约束进行循环迭代
- django - DRF ListAPIView custom return not an object
- c++ - Which parts can I make, or nomake, while building Qt from source?
- reactjs - Trying to change the ReactMapGL cursor from the default hand icon to a pointer or crosshair
- c# - 如何检索 OpenFileDialog 使用的最后一个文件夹?
- java - The plugin flutter_plugin_android_lifecycle could not be built
- python - cursor.execute 的字符串而不执行
- javascript - Get all websocket messages in protractor
- python - Django PATCH 使用 set_password 方法请求更新密码
- ansible - 私有 gitlab 中的分子依赖