FPGA学习心得(一)

        第一周学习FPGA,Verilog语言也是第一次接触,虽然有C语言的影子,但是思维模式有很大差异,这里我把我学到的知识点记录下来,为以后复习和查阅提供良好的帮助, 基础的知识点网上随便都能找到,我只记录我觉得需要记录下来的知识点。

1.reg和wire变量

        Verilog中变量的物理数据分为线型和寄存器,线型数据中wire最常用,对应于实际的数字电路,线性wire实际上就对应着硬件的连线,起到连接作用。寄存器是存储单元的抽象,寄存器数据类型的关键字是reg。常用来表示always模块内的指定信号,代表触发器,在always模块内被赋值的每一个信号都必须定义成reg型。

        总而言之,reg相当于存储单元,wire相当于物理连线,在需要赋值计算的时候就用reg,只是连线作用就用wire。

2.assign赋值语句

         assign语句是连续赋值语句,一般是将一个变量的值不间断地赋值给另一变量,两个变量之间就类似于被导线连在了一起。

3.always语句

        always语句是条件循环语句,执行机制是通过对一个称为敏感变量表的时间驱动来实现的。

always@(敏感事件)

        begin

                程序语句

        end

        当敏感事件的条件满足时,就执行一次“程序语句”。当敏感信号非常多时,可以用*来代替,这个 * 是指程序语句中所有的敏感条件。

always@(posedge clk)--->posedge表示上升沿,也就是说,当clk由0变为1的瞬间执行一次代码;

always@(negedge clk)--->negedge表示下降沿,触发条件为clk下降沿。

4.同步复位和异步复位 

同步复位:只有当时钟上升沿到来时,才能产生有效变化;否则,无法产生对系统的复位操作。

异步复位:无论时钟边沿到来与否,只要复位信号有效输出就会被复位。

5.阻塞赋值和非阻塞赋值

        阻塞赋值的赋值号用“=”表示,对应的电路结构往往与触发沿没有关系,只与输入电平的变化有关系。它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许其他Verilog语句的干扰,直到现行的赋值完成,才允许下一条的赋值语句的执行。

        非阻塞赋值的赋值号用“<=”表示,对应的电路结构往往与触发沿有关,只有在触发沿的时刻才能进行非阻塞赋值。在赋值开始的时刻,计算赋值号右边的语句;在赋值结束时刻,更新赋值号左边的语句。

        例如:

a=1,b=2,c=3

        begin

                a <= b-1;

                b <= a+2;

                c <= b+4;

        end

最后a=1,b=3,c=6。

        在计算非阻塞语句赋值号右边的语句和更新赋值号左边的语句期间,允许其他的Verilog语句同时进行操作。

        非阻塞操作只能用于对寄存器类型变量进行赋值,因此只能用于"initial"和"always"块中,不允许用于连续赋值“assign”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值