一. 有意为之
 
Verilog是个大杂烩,这是有意而为之。
 
Verilog IEEE Std(1364-2005)的摘要中写道:
 
 
提取一下:
Verilog HDL的意在:for use in all phases of the creation of electronic systems.
Verilog HDL既是人读的,又是机读的。
Verilog HDL支持:
  1. the development,
  1. verification,
  1. synthesis,
  1. and testing of hardware designs;
  1. the communication of hardware design data;
  1. and the maintenance, modification, and procurement of hardware.
 
顺带对文档的使用者也提出了要求:
  1. the implementors of tools supporting the language;
  1. advanced users of the language.
意思是如果你不是资深玩家就别看这规范了,先修炼基本功。
 
二. 可综合
 
Verilog HDL志向远大,支持硬件设计的全流程。所以Verilog为每一个阶段都提供了一个功能子集。虽然都基于Verilog基本语法,但是用途却不尽相同。
 
比如developing of hardware design亦即hardware modeling的子集与verification的子集不同。hardware modeling的代码写出来是要综合成物理硬件的,而verification的代码只是用来做验证,并不需要硬件对应。所以验证的子集相较建模的子集就更加灵活,只需要EDA支持即可。
 
这也是可综合的意思。
换句话说,如果使用Verilog HDL hardware modeling的子集进行建模,则不需要太多考虑可综合问题(非绝对)。
 
实际使用中可能还是要考虑,因为EDA支持的建模子集是Verilog的建模子集的子集。
 
三. 建模的抽象层次
 
Verilog对建模的支持在两个大的抽象层次:门开关层(GSL)和寄存器传输层(RTL)。
 
还有数据流、结构建模和行为建模的区分。
 
 
四. GSL
 
 
门和开关层(GSL)是最低层次亦即最接近硬件层次的抽象层次。这一层使用四值逻辑,也可以对信号强度和delay进行建模。
 
严格意义上讲,GSL建模能使用的数据类型只有wire,一根线或者一排线。能使用的节点是各种switches和gates。
 
 
五. RTL
 
因为线只能传输,而不能暂存,所以只能实现比较简单的功能。没有历史记忆则只能重复历史逻辑,不停重复历史逻辑则无法顺利完成功能,至少是及其低效的。
 
寄存器提供了暂存的功能,也为更复杂功能建模提供了可能。RTL:Register Transfer Level,基于寄存器进行值传递的抽象层次和建模层次。
 
严格意义上讲,RTL建模无需使用wire,全部使用reg类型即可。reg类型可以理解为一个可以暂存值的抽象的Data Type. 如果不需要存值,则综合时直接使用wire直接连通即可。
 
不过,实际使用中,为了准确,多wire和reg混用,毕竟这也是建模时为数不多的工具之一,也提升建模人员的控制力。
 
这一层可以使用很多操作符(operator):
 
支持行为建模和使用结构化的形式组织模型的各个部分:
 
PS. Loop statements不是用来建模的。
 
六. 更高层次
 
更高层次的建模,如事务层、算法层、系统层,Verilog没有提供支持。
 
七. 总结
 
这里主要体现的是把Verilog划分成不同的子集的想法。
Verilog HDL支持其他阶段hardware design的子集,我暂时不掌握,见谅。
 
Verilog作为Language的各个子集的划分,需要advanced user才能掌握。这是一个缺点。
而基于现有语言的建模库(Library)则不存在这个问题,因为不同的阶段使用不同的库,分的比较清楚。
 

拨开云雾-Verilog是个大杂烩(中性)的更多相关文章

  1. 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑

    一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...

  2. Chromium源码--视频播放流程分析(拨开云雾)

    转载请注明出处: http://www.cnblogs.com/fangkm/p/3791964.html 在PC浏览器中播放视频,大部分视频网站都是采用flash播放器,这多亏了Adobe Flas ...

  3. (原创)拨开迷雾见月明-剖析asio中的proactor模式(一)

    使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio.asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有 ...

  4. 非阻塞赋值(Non-blocking Assignment)是个伪需求(2)

    https://mp.weixin.qq.com/s/5NWvdK3T2X4dtyRqtNrBbg   13hope: 个人理解,Verilog本身只是“建模”语言.具体到阻塞/非阻塞,只规定了两种赋 ...

  5. 手机游戏渠道SDK接入工具项目分享(二)万事开头难

    一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...

  6. Android微信智能心跳方案 (转)

    原创 2015-08-17 phoenix WeMobileDev 前言:在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援.刚到广州的时候,Ray让我和春哥对Line和W ...

  7. 由select * from table where 1=1中的1=1说开数据库

    众多网站都有select * from table where 1=1此类语句的介绍,并且,针对该类语句,讲得实在是让人越看越迷茫(一个抄袭一个的,简直不像话),不知道是在说什么,导致很多新手不得要领 ...

  8. CLR via C#(15)--String,熟悉而又陌生

    好久没写文章了,再拿起这本书,学习加分享,乐趣无穷啊.这两天看了写关于字符串的知识,从学写代码的时候开始,我们就基本天天跟String打交道,对它再熟悉不过了.但是仔细看看,还是有一种拨开云雾的感觉, ...

  9. linux信号处理及libcurl的坑

    前言:     最近有个项目, 需要访问第三方服务. 该服务是通过http的形式访问的, 为了安全和加密, 对方提供了一个加密用的C/C++库, 用于对参数进行处理.  鉴于此, 选用了C/C++语言 ...

随机推荐

  1. 【Spark】一起了解一下大数据必不可少的Spark吧!

    目录 Spark概述 官网 Spark是什么? 特点 Spark架构模块 主要架构模块 Spark Core Spark SQL Spark Streaming MLlib GraghX 集群管理器 ...

  2. 【Hadoop离线基础总结】HDFS的API操作

    HDFS的API操作 创建maven工程并导入jar包 注意 由于cdh版本的所有的软件涉及版权的问题,所以并没有将所有的jar包托管到maven仓库当中去,而是托管在了CDH自己的服务器上面,所以我 ...

  3. 你应该知道的Python3.6、3.7、3.8新特性

    很多人在学习了基本的Python语言知识后,就转入应用阶段了,后期很少对语言本身的新变化.新内容进行跟踪学习和知识更新,甚至连已经发布了好几年的Python3.6的新特性都缺乏了解. 本文列举了Pyt ...

  4. Python Web自动化测试入门与实战,从入门到入行

    Python Web自动化测试入门与实战 购买地址 · 京东:https://item.jd.com/69239480564.html   天猫:https://detail.tmall.com/it ...

  5. Spring MVC教程——检视阅读

    Spring MVC教程--检视阅读 参考 Spring MVC教程--一点--蓝本 Spring MVC教程--c语言中午网--3.0版本太老了 Spring MVC教程--易百--4.0版本不是通 ...

  6. Springboot中修改.properties文件为.yml文件时项目不能运行问题

    可能很多小伙伴会考虑环境配置的问题,maven版本.idea版本什么的,其实没有必要 只要你之前.ies时能运行,那么环境配置就没有问题 不能运行的原因,一定是你的.yml文件的格式问题 .yml文件 ...

  7. Linux --登录用户显示-bash-4.2#解决办法

    登录linux系统过后,发现显示的是-bash-4.2# 而不是root@主机名 + 路径的显示方式,发生这种情况的原因是根目录下缺失几个配置文件,从默认配置中拷贝过来就可以解决了: 1 cp /et ...

  8. Java开发架构篇《初识领域驱动设计DDD落地》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 DDD(Domain-Driven Design 领域驱动设计)是由Eric Eva ...

  9. docker 修改镜像地址

    一.直接设置 –registry-mirror 参数,仅对当前的命令有效 docker run hello-world --registry-mirror=https://docker.mirrors ...

  10. spark机器学习从0到1基本数据类型之(二)

        MLlib支持存储在单个机器上的局部向量和矩阵,以及由一个或多个RDD支持的分布式矩阵. 局部向量和局部矩阵是用作公共接口的简单数据模型. 底层线性代数操作由Breeze提供. 在监督学习中使 ...