在Verilog中,设计组合逻辑和时序逻辑时,都要用到always:

always @(*) //组合逻辑
if(a > b)
out = 1;
else
out = 0; always @(posedge clk) //时序逻辑 flip-flop触发器
if(en)
out <= in;

仅从关键字上,看不出设计者想要一个什么样的电路。

SystemVerilog把always关键字细化了。对不同的设计要求有不同的关键字:

always_comb //组合逻辑
if(a > b)
out = 1;
else
out = 0;

comb是combinational的缩写,always_comb表示设计者想要设计一个组合逻辑电路。同时不必再写敏感信号列表。我们在设计组合逻辑电路时,一件最重要的事就是不要一不小心搞一个latch出来。always_comb会告诉综合工具,这里需要的是一个组合逻辑电路。假如我们设计时,if语句或者case语句没有写完整,

always_comb //错误
if(a > b)
out = 1;

在综合时,我们会收到警报:这里应该是组合逻辑,你把他写成了latch。使用always,则不会收到这样的警告。

如果真的需要latch,SystemVerilog准备了专门的关键字:

always_latch //latch

  if(clk)
out = in;

always_latch是电平敏感的,它也不需要敏感信号列表,它会告诉综合工具,这里我就是需要一个latch。

always_comb和always_latch极大的降低了unintentional latch的出现。这是对电路设计的一大提升。

对于flip-flop触发器的设计,也有专门的关键字:

always_ff @(posedge clk) //flip-flop触发器
if(en)
out <= in;

ff是flip_flop的缩写,它需要敏感信号列表,并且是边沿触发的,所以敏感信号列表里的信号,都需要加关键字posedge或negedge。假如我们忘记了写posedge或者negedge:

always_ff @(clk) //错误

  if(en)
out <= in;

综合工具会发出警告:这里应该是flip-flop,可你写的不是flip-flop。使用always,则不会收到这样的警告。

SystemVerilog把always细化成always_comb, always_ff, 和always_latch。使综合工具可以自动检查各种细节,降低了设计失误的可能。

systemverilog新增的always_comb,always_ff,和always_latch语句的更多相关文章

  1. sql 操作常用操作语句 新增、修改字段等

    常用sql --sql 事务 BEGIN TRAN 事物名 )BEGIN ROLLBACK TRAN 事物名;RETURN;END COMMIT TRAN 事物名 --数据库清缓存 DBCC DROP ...

  2. systemverilog.vim

    " Vim syntax file " Language: SystemVerilog " Maintainer: Stephen Hobbs <stephenh@ ...

  3. systemverilog的高亮显示

    1. 在_vimrc文件末尾添加: syntax on "确定vim打开语法高亮 filetype on "打开文件类型检测 filetype plugin on "为特 ...

  4. Systemverilog for design 笔记(七)

    转载请标明出处 第一章 接口(interface) 1.1.    接口的概念 接口允许许多信号合成一组由一个端口表示. 1.2.    接口声明 //接口定义 Interface main_bus ...

  5. SystemVerilog for design 笔记(二)

    转载请标明出处 1. System Verilog文本值和数据类型 1.1. 增强的文本值赋值 相对于verilog,SV在文本值赋值时可以1.无需指定进制    2.赋值可以是逻辑1 用法: reg ...

  6. 《SystemVerilog验证-测试平台编写指南》学习 - 第2章 数据类型

    <SystemVerilog验证-测试平台编写指南>学习 - 第2章 数据类型 2.1 内建数据类型 2.2 定宽数组 2.2.1 声明 2.2.2 常量数组 2.2.3 基本的数组操作 ...

  7. 三、动态SQL语句

    //备注:该博客引自:http://limingnihao.iteye.com/blog/106076 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空, ...

  8. MyBatis学习 之 三、动态SQL语句

    目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...

  9. VB6基本数据库应用(四):数据的提取,新增和修改

    列的第四篇,上一篇在:http://blog.csdn.net/jiluoxingren/article/details/9474661 数据的提取,新增和修改 由于在写第三章的时候没有充分考虑这一章 ...

随机推荐

  1. 学习百度、腾讯及lofter的前端兼容及布局

  2. Spring4 MVC REST服务使用@RestController实例

    在这篇文章中,我们将通过开发使用 Spring4 @RestController 注解来开发基于Spring MVC4的REST风格的JSON服务.我们将扩展这个例子通过简单的注释与JAXB标注域类支 ...

  3. with root cause 解决办法

    现象:1.工程在启动的时候无异常,当页面加载到包含spring:message标签的页面时,在后台报空指针异常,同时控制               台会显示with root cause提示: 2. ...

  4. python "=",深,浅 拷贝

    1.‘=’   无论怎么改变,2者都一致 2.深浅拷贝,id都不同 3.深浅拷贝的区别在于拷贝层次, 引用是否拷贝 总结

  5. ios -bitmap上下文生成图片 生成水印

    - (void)test { // 0. 加载背景图片 UIImage *image = [UIImage imageNamed:@"psb"]; // 1.创建bitmap上下文 ...

  6. OpenCV学习笔记十六:opencv_calib3d模块

    一,简介: 该库用于3D信息重建,姿态估计,摄像机标定等.

  7. http://www.haolizi.net/example/view_2380.html

    null

  8. Unity3D delegate 用法

    delegate:委托机制,不做一一说明: 功能需求1: 音量,为一事件为B: 改变音量如为0,为事件A.也触发事件B: 音量变,所有音乐,如场景,特效,角色,打斗.其所有音量都得变.为C: 思路: ...

  9. POJ 1408 Fishnet【枚举+线段相交+叉积求面积】

    题目: http://poj.org/problem?id=1408 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...

  10. es 中 for in for of

    arr=[11,22,33,44,55,66,77,88]for (const i in arr){ console.log(i) if (i===4){ console.log(arr[i]) }} ...