Beenmagic
Newbie level 1
- Joined
- Jan 15, 2014
- Messages
- 1
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1
- Activity points
- 7
Hello,
I need help with one program, which i am trying to make for Altera DE2, I am just basic programmer in verilog and I would be really happy if you'll help me. My problem is so I don't know how to make so when I push button for >= MAX_TIME so I need set diods on 18'b000000000000000000 and so on fourth mode I need to make cyclic turning on diods from left (only on fifth diods from right). Please could you tell me how to make it? Here is my code, but maybe it could be made better (especially mode 5 "Kit")
...and this is code for display:
I need help with one program, which i am trying to make for Altera DE2, I am just basic programmer in verilog and I would be really happy if you'll help me. My problem is so I don't know how to make so when I push button for >= MAX_TIME so I need set diods on 18'b000000000000000000 and so on fourth mode I need to make cyclic turning on diods from left (only on fifth diods from right). Please could you tell me how to make it? Here is my code, but maybe it could be made better (especially mode 5 "Kit")
Code:
module nios_DE2_demo
(
CLOCK_50,
KEY,
HEX0,
LEDR
);
input CLOCK_50;
input [3:0] KEY;
output [6:0] HEX0;
output reg [17:0] LEDR;
reg [2:0] mode;
reg [2:0] pmode;
parameter LAST_MODE = 3'b101;
reg [7:0] delay;
reg switching;
parameter MAX_DELAY = 18'b111111111111111111;
assign switchbtn = KEY[0];
reg switchBtnPressed;
Display(mode, HEX0);
reg [3:0] p_delay;
reg countdown;
reg backward;
always@(posedge CLOCK_50) begin
if(!switchbtn) begin
if(!switchBtnPressed) begin
if(delay >= MAX_DELAY) begin
mode = 8;
end
else begin
if(mode == LAST_MODE)
mode = 0;
else begin
mode = mode + 1;
end
end
switchBtnPressed = 1;
end
end
else
switchBtnPressed = 0;
end
clk_div divider1
(
.CLK(CLOCK_50) ,
.RST(switchbtn) ,
.CLK_DIV(clk_div) // output CLK_DIV_sig
);
defparam divider1.divider = 4_000_000;
always@(posedge clk_div) begin
delay = delay + 1;
case(mode)
// constant lighting
3'b000: begin
LEDR = 18'b000000000000000000;
delay = 0;
pmode = mode;
end
3'b001: begin
LEDR = 18'b11111;
pmode = mode;
end
// flashing
3'b010: begin
if(pmode == 3'b001) begin
p_delay = 0;
pmode = mode;
LEDR = 18'b11111;
end
if(p_delay == 4'b1111) begin
LEDR = 18'b00000;
countdown = 1;
end
if(p_delay == 0) begin
LEDR = 18'b11111;
countdown = 0;
end
if(countdown)
p_delay = p_delay - 1;
else
p_delay = p_delay + 1;
end
// different speed of flashing
3'b011:
if(LEDR == 18'b11111) begin
LEDR = 18'b00000;
pmode = mode;
end
else begin
LEDR = 18'b11111;
pmode = mode;
end
// gradual switching on
3'b100:
if(LEDR != 18'b00000) begin
LEDR = 5'b00001;
LEDR = LEDR << LEDR + 1'b1;
LEDR = 5'b10000;
end
else begin
LEDR = LEDR << LEDR - 1'b1;
LEDR = 5'b00001;
end
// KIT - night rider effect
3'b101:
if(pmode == 3'b100) begin
LEDR = 5'b10000;
pmode = mode;
backward = 1;
end
else begin
if((LEDR == 5'b10000) || (LEDR == 5'b00000)) begin
if(backward == 0) begin
backward = 1;
if (LEDR == 1'b1) begin
LEDR = LEDR << 1;
end
else begin
LEDR = LEDR >> 1;
end
end
else begin
LEDR = LEDR << 1;
backward = 0;
LEDR = 1'b1;
end
end
else begin
if(backward == 0) LEDR = LEDR << 1;
else LEDR = LEDR >> 1;
end
end
3'b111:
if(delay >= MAX_DELAY) begin
LEDR = 18'b000000000000000000;
end
endcase
end
endmodule
Code:
module Display(binnum, display);
input [3:0] binnum;
output [6:0] display;
reg [6:0] number;
parameter nula = 7'b1000000; // 0111111;
parameter jedna = 7'b1111001; // 0000110;
parameter dve = 7'b0100100; // 1011011;
parameter trojka = 7'b0110000; // 1001111;
parameter ctyri = 7'b0011001; // 1100110;
parameter pet = 7'b0010010; // 1101101;
parameter sest = 7'b0000010; // 1111101;
parameter sedum = 7'b1111000; // 0000111;
parameter osum = 7'b0000000; // 1111111;
parameter devet = 7'b0010000; // 1101111;
parameter A = 7'b0001000; // 1110111;
parameter B = 7'b0000011; // 1111100;
parameter C = 7'b1000110; // 0111001;
parameter D = 7'b0100001; // 1011110;
parameter E = 7'b0000110; // 1111001;
parameter F = 7'b0001110; // 1110001;
parameter G = 7'b1000000; // 1110001;
assign display = number;
always @(binnum)
case(binnum)
4'b0000: number <= nula;
4'b0001: number <= jedna;
4'b0010: number <= dve;
4'b0011: number <= trojka;
4'b0100: number <= ctyri;
4'b0101: number <= pet;
4'b0110: number <= sest;
4'b0111: number <= sedum;
4'b1000: number <= osum;
4'b1001: number <= devet;
4'b1010: number <= A;
4'b1011: number <= B;
4'b1100: number <= C;
4'b1101: number <= D;
4'b1110: number <= E;
4'b1111: number <= F;
4'b1001: number <= G;
endcase
endmodule