我是靠谱客的博主 飘逸火龙果,最近开发中收集的这篇文章主要介绍verilog中区分wire、reg、always、assign,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在初学verilog语言时,常常对各种模块中的语句块、变量声明的使用条件不清楚,其中最典型的就是对reg型和wire型数据类型的区分,以及对always语句和assign语句使用条件的理解,在这篇文章中我将分享我的一些学习总结。

区分wire与reg,从二者的归属讲起

wire是verilog的默认数据类型,即未指定类型的变量都是wire型。wire是net型数据变量,net型数据相当于硬件电路中的各种物理连接(如导线),特点是输出值紧跟输入值变化而变化。

reg型是variable型数据变量,variable型数据在verilog-1995标准中被称为register型,这很好的说明了此数据类型可以映射为存储元件(如寄存器),之所以在现在类名更改,是为了突出在具体情况下,variable类型的变量也可以映射为连线。

介绍完两种类型归属上的不同特点,就能很好的区分两种类型

wire型适用于连续赋值,常通过assign赋值语句赋值。而reg型适用于过程语句赋值,在always过程块中要求被赋值变量必须为reg型。

在上面对wire和reg的区分中便已出现了assign与always,这两者的区分其实很简单。

always是一个过程块,与inital类似,二者的区别在于可综合性方面。

inital块不能被综合,在模型运行时只执行一次,往往用作对激励向量的描述或逻辑器件变量赋值,是面向模型仿真的过程语句。

而always块内语句可综合,所谓可综合,即是在块内语句最终会被综合成逻辑器件。always的另一个特点就是并发性,模型中所有always是并发进行的。

相较于过程语句always,assign只是一个赋值语句,其特点是可持续赋值。在实际应用中,assign不能出现在always过程块中,因为使用assign是对wire型变量赋值,这与always过程块赋值左值必须为reg型冲突。

此外,时序语句必须在always过程块中,时序与组合部分不能同时出现在一个always中。在实际应用中常将时序逻辑与组合逻辑分别写在两个always语句块中,或是将组合逻辑写在always块外的assign语句中。

最后

以上就是飘逸火龙果为你收集整理的verilog中区分wire、reg、always、assign的全部内容,希望文章能够帮你解决verilog中区分wire、reg、always、assign所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(144)

评论列表共有 0 条评论

立即
投稿
返回
顶部