2012-01-16 2 views
1

Я хочу иметь счетчик в 2 сек в моей петле цикла, чтобы между каждой итерацией пробел составлял 2 секунды. Я пытаюсь иметь сдвигающийся светодиодный дисплейКак поставить счетчик на 2 секунды в петлю цикла

Код:

parameter n =10; 
integer i; 

[email protected](*) 
begin 
    for(i=0;i<n;i=i+1) 
    begin 
     LEDR[i]=1'b1; 
     //2 second counter here 
    end 

end 
+0

Можете уточнить? В этом коде есть только одно задание. –

+0

Я бы предложил использовать встроенное решение (микроконтроллер) вместо ASIC/FPGA, но если вы все еще хотите использовать решение Verilog/FPGA, тогда вам, возможно, придется продолжать работу, поскольку @Josh указала ИЛИ использовать некоторые FPGA и C-библиотеку для реализации мигания/сдвига СВЕТОДИОД – wisemonkey

ответ

3

Я думаю, что этот модуль реализует то, что описывал Джош. Этот модуль создаст два регистра, регистр счетчика (counter_reg) и регистр сдвига (leds_reg). Счетчик регистров будет увеличиваться один раз за такт, пока он не перевернется. Когда он перевернется, переменная «tick» будет равна 1. Когда это произойдет, сдвиговый регистр будет вращаться на одну позицию влево.

module led_rotate_2s (
    input wire clk, 
    output wire [N-1:0] leds, 
); 

parameter N=10;     // depends on how many LEDs are on your board 
parameter WIDTH=<some integer>; // depends on your clock frequency 
localparam TOP=<some integer>; // depends on your clock frequency 

reg [WIDTH-1:0] counter_reg = 0, counter_next; 
reg [N-1:0] leds_reg = {{N-1{1'b0}}, 1'b1}, leds_next; 

wire tick = (counter_reg == 0); 

assign leds = leds_reg; 

always @* begin : combinational_logic 
    counter_next = counter_reg + 1'b1; 
    if (counter_next >= TOP) 
     counter_next = 0; 
    leds_next = leds_reg; 
    if (tick) 
     leds_next = {leds_reg[N-2:0], leds_reg[N-1]}; // shift register 
end 

always @(posedge clk) begin : sequential_logic 
    counter_reg <= counter_next; 
    leds_reg <= leds_next; 
end 

endmodule 
4

Какова ваша желаемая функциональность? Я предполагаю: сдвиг светодиода на каждые 2 секунды, удерживая все остальные светодиоды? «Скользящий светодиод» ...

Кроме того, я предполагаю, что ваша цель - панель типа FPGA.

В мире FPGA нет бесплатного «ожидания X времени». Ключ к тому, что вы пытаетесь сделать, подсчитывая тактовые циклы. Вам нужно знать тактовую частоту часов, которые вы используете для этого блока. Как только вы это узнаете, вы можете подсчитать, сколько краев тактовых импульсов вам нужно подсчитать, прежде чем «действие» необходимо предпринять.

Я рекомендую два процесса. В одном вы увидите нарастающий фронт часов и запустите счетчик достаточного размера, чтобы он перевернулся через каждые две секунды. Каждый раз, когда ваш счетчик равен 0, вы устанавливаете «флаг» для одного такта.

Другой процесс будет просто следить за появлением «флага». Когда флаг появляется, вы переключаете этот светодиод и выключаете все остальные светодиоды.

Смежные вопросы