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

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

3天内不再提示

如何使用Verilog HDL描述可综合电路?

电子工程师 来源:硬件加速与EDA 作者:硬件加速与EDA 2021-04-04 11:19 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、如何使用Verilog HDL描述可综合电路

Verilog 有什么奇技淫巧?我想最重要的是理解其硬件特性。Verilog HDL语言仅是对已知硬件电路的文本描述。所以编写前:

对所需实现的硬件电路“胸有成竹”;

牢记可综合Verilog HDL与电路结构一一对应的关系;

确认电路指标是什么:性能?面积?

硬件思维方式,代码不再是一行行的代码而是一块一块的硬件模块;

达到以上几点,就可以确保写出行云流水般的高质量代码。

关于代码与硬件电路的对应关系,参见如下图片,引用自Synopsys官方文档:

46476c84-8f64-11eb-8b86-12bb97331649.png

46c611c4-8f64-11eb-8b86-12bb97331649.jpg

471f01e4-8f64-11eb-8b86-12bb97331649.jpg

47875514-8f64-11eb-8b86-12bb97331649.jpg

47cc9304-8f64-11eb-8b86-12bb97331649.jpg

483109e2-8f64-11eb-8b86-12bb97331649.jpg

488f1168-8f64-11eb-8b86-12bb97331649.jpg

49042bce-8f64-11eb-8b86-12bb97331649.jpg

2、自动化生成代码

如果一定要有奇淫技巧的话,那么代码自动化生成技术就一定可以配得上这个称号。

近十年来,数字集成电路规模和复杂度飞速提高。这给数字集成电路工程师带来了不仅是脑力上的劳动的增加,更多是体力重复性工作的增多。传统的手工代码的编写存在很多弊端:

对于模块的代码工程师,要面对许多设计文件。而这些文件之间可能相互不一致,给代码的编写带来了很多的困扰。

代码工程师需要将这些文件中的很多设计信息体现在代码中,其中一些信息是充分性的誊写。这不仅带来了很多枯燥复杂的工作量而且人工参与过多也容易引入很多粗心带来的错误。

由于各个模块连接信号之多导致信号文件的手写工作量很大。每个信号文件小则几千行大则上万行信息。而且一旦有信号连接的变动需要相应修改多个模块的信号文件。

如果设计文件改动相应的设计文件很容易出现哪几处忘记改动的问题。

而脚本语言又有着强大的处理文本的能力。将脚本语言应用于数字电路设计中,作为设计文档和EDA工具的黏合剂,能够大大增加设计的速度。具体方法为:使用脚本语言从设计文档中提取有用的信息来生成想要的Verilog HDL代码,从而大大减少了IC设计者的工作量,并提高了代码的质量。

其好处有:

很好的设计一致性:保证了设计概念一旦变动即设计文档稍加修改,对应的VHDL代码就会相应的改变,不需要工程师手动改变代码。

兼容性强:该自动生成代码工具中设置了一个配置文件,供设计工程师的配置修改。对于不同的项目,通过修改配置该文件可以直接是代码相应变化,有一定的灵活性。此外,该自动生成代码工具已经应用于两个以上项目中,实践证明有很好的兼容性。

代码维护方便:对于设计代码的更新或升级,只需要从新运行下该工具即可,不需要一点点该写代码。

使用简单:集成大量脚本,使用工具时只需要运行一条命令即可。

本文将举一个Perl语言在代码自动生成中的应用实例,下图为一款SoC芯片中全芯片的时钟控制电路框图:

499ef74e-8f64-11eb-8b86-12bb97331649.png

时钟控制模块实现配置PLL参数、选择输出时钟源、时钟分频、时钟门控、bank切换、输出时钟等功能。3G、4G是系统通讯单元,向时钟控制单元申请时钟。PLLs是时钟源,是时钟控制单元的输入。时钟控制单元有七大主要模块,分别为时钟源控制模块、bank切换模块、分频模块、时钟门控模块、多路选择器模块、寄存器、3G4G时钟握手模块。时钟源控制模块控制时钟源的大小、开关。bank切换模块使时钟控制单元能正常工作在不同的电压下。

时钟控制单元的的工作机理如下:首先,外部模块向时钟控制单元请求时钟,并修改并写寄存器状态;时钟源控制单元根据寄存器中的内容配置时钟源Plls,并提供了所有的时钟源。然后,分频器完成这些时钟源预分频的操作,并将其作为多路选择器的时钟源。而多路选择器则从输入的时钟源中选择输出主时钟。主时钟通过分频模块产生所有的分频使能信号,这个过程中,需根据寄存器所配置的分频数来输出不同的频率的时钟。同时,根据系统的实时需求,通过由SPCU控制的bank选择器完成门控时钟的实现,降低系统的功耗。

以上是时钟控制模块的功能分析,那么如何通过代码自动生成技术来实现呢?

(1)首先,我们把这些模块梳理下,形成一个自顶向下的层次结构,如下图。如图中所示,顶层模块完成对底层模块的连接,底层模块实现时钟控制单元的功能。

4a3c4f08-8f64-11eb-8b86-12bb97331649.jpg

针对代码自动生成问题,对于顶层模块来说,承担的功能是自动地将底层数十个模块连接起来。对于底层模块来说,需要根据不同的功能定制需求,来自动化地生成所有功能性的代码,然后被顶层调用和连接。这样的话,就存在两个问题:[1]自动生成顶层模块?[2]自动生成底层模块?

(2)顶层模块:通常来说,对于一个复杂的SoC芯片,会有万数量级的信号需要进行匹配和连接。而能够自动生成的信号文件中的信号连接有两个特点:一是信号命令规律性强二是信号的连接关系可以从设计文件中体现。满足了这两点,便可以实现信号文件的自动化。

(3)底层模块此处即可体现Perl脚本强大的数据处理功能,针对该问题,将脚本划分为三类:提取脚本、生成脚本和集成脚本三种。提取脚本用来从输入文件中提取有用的设计信息到存储单元中;生成脚本从存储单元获得有用信息来生成各个功能模块的代码;集成脚本将所有的脚本集成在一个脚本里,方便统一化使用。以下是代码生成的脚本流程图:

4a9645a8-8f64-11eb-8b86-12bb97331649.jpg

如图所示,输入的文件都是excel和文本形式,Perl脚本首先读取技术文档,从中解析出时钟模块所需的连接、频率、时钟域等信息,基于此信息建立一个数据库。然后,根据实际芯片的具体需求,即配置文件,生成相应的自动化控制模式和需求。最终,依据配置文件和数据库,完成所有所需verilog代码的生成。需要注意的是,并不是所有的代码都可以自动生成,有些结构特殊的电路,只能通过手工编写来完成。所以,自动编写通常完成较为规整的、有规律性的代码,手工书写作为补充。这样即可保证得到高质量的代码。

总结

Perl语言强大的正则和hash能力成就了代码自动生成技术,在这个领域,其他脚本语言黯然失色。当然,使用Python也可以同样的功能。

但是,这还远远不够智能。

短期内,如何使得代码生成技术更加友好,更方便移植和管理?如何更加彻底地剥离人工干预的工作,脚本自动决定哪些电路需要自动生成的代码?

在更远的未来,是否能够抛弃掉太纠结于细节的Verilog语言?高级语言综合技术HLS、Chisel、AI自动生成代码和电路是否是更好的选择?

原文标题:书写Verilog 有什么奇技淫巧

文章出处:【微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    173

    文章

    6086

    浏览量

    178842
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114720

原文标题:书写Verilog 有什么奇技淫巧

文章出处:【微信号:HXSLH1010101010,微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5774次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>语法学习笔记

    使用Vivado ILA进行复杂时序分析的完整流程

    HDL 代码中标记待观测信号,添加 (* mark_debug = "true" *) 属性(Verilog)或 keep 属性(VHDL)
    的头像 发表于 02-04 11:28 530次阅读

    通过vivado HLS设计一个FIR低通滤波器

    Vivado HLS是一款强大的高层次综合工具,可将C/C++代码转换为硬件描述语言(HDL),显著提升FPGA开发效率。
    的头像 发表于 01-20 16:19 532次阅读
    通过vivado HLS设计一个FIR低通滤波器

    FPGA 入门必看:Verilog 与 VHDL 编程基础解析!

    很多开发者第一次接触FPGA,都会有同样的疑问:FPGA是硬件,不是软件,怎么写程序?答案就是用硬件描述语言(HDL),最常用的就是Verilog和VHDL。今天,我们就带你入门,搞清楚FPGA编程
    的头像 发表于 01-19 09:05 711次阅读
    FPGA 入门必看:<b class='flag-5'>Verilog</b> 与 VHDL 编程基础解析!

    【「龙芯之光 自主可控处理器设计解析」阅读体验】--LoongArch逻辑综合、芯片设计

    本篇讲述学习LoongArch逻辑综合测试性设计、物理设计章节内容。 一.逻辑综合 逻辑综合(logic synthesis)是将电路
    发表于 01-18 14:15

    如何使用Modelsim仿真I2C控制器

    ModelSim是Model Technology(Mentor Graphics的子公司)的HDL硬件描述语言的仿真软件。该软件可以用来实现对设计的VHDL、Verilog HDL
    的头像 发表于 01-10 14:14 5617次阅读
    如何使用Modelsim仿真I2C控制器

    智能光伏时代:&quot;四&quot;技术如何提升电站综合价值

    ,“可观、测、可控、可调”的“四”技术,西格电力光伏四装置咨询:1.3.7-5.0.0.4-6.2.0.0,凭借对电站全生命周期的智能化赋能,成为提升
    的头像 发表于 11-28 16:35 2144次阅读
    智能光伏时代:&quot;四<b class='flag-5'>可</b>&quot;技术如何提升电站<b class='flag-5'>综合</b>价值

    【产品介绍】Modelsim:HDL语言仿真软件

    概述ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核
    的头像 发表于 11-13 11:41 684次阅读
    【产品介绍】Modelsim:<b class='flag-5'>HDL</b>语言仿真软件

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    复杂的软件算法硬件IP核的实现

    Compiler)将算法编译转化为综合Verilog 文本,进而通过 FPGA 在硬件上实现算法。 1.C to Hardware 技术简介 AltiumDesigner
    发表于 10-30 07:02

    FPGA开发板vivado综合、下载程序问题汇总

    vivado综合时,可能出现该错误。将e203_defines.v设为全局包含,并将file_type设为verilog header,问题便可解决。 2.vivado无法连接hardware
    发表于 10-24 07:12

    如何利用Verilog HDL在FPGA上实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDL在FPGA上实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。在FPGA中实现SRAM读写测试,包括设计SRAM接口模块
    的头像 发表于 10-22 17:21 4561次阅读
    如何利用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>在FPGA上实现SRAM的读写测试

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如何生成浮点运算
    发表于 10-22 06:48

    SVA断言的用法教程

    SVA是System Verilog Assertion的缩写,即用SV语言来描述断言。断言是对设计的属性的描述,用以检查设计是否按照预期执行。
    的头像 发表于 05-15 11:39 3763次阅读
    SVA断言的用法教程

    verilog模块的调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块中包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的.
    的头像 发表于 05-03 10:29 1736次阅读
    <b class='flag-5'>verilog</b>模块的调用、任务和函数