第二节 LED程序分析

  1. LED程序
module LEDs ( LED1 , clk );

output LED1;
input  clk;
reg [27:0] timer;

always @ (posedge clk)
    begin 
        timer <= timer + 1;
        if(timer >= 28'HEFFFFFF)
        begin
            timer <= 28'b0; 
        end
    end 
assign LED1 = timer[26];

endmodule
先看第一条:module LEDs ( LED1 , clk );
module(block)是Verilog的基本设计单元。模块是由两部分组成,一部分描述接口,一部分描述逻辑功能,即定义输入是如何影响输出的。
每个module都有endmodule 呼应,verilog结构位于之间。模块的端口声明了模块的输入输出口:module 模块名(口 1,口2,...);
output LED1;
input  clk;
reg [27:0] timer;
是对模块内容的说明。即IO的说明、内部信号声明和功能定义。该部分可以直接在module中进行。
always @ (posedge clk)
如果满足则执行其后的过程块,并且其后得过程块是顺序执行。不同的always之间是同时执行的。
begin和end相当于C语言的{},表示always所管理的过程块是在其之间。
<= 是verlog的赋值语句和=之间存在差异性。
<= 是非阻塞赋值方式:
    1)在语句块中,上面的语句所赋值的变量不能立即就为下面的语句所用;
    2)块结束后才能完成这次赋值操作,而所赋的变量值是上次赋值得到的;
    3)在编写可综合的时序逻辑模块时,这时最常用的赋值方法。
    4)非阻塞赋值符号和小于等于看起来一样,但意义完全不同,小于等于的关系运算符,用于比较大小,而非阻塞赋值符用于赋值操作。
= 阻塞赋值符:
    1)赋值语句执行完后,块才结束。
    2)被赋变量的值在赋值语句结束后立刻就改变。
    3)在时序逻辑中使用时,可能会产生意想不到的结果。
阻塞和非阻塞时Verilog中的重点也是难点内容,之后在仔细理解。
assign 是用来声明语句,进行逻辑定义;我的理解是:input和poutput 是wire类型,assign是对wire线连接到的数据进行声明。
我的程序是定义一个28bit 的寄存器 timer,时钟信号的频率是25MHz ,每个时钟的上升沿会对timer进行加一,当大于0xEFFFFFF时置零,
形成一个循环的时钟周期。然后把LED挂在timer的第26bit,即需要33554432x0.04 = 1342177.28us = 1.342s 点亮LED,然后亮1.324s。以此循环。 
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值