在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. 整合Thinkphp数据库基本操作CURD,界面datagrid采用EasyUi的Demo

     1 <?php  2     class CurdAction extends Action{  3         public function del($id){  4          ...

  2. Eclipse 创建 Java 接口

    打开新建 Java 接口向导 新建 Java 接口向导可以创建新的 Java 接口.打开向导的方式有: 点击 File 菜单并选择 New > Interface 在 Package Explo ...

  3. asp.net源程序编译为dll文件并调用的实现过程

    很多时候,我们需要将.cs文件单独编译成.dll文件,这就需要使用csc命令将.cs文件编译成.dll动态链接库文件.具体的操作步骤如下: 打开命令窗口->输入cmd到控制台->cd C: ...

  4. ScheduleFactory(不同scheduler name)

    package com.unis.uvm.quartz; import java.util.Properties; import org.quartz.Scheduler; import org.qu ...

  5. SQL.Cookbook 读书笔记5 元数据查询

    第五章 元数据查询 查询数据库本身信息 表结构 索引等 5.1 查询test库下的所有表信息 MYSQL SELECT * from information_schema.`TABLES` WHERE ...

  6. 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

    update 2014-05-17 一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位(与0位与) ...

  7. A Secret(KMP)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others)Total ...

  8. SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)

    (三)遍历 文件系统的遍历是指按照文件夹的层级结构遍历文档库.列表的文件夹和列表条目.遍历主要有三种方式:(1)直接使用文件系统对象模型进行遍历:(2)使用SPDocumentLibrary进行遍历: ...

  9. mysql_数据库_操作

    1.查看数据库 show databases; # 默认数据库: test - 用于用户测试数据 information_schema - MySQL本身架构相关数据 2.创建数据库 #utf- 编码 ...

  10. MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...