日志档案

发表于 2008-4-2 22:19:55

0

标签: 日记  verilog入门  

04-02-2008_实战verilog

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

系统分类: CPLD/FPGA   |   用户分类: 无分类   |   来源: 原创   |   【推荐给朋友】

    阅读(272)    回复(0)  

投一票您将和博主都有获奖机会!