fpga实验确实挺有意思的,虽然目前自己的水平还不高,只自学了半个月的verilog,只能写些小东西,呵呵...
实际上到目前为止也只写过两个程序,一个是电子琴,另一个是交通灯模拟程序。第一个太太太太简单了,就不写在这里了,下面发一个自己写的交通灯模拟的程序(注:由于写的匆忙,未设置初始状态,复位信号来时会出现一定的差错;另外,此处发的程序未加降频进程,实际很简单,自己加上就行了。)
程序如下:
module tLight( high,low,a,b,c,d,e,f,preclk,rst);
output [3:0] high;
output [3:0] low;
output a,b,c,d,e,f;
input preclk,rst;
reg [3:0] high;
reg [3:0] low;
reg clk;
reg a,b,c,d,e,f;
reg [1:0] state,next_state;
reg k;
reg clr;
parameter S_0=0;
parameter S_1=1;
parameter S_2=2;
parameter S_3=3;
parameter dont_care_state=2'bx;
parameter dont_care_out=6'bx;
always@(posedge preclk)
if(k==0)
begin
if(low>4'b0)
begin low="low-1"'b0001; clr<=0; end
else if(low==4'b0)
begin if(high==4'b0)begin high<=4'b0001; low<=4'b0101;clr<=1; end
else begin high<=high-1;low<=9;clr<=0;end
end
end
else
begin
if(low>4'b0)
begin low="low-1"'b0001; clr<=0; end
else if(low==4'b0)
begin if(high==4'b0)begin high<=4'b0000; low<=4'b0011;clr<=1; end
else begin high<=high-1;low<=9;clr<=0;end
end
end
always@( posedge clr or posedge rst)
if( rst==1) state<=S_0 ; else if (clr==1) state<=next_state;
always@(state)
begin
case(state)
S_0: begin {a,b,c,d,e,f}=6'b100001;k=1;next_state<=S_1; end
S_1: begin {a,b,c,d,e,f}=6'b010010;k=0;next_state<=S_2; end
S_2: begin {a,b,c,d,e,f}=6'b001100;k=1;next_state<=S_3; end
S_3: begin {a,b,c,d,e,f}=6'b010010;k=0;next_state<=S_0; end
default:begin {a,b,c,d,e,f}=dont_care_out;next_state=dont_care_state; end
endcase
end
endmodule
用户179934 2009-5-12 15:30