почему светодиоды остаются в исходном состоянии после программирования программы плавного освещения, в то время как симуляция прошла без ошибок? - PullRequest
0 голосов
/ 23 октября 2019

Я новичок в ПЛИС, и недавно я попробовал очень простую программу с плавным светом, которая хорошо работала на моем компьютере. Однако светодиоды на моем Zybo остаются в исходном состоянии (светится только самый левый светодиод) независимо от того, как долго я жду. Я искал решение в течение недели и пытался найти способ позаимствовать другую доску у моего друга, но проблема просто существует.

Вот мой код 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;

конечный модуль

Вот мое ограничение

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

И результат моделирования показан ниже: Результат моделирования

Послепрограммирование моего устройства Светодиоды просто остаются в исходном состоянии

1 Ответ

0 голосов
/ 23 октября 2019

После программирования светодиоды моего устройства просто остаются в исходном состоянии

Ваши светодиоды не остаются в состоянии инициализации, потому что все четыре из них светятся. В состоянии init у вас есть «1000». Это будет один включенный и три выключенных (или наоборот, в зависимости от того, как они подключены).

То, что происходит, заключается в том, что ваша плата ведет себя так, как показывает результат вашего моделирования: каждый тактовый цикл горит следующий светодиодвверх. Ваши часы, вероятно, имеют частоту около 10 МГц или 100 МГц, поэтому вы этого не видите.

Чтобы исправить это, вам нужны две вещи:

  1. Вам нужно считать дольше. Насколько велико, зависит от вашей тактовой частоты, поэтому выясните, что это такое.

  2. Исправьте код счетчика. Как только значение счетчика достигнуто, оно больше не считается. Это остается в 24:00. Ваша форма волны не показывает этого, но ваш код очевиден.

...