Altera DE0でLチカ−ナイトライダー編

右に左にスクロールします。


module LEDScroll(
input in_clk,
input [9:0] in_switch,
input [2:0] in_button,
output [9:0] out_led,
output[7:0] seven_segment_0,
output[7:0] seven_segment_1,
output[7:0] seven_segment_2,
output[7:0] seven_segment_3);
// wires and regs
wire reset;
wire clk_1kHz;
wire clk_10Hz;
reg [9:0] _10bit_counter;
reg reg_direction; // 1 for R -> L, 0 for L -> R
// reset always 1
assign reset = in_switch[0];
// 1kHz clk
clk_scaler_1kHz clk_scaler_1kHz(in_clk, reset, clk_1kHz);
// 10Hz clk
clk_scaler_from_1kHz #(100) clk_scaler_10Hz(in_clk, reset, clk_1kHz, clk_10Hz);
// LED scroller
always @(posedge clk_10Hz or posedge reset)
begin
if (reset == 1'b1)
begin
_10bit_counter <= 10'b00_0000_0111; // how many LEDs to turn on simultaneously
reg_direction <= 1'b1;
end
else
begin
casex(_10bit_counter)
10'b1x_xxxx_xxx0:
begin
reg_direction <= 1'b0;
_10bit_counter <= _10bit_counter >> 1;
end
10'b0x_xxxx_xxx1:
begin
reg_direction <= 1'b1;
_10bit_counter <= _10bit_counter << 1;
end
default:
begin
if (reg_direction == 1'b1)
_10bit_counter <= _10bit_counter << 1;
else
_10bit_counter <= _10bit_counter >> 1;
end
endcase
end
end
assign out_led = _10bit_counter;
endmodule