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

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

3天内不再提示

Verilog如何做到心中有电路?

倩倩 来源:IP与SoC设计 作者:IP与SoC设计 2022-08-31 14:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

老师说没电路就不要写代码,但我写个乘法器在综合前都想不出它电路啥样,全加器还行,写Verilog如何做到心中有电路?

首先,你们老师说的是正确的,但可能是说的不够详细,或者你表达的不全。

准确的说,在写Verilog前,要做到心中有数字电路

数字电路设计主要就是,选择器、全加器、比较器,乘法器,几个常用逻辑门,再加个D触发器,电路基本都能实现了。这些器作为基本单元,对于工程设计来说,并不需要过多的关注它更底层的门或晶体管的样子。

我在学生时代刚开始学数字电路设计的时候,很长一段时间都是眼里只有代码和功能时序,没有一个良好的正向设计思路。比如,知道要实现的功能,二话不说开始新建.v写代码,边写边想,这样导致的结果,准确的来说时序都是调出来的,而不是设计出来的。

写的代码几乎全使用


		

always @(posedge clk or negedge rst_n)

从不考虑消耗的资源和面积,学生阶段的项目用FPGA也很难把芯片资源用爆,全用的寄存器肯定不会出现时序不满足的情况。

而实际上做设计最应该关注的是PPA(Performance, Power, Area),寄存器多面积必然大,处理必然延时大,功耗怎么小。寄存器打拍是因为组合逻辑路径过长,才往中间插一拍,而不是随便打。

在写Verilog前,不光要心中有电路,还要有关键时序图,有一个硬件的详细设计方案。而且不光在心里,还得写下来,画下来,整理成文档。在动手写代码前,心中就有了谱,清楚的知道,我这个设计能成。

而一个正确的正向设计流程应该是,首先确定设计模块的功能需求,划分整体的硬件结构,可以大致分为几个部分。每一个部分实现一个独立的功能,不同部分之间接口交互确定。

设计分为数据通路和控制通路。

数据通路决定了整体数据流的走向,整个模块计算分为哪几部分,哪些是可以排成流水线,中间的数据流是否需要断掉,用RAM存还是RegFile存储。数据通路中数乘法器单元的面积最大,一般都是采用的是分时复用的方式。整个数据通路的计算流整理出来后,基本上乘法的最大个数也统计出来,然后控制计算模块在不同的时间复用。乘法器的数量和复用程度决定了一个设计是否更优,好的设计是整个数据通路中乘法器几乎空闲不下来。

到了单个计算模块,每个模块都能画出一个简单的计算电路图,

d815a95a-28e2-11ed-ba43-dac502259ad0.png

上面这个图的意思是,a * b或c * d的结果进行累加,最后饱和截位进行输出。

画出了电路图,就可以大体估算出,整个设计需要的寄存器的数量,乘法器的数据。乘法器和寄存器的量级估算基本上就可以确定整个设计的面积单位量级。

控制通路就是玩时序设计,画出时序图,具体的实现就是各种大大小小的计数器、enable、start、end、valid、flag信号。系统整体的调度,就记住一句话,状态机大法好。当然虽然说状态机可以实现一切时序电路,但并不是所以时序功能都适合用状态机。比如,整个设计的处理都是连续流水处理,那么对于状态机的来说就是一个状态,不需要用状态机了。

控制通路的设计就不是画电路图了,而是画时序图,状态机的跳转,各种控制信号的时序交互,握手,ram的读写控制等等关键时序图,都需要画出来。控制通路上的资源占比很少,一个10bit的计数器就可以计到1023,一个数据打拍就32bit,各种flag就1bit,更不值一提。所以设计中评估资源和优化主要关注的数据通路。

数据通路和控制通路整理完成后,整个设计的处理时间和占用资源基本上就可以估算出来。上面的工作都完成后,然后就是照图施工,你会发现,写代码就完全是个体力活的事情。只要你方案设计的好,图画的好,文档写的清晰,随便找几个会写Verilog的代码都能写出来(夸张的表述)。

回到我们说的Verilog HDL的HDL的全称是Hardware Description language,是硬件描述语言,不是design,是在描述之前,你就得想好要描述的东西。做设计的时候按照这样的思路和套路去想,去做。

再来说说做设计时的描述方式,一些更底层的描述方式,比如

&sel[1:0] 等效于 sel[1:0] == 2'b11

~(|sel[1:0])等效于 sel[1:0] == 2'b0

~a[3:0] + 1'b1 等效于 -a[3:0]

c[4:0] = {a[3], a[3:0]} + {b[3], b[3:0]}等效于c[4:0] = $signed(a[3:0]+b[3:0]

变量乘以一个常数用移位加


		

assign data_out[5:0] = ({6{data_vld0}} & data0[5:0]) | ({6{data_vld1}} & data1[5:0]) | ({6{data_vld2}} & data2[5:0]) | ({6{data_vld3}} & data3[5:0]);

这是一个4选1的数据选择器,并且要求四个vld不能同时为1。

实际上,抛开代码的可读性,很多代码的写法,并不需要多此一举用更底层的描述方法,高级的描述只要语法和工具支持,就可以直接使用,更底层的描述,我们以为会用更少逻辑,但是工具可能也会优化的更好,比如,变量乘以常数,a * 2‘d3,工具会帮你优化成 a << 2’d1 + a。甚至可能还优化得更好,所以还不如直接用乘法器,*号。

当然也不能过分依赖工具,能复用的逻辑尽量复用,先选后比,先选后加,先选后乘。毕竟自己写出来的逻辑是确定的,而交给工具并不一定会按你想的方向去优化综合。而做一个设计在确保代码功能实现的前提下,还需要考虑的是代码可调试性和可维护性。

最后再扯一段我用过好几次的话

学习Verilog的五个阶段

00:心中无电路,代码无电路

01:心中有电路,代码无电路

10:心中有电路,代码有电路

11:心中无电路,代码有电路

00:心中无电路,代码无电路

达到10就可以了,这时候你就是高手了,再往后就开始玩玄学了。

欢迎纠正,欢迎补充。

审核编辑 :李倩


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

    关注

    173

    文章

    6086

    浏览量

    178845
  • 寄存器
    +关注

    关注

    31

    文章

    5619

    浏览量

    130419
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114722

原文标题:写Verilog如何做到心中有电路?

文章出处:【微信号:IP与SoC设计,微信公众号:IP与SoC设计】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【PCIe 6.0 连载 · 中篇】从设计到实现:高速信号如何做到又快又稳?

    读懂了PCIe6.0的行业价值,接下来更关键的是:64GT/s的高速信号,如何做到稳定传输?上篇我们讲了“为什么需要PCIe6.0”,本篇作为系列中篇,聚焦工程实现核心,拆解PAM4信号的“脆弱性
    的头像 发表于 04-15 17:34 98次阅读
    【PCIe 6.0 连载 · 中篇】从设计到实现:高速信号<b class='flag-5'>如何做到</b>又快又稳?

    高压试验变压器如何做到“免维护”?背后是哪些设计在支撑长期可靠运行?

    开篇痛点您是否经常为试验变压器的定期维护、加油、干燥处理而烦恼?设备停机维护不仅影响试验计划,更是一笔不小的人力与物料成本。有没有一款设备,能真正做到“即插即用”,省心省力?“免维护”是综合性
    的头像 发表于 04-15 17:12 408次阅读
    高压试验变压器<b class='flag-5'>如何做到</b>“免维护”?背后是哪些设计在支撑长期可靠运行?

    工业交换机为什么必须支持SNMP?一文讲清它的原理与作用

    当现场部署了几十台、上百台甚至上千台工业交换机时,运维人员到底如何做到心中有数”?如果仅靠人工逐台登录设备排查,不仅效率低,而且几乎不具备实时性。
    的头像 发表于 03-25 14:23 205次阅读
    工业交换机为什么必须支持SNMP?一文讲清它的原理与作用

    Verilog HDL语法学习笔记

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

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

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

    国产最强机器人大脑是如何做到

    这种拼凑的架构,导致指令需要跨越多个硬件和软件层,造成高达数十甚至数百毫秒的延迟。
    的头像 发表于 01-13 10:23 776次阅读

    请问verilog文件开头部分的@00080000是什么意思?

    请问verilog文件开头部分的@00080000是什么意思??
    发表于 11-06 08:10

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

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

    请问IR900路由器如何做端口映射?

    IR900 路由器如何做端口映射?
    发表于 08-06 08:29

    PCIe协议分析仪在数据中心中有何作用?

    PCIe协议分析仪在数据中心中扮演着至关重要的角色,它通过深度解析PCIe总线的物理层、链路层、事务层及应用层协议,帮助运维人员、硬件工程师和系统架构师优化性能、诊断故障、验证设计合规性,并提
    发表于 07-29 15:02

    无感考勤如何做到“无懈可击”?

    无感考勤的核心价值,在于用技术赋能管理。四维慧眼通过精准识别、本地化部署与开放生态,为系统集成商和工程商提供高适配、易落地的解决方案,帮助企业实现效率与体验的双重升级。
    的头像 发表于 07-17 18:03 739次阅读

    大型数据中心中的差分晶体振荡器应用与频率匹配方案解析

    介绍差分晶体振荡器在数据中心中在交换芯片、AI服务器、存储控制器等场景下的频率匹配和接口设计方案。
    的头像 发表于 07-16 08:00 1833次阅读
    大型数据中<b class='flag-5'>心中</b>的差分晶体振荡器应用与频率匹配方案解析

    这款微型MEMS IMU如何做到战术级测量?

    在无人机、机器人、无人车辆等智能设备快速发展的今天,高精度姿态测量和稳定控制成为核心需求。然而,传统惯性测量单元(IMU)往往面临体积大、重量重、环境适应性差等痛点。ERICCO的ER-MIMU-103微型MEMS IMU以创新的设计和卓越的性能,为行业带来全新解决方案。它是如何实现性能突破的?今天让我们解析它的关键技术。 1.轻巧如羽,性能如磐 -尺寸仅有47×44×14mm,重量≤150g,轻松嵌入空间严苛的无人机、机械臂等设备,告别臃肿。    -内置高性能
    的头像 发表于 06-27 16:10 736次阅读

    海康威视以物联感知和人工智能技术助力水利行业数智化转型

    汛期堤防隐患如何实现毫米级监测?河湖生态治理如何做到智能预警?大模型技术如何赋能传统水利决策?这场汇聚100+技术单位的行业盛会给出了创新答案。
    的头像 发表于 05-07 10:51 1109次阅读

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

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