Verilog中锁存器与多路选择器

  • Verilog是一种硬件描述语言,它代表的是硬件。

  • Verilog代表的就是逻辑门和连接线。

  • 对于一个always@(*)控制的块而言,只要块中的表达式包含的任意的一个变量发生变化时,这个块都会被重新读取。

锁存器


always块不完整的敏感信号列表

if-else不完整结构

case忽略某些值

assign语句锁存器

只对电平敏感(不考虑posedge和negedge边沿敏感),且always块中的敏感变量表中没有包含在块中出现的所有变量(称为不完整的敏感变量表),那么这个块的功能就是某种类型的锁存器;

拥有完整的敏感变量列表则表明这是一个由组合们或者多路选择器等组合而成的组合逻辑电路。

但如果控制条件中包含的if或cace忽略掉了某些值的话,那么即使敏感变量是完整的,也有可能出现锁存的状态。

代码段一


always@(a,b,sel)
if(sel == 1'b1)
z = a;
else
z = b;

代码段二


always@(*)
if(sel == 1'b1)
z = a;
else
z = b;

代码段三


always@(sel)
if(sel == 1'b1)
z = a;
else
z = b;

代码段四


always@(a,b)
if(sel == 1'b1)
z = a;
else
z = b;

代码段一、二代表多路选择器,因为

[1] 表达式中的所有变量都被包含在了敏感信号表中(完整的敏感变量列表)

[2] if中的每一个选项都被赋给了一个输出(z)。

代码段三、四代表两种不同的锁存器,当敏感表中的变量不发生变化时实现锁存。

没有控制结构的非标准锁存器


always@(a,v)
z = a | b;

b值的变化对z的锁存并无影响,这种类型的锁存器通常是由敏感变量表中的输入错误造成的。

透明锁存器(可综合的推荐写法)


always@(*)
if(sel == 1'b1)
Q = D;

连续赋值的可综合锁存器


assign Z = (sel == 1'b1) ? D : Z;

避免锁存器


采用组合逻辑实现的锁存器的时序(包括可能出现的毛刺)容易出现问题。为了避免这些问题,应采用时钟控制结构(即触发器)二不是由使能控制的结构(即透明锁存器)来保存数据,避免使用锁存器。

参考资料


[1] Verilog数字VLSI设计教程 [美] John Williams 著 李林 等译

Verilog中锁存器与多路选择器的更多相关文章

  1. 关于verilog中if与case语句不完整产生锁存器的问题 分类: FPGA 2014-11-08 17:39 260人阅读 评论(0) 收藏

    在很多地方都能看到,verilog中if与case语句必须完整,即if要加上else,case后要加上default语句,以防止锁存器的发生,接下来就来说说其中原因. 一,什么是锁存器?锁存器与触发器 ...

  2. 多路选择器实现总线结构——Verilog

    ////////////////////////////////////////////////////////////////////////////////// //该程序完成通过多路选择器MUX ...

  3. Verilog中的UDP

    概述 Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP).通过UDP,可以把一块组合逻辑电路或者时序逻辑电路封装在一个U ...

  4. 关于Verilog 中的for语句的探讨

    在C语言中,经常用到for循环语句,但在硬件描述语言中for语句的使用较C语言等软件描述语言有较大的区别. 在Verilog中除了在Testbench(仿真测试激励)中使用for循环语句外,在Test ...

  5. verilog中的latch到底是个啥??简直快疯了!!!!!

    在很多地方都能看到,verilog中if与case语句必须完整,即if要加上else,case后要加上default语句,以防止锁存器的发生,接下来就来说说其中原因. 一,什么是锁存器?锁存器与触发器 ...

  6. system verilog中的跳转操作

    在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...

  7. system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)

    类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...

  8. 一段比较有意思的代码——介绍system verilog中的新增幅值语句

    system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...

  9. CSS中模拟父元素选择器

    很多情况下,我们需要找到父元素,但可惜的是css中并没有这样的一个选择器. 至于原因可以看张鑫旭的如何在CSS中实现父选择器效果这篇文章. 简单来说这个实现并不是真正的父元素选择器,只是利用其它思路来 ...

随机推荐

  1. jQuery autoResize

    这是一个用jQuery实现的, 自动调整textarea高度, 非常的好!但原作者已经把它的相关描述页面移除了, 这里做个备份吧~但js路径还在:full: http://james.padolsey ...

  2. C#.Net参数

    C#.Net参数 阅读目录 引言 形参和实参 命名实参 可选参数 params,数目可变参数 方法解析与重载决策 参数传递      [重难点] ref引用参数/out输出参数   参数修饰符 泛型类 ...

  3. VS2013程序打包部署(图解),vs2013部署

    VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...

  4. cf C. Counting Kangaroos is Fun

    http://codeforces.com/contest/373/problem/C 贪心,先排序,然后从n/2位置倒着找每一个可不可以放到别的袋鼠内. #include <cstdio> ...

  5. WIN32程序挂钩SetLastError,输出错误描述到控制台

    WIN32程序挂钩SetLastError,输出错误描述到控制台 作者:徐灵甫 一.窗口模式应用程序(GUI)启用控制台的方法为: 步骤 方法 1 启动/关闭控制台 AllocConsole()Fre ...

  6. android 自定义titlebar

    首先,修改标题栏的宽度和背景,在style.xml中添加: <style> <item name="android:background">@drawabl ...

  7. 【HDOJ】1107 武林

    简单模拟,题目数据太弱太弱了. /* 1107 */ #include <iostream> #include <cstdio> #include <cstring> ...

  8. vmware压缩磁盘空间的方法

    家里笔记本40G,可用空间怎么挤都只剩7G,从单位copy回来的linux虚拟机要10G,经检查实际使用空间5.7,也就是其他都是空余空间,可以释放掉.(只适合independent.Persiste ...

  9. MapReduce Shuffle And Sort

    引言   MapReduce作出保证:进入每个Reducer的数据行都是有序的(根据数据行的键值进行排序).MapReduce将Mapper的输出进行排序并传递给Reducer作为输入的过程称为Shu ...

  10. 2. Singleton模式

    这两种方法都提到了使用模版: (1) 参考文章:http://www.cnblogs.com/08shiyan/archive/2012/03/16/2399617.html 不同: a. 该方法直接 ...