0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单总结一下Verilog在设计时的不方便地方

OpenFPGA ? 来源:OpenFPGA ? 2023-04-27 09:57 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Verilog始于20世纪80年代初,是一家名为Gateway Design Automation的公司的专有硬件描述语言(HDL)。最初的Verilog HDL的主要作者是Phil Moorby。

IEEE于1993年接管了Verilog语言,并在两年后发布了正式的IEEE Verilog HDL标准,即IEEE 1364-1995,昵称为“Verilog-95”。五年后,IEEE发布了1364-2001,绰号为“Verilog2001”,其中有许多用于建模和验证数字设计的增强功能。

下图显示了Verilog-95中的主要语言功能,以及Verilog-2001中添加的主要新功能。请注意,此图并不是语言特性的全面列表。其目的是展示Verilog-2001添加到原始Verilog语言中的主要新功能。

a6c73e2a-e455-11ed-ab56-dac502259ad0.png

图 Verilog-95和Verilog-2001语言特性

从Verilog发布到今天,其已经经历了四十年的风雨,早期的“电路”设计Verilog的确很方便,尤其在那个年代,其也崔进了集成电路的发展。但是“老”不代表方便,尤其高速发展的今天,集成电路以摩尔定律指数发展,FPGA的应用场合以越来越复杂,复杂的逻辑设计让这个“老人”有些力不从心,今天我们就简单总结一下Verilog在设计时候的不方便地方。

Verilog的“贪婪”

下面是一个很常见的错误:

Unabletobindwire/reg/memory`D'in`tb_alu_8bits.U0.$ivl_for_loop0'1err

变量D未声明

声明的“贪婪”

需要这么多声明吗?

大家在进行逻辑设计时候是否对于变量申明感觉很烦,对于无休无止的变量声明和位宽声明,很容易在设计时候引进错误。

尤其对于一些综合器在推断变量的类型及位宽时候的错误很难检查出来,只有在进行仿真及验证的时候才能发现问题。

Verilog的“傲慢”

Verilog 是一种弱类型和有限类型的语言,就导致其错误检测很弱。

PS:VHDL是强类型语言,SystemVerilog在兼容Verilog部分是弱类型,其他部分基本都是强类型。强类型的好处是在验证过程中尽早发现设计中的错误。

一些错误在进行设计时候,Verilog并不会爆出错误,但是会导致功能有问题,这种问题很难检查出来,比如位宽不匹配、跨时钟域、锁存器等问题,这是因为Verilog会自动进行位宽匹配,只有在进行linting时候会爆出来警告,综合时候基本不会爆出错误。

错误检测的“傲慢”

傲慢到不让我进行检测!

Verilog的“色欲”

不知道大家设计时函数或者任务用的多不多?

我猜肯定不多,而且很多Verilog入门教材中都是不建议使用函数或者任务,主要是因为Verilog使用函数或者任务有很多限制。

函数的限制:

函数不能由时间控制语句甚至延迟运算符组成。

函数至少有一个输入参数声明。

函数可以由函数调用组成,但函数不能由任务组成。

函数在零模拟时间内执行,并在调用时返回单个值。

在编写可综合 RTL时,不建议使用函数。

函数用于编写行为或可仿真模型。

函数不应具有非阻塞赋值。

任务的限制:

任务可以由时间控制语句甚至延迟操作符组成。

任务可以有输入和输出声明。

任务可以由函数调用组成,但函数不能由任务组成。

任务可以有输出参数,在调用时不用于返回值。

任务可用于调用其他任务。

在编写可综合RTL时,不建议使用任务。

任务用于编写行为或可仿真模型。

以上的种种限制,你确定你设计的函数或者任务能简化你的设计吗?

函数、任务的“色欲”

爱我却不让我广泛使用你~

a76ab17c-e455-11ed-ab56-dac502259ad0.png

上例是从给定字符串中计算1个数的设计。在本例中,函数与参数“data_in”一起使用。函数名为“count_1s_in_byte”。在大多数协议描述中,需要对输入字符串执行一些操作。在此示例中,字符串为8位输入“data_in”,输出结果为4位“out”。不建议使用该函数进行综合。

Verilog的“懒惰”

当你设计了一个功能module,下一个文件想引用时候就需要例化,当你的设计比较复杂时候(有几十个module)你就会发现Verilog的例化极其不方便,需要手动例化,不仅浪费时间而且很容易出错(对于初学者这种错误很常见)。

例化的“懒惰”

例化能不能不这么懒!

Verilog的“嫉妒”

Verilog不像VHDL有丰富的包文件,同时也没有像一些高级语言库文件(不奢求)。同时自己的参数化也不是很方便(宏做参数化时候,几十个变量情况怎么办?)。

现在我需要做一个乘法器,我需要花费很长时间去了解乘法器的结构,然后去设计和优化,如果有一个math包那是不是会大大减少设计时间呢?

库、包的“嫉妒”

Verilog很嫉妒别的语言丰富的库、包文件(Python:你直接念我身份证)。

Verilog的“暴食”

对于复杂设计,Verilog设计基本都是以“年、月”进行计时的,对于时间简直就是恶魔。

调试的时候更是麻烦,增减一个信号或者改动一个小小逻辑都需要重新综合(调整时序时候需要插入寄存器的时候,想想都恐怖~)。

时间的“暴食”

大型设计以月为时间进行计时,调试时候更是“摸鱼”党的福利~

Verilog的“暴怒”

由于上面的各种缺陷,导致一些老工程师在编写Verilog时候为了保证综合性及正确性会将设计的“逻辑性”很强,如果没有好的注释,就会导致其他人在读代码时候可读性比较差(SV在这方面改进了很多,使代码的自读性加强)。

注释的“暴怒”

没有注释看得你“抓狂”。

总结

上面的观点比较偏激,都是拿着Verilog的缺点对比其他语言的优点,大家看看笑笑就好了,千万别较真,任何语言都有自己局限性,如果有那么优秀的编程语言,目前就不会出现几十上百种设计语言了。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1646

    文章

    22096

    浏览量

    620653
  • VHDL语言
    +关注

    关注

    1

    文章

    113

    浏览量

    18934
  • 锁存器
    +关注

    关注

    8

    文章

    927

    浏览量

    42588
  • Verilog语言
    +关注

    关注

    0

    文章

    113

    浏览量

    8592

原文标题:Verilog“七宗罪”

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    verilog中调用VHDL模块

    郁闷了,表示只看过VHDL语法但没写过。暂且不说VHDL模块的内容,我应该如何在测试平台中例化它并对它进行测试呢?稍微查了一下,其实很简单,只要把VHDL中的组件名、端口统统拿出来,按照verilog
    发表于 07-09 01:14

    请问优化后代码调试不方便怎么办?

    各位专家好! 请问调试过程中,开启优化后得代码,调试很不方便,比如断点加不上,但是不优化执行速度跟不上,对于这个问题,有没有什么好的办法?谢谢!
    发表于 07-31 10:02

    基于liteos-a,能方便地开发GUI程序吗?

    现在我们知道鸿蒙内核是liteos-a,那么基于liteos-a,能方便地开发GUI程序吗?
    发表于 09-30 10:03

    简单分享一下Arduino程序编写

    )中编写程序代码,然后我们将程序传到Arduino电路板上,我们自己写的程序会告诉电路板我们想要做的事情,因此,被许多电子爱好者(dalao)所喜爱。最近简单了解了一下Arduino程序编写,简单分享
    发表于 01-07 08:14

    总结一下串口的几种使用方法

    文章目录.仅向上位机打印调试信息二.与上位机交互信息三.作为驱动接口日常学习中,串口经常作为和上位机通信的接口,进行打印信息方便调试程序,有时也会作为模块的驱动接口,所以总结
    发表于 02-10 08:03

    总结一下STM32串口的用法

    STM32CubeMX_定时器中断_PWM前两节简单总结了GPIO, EXTI, TIMER的相关用法, 本节总结一下STM32串口的用法, 依然是原理性的东西不多讲, 直接开干.先
    发表于 02-10 06:17

    简单总结一下电容和二极管应用场景和选型方式

    电容和二极管是电路中最常用的两个电子元器件,种类和系列众多,这里简单总结一下应用场景和选型方式电容(Capacitor)电容的种类(20种以上)和应用非常广泛,但是我经常遇到的无非就是下面这几
    发表于 02-11 06:22

    简单介绍一下数模混合信号建模语言Verilog-AMS

    -Verilog-AMS,今天就简单介绍一下-Verilog-AMS。  为了便于物理系统的建模,人们
    发表于 10-14 14:48

    基于verilog的FPGA编程经验总结

    用了半个多月的ISE,几乎全是自学起来的,碰到了很多很多让人DT好久的小问题,百度也百不到,后来还是都解决了,为了尽量方便以后的刚学ISE的童鞋不再因为些小问题而纠结,把这几天的经验总结
    发表于 02-11 11:22 ?1621次阅读
    基于<b class='flag-5'>verilog</b>的FPGA编程经验<b class='flag-5'>总结</b>

    简单介绍一下-Verilog-AMS的基础知识

    -Verilog-AMS,今天就简单介绍一下-Verilog-AMS。 为了便于物理系统的建模,人们V
    的头像 发表于 10-21 14:50 ?1.1w次阅读
    <b class='flag-5'>简单</b>介绍<b class='flag-5'>一下</b>-<b class='flag-5'>Verilog</b>-AMS的基础知识

    Verilog计时候的不方便地方

    摩尔定律指数发展,FPGA的应用场合以越来越复杂,复杂的逻辑设计让这个“老人”有些力不从心,今天我们就简单总结一下Verilog
    发表于 08-02 10:08 ?1143次阅读

    总结一下OpenCV遍历图像的几种方法

    图形处理中,遍历每个像素点是最基本的功能,是做算法的基础,这篇文章来总结一下OpenCV遍历图像的几种方法。
    的头像 发表于 01-18 15:08 ?2034次阅读

    简单一下多点触控协议

    前面简单聊了一下多点触控协议,接下来找个驱动来看看具体实现。目前市面上多点触控芯片用得比较多的主要是汇顶和敦泰。
    的头像 发表于 04-17 09:20 ?3078次阅读

    简单介绍一下什么是微波通讯?

    欢迎来到东用知识小课堂,今天东东就为大家简单介绍一下什么是微波通讯?我们通常说有三大传输系统:光纤通信、微波通信、卫星通信。实际上,卫星通信也是微波通信的种。通俗的讲电磁波通信,主要分为广播方式
    的头像 发表于 03-05 11:33 ?2818次阅读
    <b class='flag-5'>简单</b>介绍<b class='flag-5'>一下</b>什么是微波通讯?

    总结一下LM317的几种经典应用电路

    说起LM317,我们做硬件的都很熟悉了,它是LDO的种,并且输出电压很容易通过外部电阻进行调整,今天总结一下LM317的几种经典应用电路。
    的头像 发表于 05-01 10:07 ?9578次阅读
    <b class='flag-5'>总结</b><b class='flag-5'>一下</b>LM317的几种经典应用电路