分享

Verilog 及Xilinx_FPGA入门(一)

 小小锐DarkRose 2014-07-23
一、流水灯实验;
一、FPGA的工作是基于时钟的,语言中几乎每处都用到了always@(posedge clk),意思是clk
上升沿触发工作,之后执行其下的语句。
二、<=非阻塞语言,并行方式
三、FPGA基本工作原理基于LUT查表,查表这也是一种特别重要的编程思想,下面的流水灯实现(二)差不多就是这种思想。

(1)实现(一)
module liushuideng(
input clk,
input rst,
output reg[7:0]  led=8'b00000001;
);


reg[31:0] cnt=0;
 
always@(posedge clk or negedge rst)
if(!rst) begin   //rst按键 按下为低电平
        led<=8'b00000001;
        cnt<=0;        
end else begin
                   
                    if(cnt==32'd100000000) //假如时钟为100MHz 那么32‘d100000000代表1秒钟
                   begin  
                   led<={led[6:0],led[7]}; //高电平代表点亮灯,实现循环左移位
                   cnt<=0;
                   end else begin 
                                 cnt<=cnt+1;
                                 end
 end
(2)实现(二)
module liushuideng(
input clk,
input rst,
output reg[7:0]  led=8'b00000001;
);


reg[31:0] cnt=0;
 
always@(posedge clk or negedge rst)
if(!rst) begin   //rst按键 按下为低电平
        led<=8'b00000001;
        cnt<=0;        
end else begin
                  if(cnt==32'd800000000)                    
                 begin
                 cnt<=0; //cnt==32'd800000000时 重新复位为0
                 end else begin
                              cnt<=cnt+1;//每当时钟沿到来时 cnt自加1

                               end
                 case(cnt)     
                32'd800000000:led<=8'b10000000;   //cnt为800000000时led==8‘d10000000(8代表位宽
//缺省为最大位宽)
                32'd700000000:led<=8'b01000000;
          
                32'd600000000:led<=8'b00100000;
                  
                32'd500000000:led<=8'b00010000;
               32'd400000000:led<=8'b00001000;
              32'd300000000:led<=8'b00000100;
              32'd200000000:led<=8'b00000010;
              32'd100000000:led<=8'b00000001;
                   
              default:;
        
             end
           

                    end


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约