在verilog中,always块是一种常用的语句,可以是很简单的功能模块,也可以是结构最复杂的部分。

一般always语句可以分为两类电路。一种是组合逻辑。一种是时序逻辑。

第一类:组合逻辑

//-----1.1 组合逻辑 --------

Always @ (*)

Begin

If(a>b)

Q = 1;

Else

Q = 0;

end

//------- end -------------//

如1.1所示,就是一个简单的组合逻辑always块,它应该是被综合成一个一位的比较器。

//---- 1.2 组合逻辑 缺少敏感信号 ------

Always @ (a)

Begin

If(a>b)

Q = 1;

Else

Q = 0;

end

//------- end -------------//

代码 1-2 也是一个组合逻辑,与 1-1 不同的是,敏感信号列表中只有a没有 b。

我们知道,在 Verilog 语法中, always 块的含义是一个重复执行的语句。

那么 1-2 会综合成一个比较器:

  • 当 a 发生变化时,q 发生变化
  • 当 b 发生变化,由于 b 不再敏感信号列表中,所以 q 不变

这是一个彻头彻尾的软件思维,世界上不存在这种电路,综合器多半会综合一个与代码 1-1 一样的电路,然后报一个警告。

编写组合逻辑的 always 块,使用 * 代替敏感信号列表是一个简单方便而且不容易出错的好办法。

第二类:时序逻辑

//----- 2-1 时序逻辑  -------

reg [1:0] q;

always @ (posedge clk)

begin

q <= q + 1'b1;

End

注意:这里使用的是非阻塞赋值,我们的 q 这个时候被综合成一个寄存器,而不是一个软件上的变量。

代码 2-1 是一个时序逻辑单元,它应该被综合成一个计数器,每当时钟的上升沿,q 自增一。综合后的 部分 RTL 图如下:

// 2-2  时序逻辑 ,带异步复位

reg [1:0] q;

always @ (posedge clk or negedge rst_n)

begin

if(!rst_n)

q <= 2'b00;

else

q <= q + 1'b1;

End

综合后的 RTL 图如下:

代码2-2综合成一个带有清零端的 D 触发器,其余与 2-1 无异。

转载地址:verilog基础---always_hhh_fpga的博客-CSDN博客_verilog always

always语句注意点:

1、不要在不同的always块内为同一个变量赋值。即某个信号出现在<=或者=左边时,只能在一个always块内。

2、不要在同一个always块内同时使用阻塞赋值(=)和非阻塞赋值(<=)。

3、在使用always块描述组合逻辑时使用阻塞赋值(=);使用always块描述时序逻辑时使用非阻塞赋值(<=)。

4、任何在always块内被赋值的变量都必须是寄存器型(reg)。

5always的敏感列表中可以同时包括多个电平敏感事件,也可以包括多个边沿敏感事件,但不能同时有电平和边沿敏感事件。另外,在敏感列表中,同时包括一个信号的上升沿敏感事件和下降沿敏感事件是不容许的,因为这两个事件可以合并为一个电平事件。

HHH~~~~

verilog基础---always相关推荐

  1. Verilog基础模块总结

    verilog基础模块 verilog基础模块包括数据类型,运算符,组合逻辑和时序逻辑四个部分.数据类型包括常量和变量,在常量中有整数,X和Z以及参数.X代表不定制,Z代表高阻值.下划线不具有任何意义 ...

  2. Verilog基础知识总结02

    Verilog基础知识总结02 1.简述Verilog如何建模 数字电路有两种基本要素:线(器件管脚之间的物理连线:wire)和器件(模块:module). Verilog建模就是用HDL语言把数字电 ...

  3. 【Verilog基础】CDC跨时钟域问题,个人理解总结(下)(数据丢失、多路扇出、异步复位解决方案)

    文章目录 3.3.CDC问题3--数据丢失(延长信号) 3.4.CDC问题4--多路扇出(同步后扇出) 3.5.CDC问题5--异步复位(同步释放) 书接上回:[Verilog基础]CDC跨时钟域问题 ...

  4. Verilog基础学习二

    Verilog基础学习二 文章目录 Verilog基础学习二 一.always 块 1.阻塞性赋值和非阻塞性赋值 二.条件语句 1.if 语句 基本用法 2.避免引入锁存器 3.case 语句 4.c ...

  5. Verilog基础:表达式位宽的确定(位宽拓展)

    相关文章 Verilog基础:位宽拓展和有符号数运算的联系 Verilog基础:表达式符号的确定 Verilog基础:数据类型 表达式位宽 如果想要在计算表达式时获得和谐一致的结果,那么控制表达式中的 ...

  6. Verilog基础知识(数值表示总结,signed,原码,反码,补码)

    以前虽然是用过verilog,但是只使用了其中最常见wire,reg类型数据,并且是无符号的,因为是及处理过程很多数据就是无符号的.但是想进一步拓展无符号数,或者其底层的补码形式存储与运算方式,就需要 ...

  7. 【Verilog基础】Verilog实现加扰器(Scrambler )与解扰器(Descrambler)

    文章目录 一.加扰器和解扰器简介 二.加扰器和解扰器原理框图 三.加扰器和解扰器Verilog实现 3.1.加扰器实现 3.2.解扰器实现 3.3.TestBench 参考 一.加扰器和解扰器简介 一 ...

  8. Verilog基础入门

    Verilog简介 一.Verilog语法知识简介 1.模块结构 (1)模块声明 (2)端口定义 (3)信号类型声明 (4)逻辑功能定义 2.行为语句 (1)过程语句 (2)块语句 (3)赋值语句 ( ...

  9. 【Verilog】二、Verilog基础语法

    文章目录 前言 一.简单的Verilog知识 1.1.Verilog端口定义 1.2.Verilog的标识符 1.3.Verilog的逻辑值 1.4.Verilog的数字进制 1.5.Verilog的 ...

最新文章

  1. python3.7和3.8的区别-Python2.7和3.7区别
  2. randperm--生成随机整数排列
  3. linux 内存被修改,linux 查询内存(linux 修改 openfiles)
  4. 更新npm至最新版本
  5. C语言及程序设计进阶例程-12 结构体成员的引用
  6. jQuery基础部分
  7. CCProgressTimer进度条效果
  8. (转)专访Palantir创始人:如何接二连三创出独角兽公司?
  9. ic读卡器设置工具_每日学习:数字IC设计EDA软件教程整理
  10. 通过端口查看进程和通过进程查看端口
  11. 基于c语言的串口通讯,基于C语言的RS232串行接口通信设计与实现
  12. SQLServer安装Northwind数据库
  13. 从Oracle迁移到MySQL的各种坑及自救方案
  14. 数据挖掘算法和实践(三):朴素贝叶斯(mushrooms蘑菇数据集)
  15. AI病毒来袭,拿什么拯救你我的电脑?
  16. 【eNSP 华为模拟器】三层交换技术及操作步骤【图文】
  17. Ubuntu 18.04 登录界面鼠标键盘鼠标失灵解决方法
  18. VL02N货物移动报错:消息号M7093 “对于移动类型643和账户XXX业务范围(033)的不同字段选择“
  19. 萌新带你开车上p站(二)
  20. MATLAB动画绘制

热门文章

  1. SAP FICO付款及清账
  2. 经典Web容器解析漏洞
  3. JDK1.8之前造成HashMap死链问题
  4. 银行管理系统 - 2022计科实训QT课设
  5. SQL数据库-------专业术语学习
  6. K8S使用Ceph RBD作为后端存储
  7. vue校验密码的三种写法
  8. matlab三维绘图注释,Matlab三维绘图与图形处理
  9. Pytest fixture实现测试用例前置后置操作
  10. 东师计算机基础20春在线作业2,计算机应用基础(高起专)计算机应用基础东师20春在线作业2...