beapp
Newbie level 1
Hey! i'm doing a project in spartan 3e using fpga! i'm really trying to do a clock but i can't do it ...i don't know even how too start.. =( somebody know how to do a clock using fpga ?? tks !
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Then I guess some reading is in order.Hey! i'm doing a project in spartan 3e using fpga! i'm really trying to do a clock but i can't do it ...i don't know even how too start..
Hey! i'm doing a project in spartan 3e using fpga! i'm really trying to do a clock but i can't do it ...i don't know even how too start.. =( somebody know how to do a clock using fpga ?? tks !
if (falling_edge(clock)) then
-- do something
if (rising_edge(clock)) then
count <= count + 1;
if (count >= 0 and count < 10) then
pulse <= '0';
elsif (count >= 10 and count <= 20) then
pulse <= '1';
elseif (count > 20) then
count <= 0;
module main(
input wire clk,
output wire lcd_rs,
output wire lcd_rw,
output wire lcd_e,
output wire[3:0] lcd_data,
output wire sf_ce0
);
//------------------------------------------------------------------------------
localparam CMD=8'h00;
localparam CHR=8'h80;
localparam CODE_LENGTH=5'h14;
reg lcd_trgr=1'b0;
reg[7:0] lcd_code[CODE_LENGTH-1:0];
wire[CODE_LENGTH*8-1:0] lcd_code_flat;
wire lcd_busy;
genvar pk_idx;
generate
for(pk_idx=0; pk_idx<CODE_LENGTH; pk_idx=pk_idx+1)
begin: pack
assign lcd_code_flat[8*pk_idx+7:8*pk_idx] = lcd_code[pk_idx][7:0];
end
endgenerate
LcdMdl #(.L(CODE_LENGTH)) lcd (
.clk(clk),
.lcd_trgr(lcd_trgr),
.lcd_code_flat(lcd_code_flat),
.lcd_busy(lcd_busy),
.lcd_rs(lcd_rs),
.lcd_rw(lcd_rw),
.lcd_e(lcd_e),
.lcd_data(lcd_data),
.sf_ce0(sf_ce0)
);
//------------------------------------------------------------------------------
reg[23:0] count=0;
reg[3:0] bcd[2:0];
initial begin
bcd[0]=4'h0;
bcd[1]=4'h0;
bcd[2]=4'h0;
end
always @(posedge clk) begin
if(lcd_busy)
lcd_trgr<=1'b0;
if(&count) begin
bcd[0]= bcd[0]+ 1;
if(bcd[0]==10) begin
bcd[0]=4'h0;
bcd[1]= bcd[1]+ 1;
if(bcd[1]==10) begin // Change '10' to '6' for 60 seconds.
bcd[1]=4'h0;
bcd[2]= bcd[2]+ 1;
if(bcd[2]==10)
bcd[2]= 4'h0;
end
end
if(!lcd_busy) begin
lcd_code[0]<= (CMD| 8'h01);
lcd_code[1]<= (CHR| (bcd[2]+ 8'h30));
lcd_code[2]<= (CHR| (bcd[1]+ 8'h30));
lcd_code[3]<= (CHR| (bcd[0]+ 8'h30));
lcd_code[4]<=8'h00;
lcd_trgr<=1'b1;
end
end
count<= count+ 1;
end
endmodule