Verilog初级教程(10)Verilog的always块 您所在的位置:网站首页 verilog怎么在always外给变量赋值 Verilog初级教程(10)Verilog的always块

Verilog初级教程(10)Verilog的always块

2024-07-02 20:12| 来源: 网络整理| 查看: 265

博文目录 写在前面正文语法什么是敏感列表?always块是用来干什么的?如果没有敏感列表怎么办?时序逻辑实例组合逻辑实例注意事项 参考资料

写在前面

由于刚毕业,又发生了很多事,在进入工作的准备期,就这样一停更很多日,接下来几天也将如此,直到生活稳定下来。 这个简单的教程还没有完成,继续吧。

正文

Verilog中的always块是Verilog中最常用的一个语法点,可以这么说,你稍微进行一个正常的设计都会用到always块,时序逻辑一定会用到,组合逻辑也很可能会用到。 参考互联网资料,我们从如下几个方面讲解always块语法。

语法什么是敏感列表?always块是用来做什么的?如果没有敏感列表会怎样?例子时序逻辑设计实例组合逻辑设计实例 语法

语法很简单,如何按照结构划分可以分为:

always @ (event) [statement] always @ (event) begin [multiple statements] end

第一种是块内只有一条语句,不需要使用begin end;第二种是有多条语法,需要使用begin end包裹起来。 这其实都是废话。我们推荐全部都用begin end包裹起来,这样形式比较固定,比较方面阅读以及形成固定风格。

我们按照下面方式划分,时序逻辑和组合逻辑区别划分: 划分组合逻辑以及时序逻辑的依据是敏感列表里面的内容有没有边沿事件?

组合逻辑语法: always @ (level event) begin [multiple statements] end

括号内部的敏感列表仅仅为电平事件,例如:

always@(a,b,c,d) begin out = a&b&c&d; end

这样写的缺点在于有的时候,敏感列表过多,一个一个加入太麻烦,容易忘掉,为了解决这个问题,verilog 2001标准说可以使用*替换敏感列表,表示缺省,编译器会根据always块内部的内容自动识别敏感变量。 如:

always@(*) begin out = a&b&c&d; end

这样就方便很多。

时序逻辑语法:

时序逻辑的always块将内部敏感列表包括了边沿事件,一般是时钟边沿。

always @ (edge event) begin [multiple statements] end

例如我们描述一个同步复位的D触发器,可以这样描述:

always@(posedge i_clk) begin if(i_rst) begin q


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有