我是FPGA初学者,最近我尝试了一个非常简单的流光程序,该程序在我的计算机上运行良好。但是,无论我等待多长时间,Zybo上的LED仍保持初始状态(仅最左边的LED亮起)。我搜索了一个星期的解决方案,并尝试了任何可以想到的方法,甚至向我的朋友借了另一块板,但问题仍然存在。
这是我的Verilog代码
top.v
module top(
input clk,
output [3:0] led
);
reg [23:0] cnt_reg;
reg [3:0] led_reg;
initial begin
cnt_reg <= 0;
led_reg <= 4'b1000;
end
always @(posedge clk)begin
if(cnt_reg == 24'h00000f)
begin
if(led_reg == 4'b0001)
led_reg <= 4'b1000;
else
led_reg <= led_reg>>1;
end
else
cnt_reg <= cnt_reg + 1;
end
分配led = led_reg;
endmodule
这是我的约束
set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { led[0] }]; #IO_L23P_T3_35 Sch=LED0
set_property -dict { PACKAGE_PIN M15 IOSTANDARD LVCMOS33 } [get_ports { led[1] }]; #IO_L23N_T3_35 Sch=LED1
set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { led[2] }]; #IO_0_35=Sch=LED2
set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { led[3] }]; #IO_L3N_T0_DQS_AD1N_35 Sch=LED3
set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L11P_T1_SRCC_35 Sch=sysclk
这是我的测试台
`timescale 1ns/1ps
module tb();
reg clk;
wire [3:0] led;
top U0 (.clk(clk), .led(led));
parameter Period = 10;
always begin
clk = 1'b0;
#(Period/2) clk=1'b1;
#(Period/2);
end
initial begin
clk = 1'b0;
#1000000;
end
endmodule
仿真结果如下: the simulation result
对设备进行编程后 LEDs just remain the initial state
答案 0 :(得分:0)
在对我的设备LED进行编程之后,只是保持初始状态
您的LED不会不保持处于初始化状态,因为它们全部四个都点亮。在初始化状态下,您有“ 1000”。
发生的事情是,您的电路板的行为就像您的模拟结果所示:每个时钟周期,下一个LED亮起。您的时钟可能在10MHz或100MHz左右,所以您看不到它。
要解决此问题,您需要做两件事:
您需要计算更长的时间。多少取决于您的时钟频率,所以找出它是多少。
修复您的计数器代码。一旦达到计数器值,它将不再计数。它保持在24'h00000F。波形没有显示出来,但是代码很明显。