一、两者的关系 一个程序块可以有多个initial和always过程块。每个initial和always说明语句在

仿真的一开始同时立即开始执行

initial语句只执行一次,而always语句则不断重复的活动着,直到仿真结束。
但always块语句后面跟着的过程快是否运行,满足则运行一次,满足则运行一次,直到程序结束。
一段程序中使用的initial和always语句的次数不受限制,他们都是同时开始运行的。


(1)、initial语句
1、语句格式

   initiabegin语句一;语句二;语句三;语句四;end

2.举例说明

   initiabeginS1 = 0  ;for(index=0;index<size;index=index+1)beginmemory[index] = 0;endend

上述例子中在仿真开始对各变量进行初始化,这个初始化过程不需要任何仿真时间,即在0ns时间内,便可以完成存储器的初始化工作。

实例2:initia语句生成激励波形
initial begins=  'b00000;#10   s = 'b00001;#10   s=  'b00010;#10   s = 'b00100;#10   s=  'b01000;#10   s = 'b10000;
```\end上面程序块按照顺序依次执行10 :s=1;   20 :s=2;.......

注意

一个模块中可以有许多个initial块,它们都是并行运行的。initial语句最常见的是用于测试文件里面的初始化语句,用来产生测试环境和设置信号记录。
(2)always语句
always语句在仿真过程中不断的运行着。initial语句只执行一次,而always语句则不断重复的活动着,直到仿真结束。
但always块语句后面跟着的过程快是否运行,满足则运行一次,满足则运行一次,直到程序结束。
1、语句格式:
always <时序控制> <语句>
always语句由于其不断活动的特性,只有和一定的时序控制逻辑结合在一起才有用。如果一个always没有时序控制,它将会产生死锁,例如:
always clk = ~clk;
加上时序控制 always可以用来产生时钟信号:always #10 clk = ~clk 10个时间单位翻转一次。

always的时序控制可以使边沿触发(上升沿或者下降沿)也可以用电平触发,可以是单个信号也可以是多个信号,中间需要用关键字or连接,例如:

> 边沿触发
always@(posedge clk or negedge  rst)
>begin
>end

由两个沿触发的always只要其中一个沿到来,就立即执行一次过程块,然后等待下一次的沿到来。

电平触发
always@(a or b or c)begin....end

由多个电平触发的的always块,只要a,b,c中的任何一个发生变化,从高到低或者从低到高都会执行一次过程,这里有个疑问,执行过程块的时刻是在从低到高变化的时候还是什么时候?

一个模块可以包含多个always块,它们都是并行执行的
2.always块的or时间控制

//有异步复位的电平敏感锁存器
always@(reset or clock or d)//也可以写成always@(a,b,c)  用,代替orbeginif(reset)q = 1‘b0;else if(clock)q = d;end
//用reset异步下降沿复位,clock的正条边沿触发的D寄存器
always@(negedge reset , posedge clk)if(!reset)q  <= 0;elseq  <= d;

always@ (*)的使用

用符号always@(*)可以把所有输入变量都包含进敏感列表

例如:
always@(a,b,c,d,e,f,g,h,r,m)
beginout1 = a?(b+c):(d+e);out2 = f?(g+h):(r+m)end可以用下面代码来代替always@(*)
beginout1 = a?(b+c):(d+e);out2 = f?(g+h):(r+m)end

前面所讨论的时间控制都需要等待信号值的变化或者事件的触发,使用符号@和后面的敏感列表来表示。
verilog允许另外一种形式表示的电平敏感时序控制(即后面的语句或者语句块必须等到某个条件诶真是才能执行),具体请看下面例子:

always wait(count_enabel)  # 20 count  = count   +1;```

上面例子中,仿真器连续监视count_enable的值,若其值为1,在20个时间单位过后执行后面的语句,若其值为0,则不执行后面的语句。若其值始终为1,那么count将每过20个时间单位加1.

verilog中的initial块、always块详细解释相关推荐

  1. Verilog初级教程(11)Verilog中的initial块

    文章目录 前言 正文 语法格式 initial块是用来干什么的? initial块何时开始又何时结束? 一个模块中允许有多少个initial块? 参考资料 写在最后 前言 仿真中通常会依次执行一组Ve ...

  2. verilog中的initial语句

    首先说说结构化过程语句,在verilog中有两种结构化的过程语句:initial语句和always语句,他们是行为级建模的两种基本语句.其他所有的行为语句只能出现在这两种语句里 与C语言不通,veri ...

  3. theano中的Rop和Lop的详细解释

    #------------------------------------------序------------------------------------------------------- ...

  4. Linux系统中一些目录和文件的详细解释(参照RHEL5.4)

    linux有四种基本文件系统类型: –普通文件:如文本文件.c语言源代码.shell脚本等,可以用cat.less.more.vi等来察看内容,用mv来改名: –目录文件:包括文件名.子目录名及其指针 ...

  5. USB3.0中的8/10b编码技术详细解释

    USB3.0在Physical layer中定义了超速USB的信号传输技术,在其中最关键的就是引入了8/10b编码技术,如下图中的红色部分. 8/10b编码和解码的的流程如下图所示,在编码时将ABCD ...

  6. vue中render: h = h(App)的详细解释

    2018年06月20日 10:54:32 H-L 阅读数 5369 render: h => h(App) 是下面内容的缩写: render: function (createElement) ...

  7. scala中的算术符重载代码详细解释

    overload_exercise.scala代码如下: object Overload_Exercise extends Serializable { //--------------------- ...

  8. vue中组件的导出导入_5.2 vue中 keep-alive 组件的作用,详细解释keep-alive使用方法...

    问题:vue中 keep-alive 组件的作用 keep-alive:主要用于保留组件状态或避免重新渲染. 比如: 有一个列表页面和一个 详情页面,那么用户就会经常执行打开详情=>返回列表=& ...

  9. Python numpy中的hsplit()和vsplit()函数详细解释

    在网上看到了一些关于vsplit()函数和hsplit()函数的解释,感觉不是很好理解, 同时有的也不是很全面.这里我想根据我的个人理解,用我自己的语言表达出这两个函数的解释. hsplit():按列 ...

最新文章

  1. 一种PacBio测序数据组装得到的基因组序列的纠错方法技术 (专利技术)
  2. The Ice::Current Object
  3. selenium截图模糊_Selenium截屏 图片未加载的问题解决--【懒加载】
  4. Linux 下shell中exec解析
  5. linux下 apache启动、停止、重启命令
  6. django 1.8 官方文档翻译: 2-3-2 关联对象参考
  7. 嘿嘿,我就不信搞不定你--Dynamo
  8. 转:一个Sqrt函数引发的血案
  9. skynet 学习笔记-netpack模块(1)
  10. 在 Mac 上的 Keynote 讲演中如何更改共享演示文稿的设置?
  11. 系统没有安装vc9.注意是x86 32位_x86是多少位系统
  12. 常用语料库语言学相关软件下载
  13. 360奇云的架构演进之路
  14. 流程图中的实线_流程图符号_流程图中的带箭头的线段代表什么?
  15. ArcMap基于PG数据库创建企业级地理数据库
  16. Datawhale- DS- Jun - 第一章:第一节数据载入及初步观察-课程
  17. YOLOv报错Downloading https://ultralytics.com/assets/Arial.ttf to /root/.config/Ultralytics/Arial.ttf..
  18. html年龄0-120岁正则,正则表达式
  19. WebRTC系列 -- iOS 视频采集(1)
  20. 墨瞳漫画 升级vue2 踩坑

热门文章

  1. 【Luogu1048】采药
  2. android中计算日期差,Android编程实现根据不同日期计算天数差的方法
  3. 集训8.16最小生成树讲解
  4. 对学生公寓部建议和意见_学生公寓自主管理协会
  5. yolov3识别的类别_Gaussian YOLOv3:一个更强的YOLOv3,现已开源!
  6. 计算机组成原理—存储系统总结
  7. 最小生成树的java实现
  8. OpenGL基础23:平行光与点光源
  9. SQL的简单增、删、改
  10. bzoj 4127: Abs(树链剖分+线段树)