1. 硬件设计概述:从软件思维到硬件思维的转变

各位同学,欢迎来到《从Verilog到硬件设计:系统化修炼》的第一章。我是你们的讲师,一个在数字芯片设计领域摸爬滚打了十几年的老工程师。今天咱们不聊虚的,直接切入正题——硬件设计到底是怎么回事,它和写软件有什么本质区别。

1.1 数字电路基础回顾

先别急着翻白眼,觉得这是大学课本内容。我见过太多人,Verilog写得飞起,结果综合出来的电路完全不是那么回事。为什么?因为基础不牢。

数字电路的核心就三个东西:组合逻辑时序逻辑状态机。说白了,组合逻辑就是“输入一变,输出立马变”,比如与门、或门、加法器。时序逻辑呢?它有个“记忆”功能,靠时钟沿来更新状态,比如触发器、寄存器。

核心要点:组合逻辑没有记忆,时序逻辑有记忆。这是硬件设计的基石。

我记得刚入行那会儿,有个同事写了一个计数器,代码看起来完全正确,但仿真就是不对。折腾了两天,最后发现是组合逻辑里用了寄存器赋值,导致产生了锁存器。嗯,这种坑,你们以后也会遇到。

1.2 从软件思维到硬件思维的转变

这是本章的重头戏。很多从软件转过来的同学,最容易犯的毛病就是——把Verilog当C语言写。

你想想看,软件是顺序执行的。CPU一条一条地读指令,按部就班地跑。但硬件呢?所有模块是同时工作的。你写一个always块,它和另一个always块是并行执行的。这就像一个大工厂,每个车间都在同时运转,而不是等一个车间干完活再启动下一个。

我给大家画个图,看看软件和硬件的本质区别:

软件执行(顺序) 指令1 指令2 指令3 硬件执行(并行) 模块A:数据通路 模块B:控制逻辑 模块C:存储接口 同时运行 软件:一条路走到黑 硬件:多条路同时跑 核心转变:从“顺序执行”到“并行思维”

为什么会这样?因为硬件里每个模块都是独立的物理电路。你写一个加法器,它就是一坨门电路,通电就开始算,不需要等谁。你写一个状态机,它也是独立的一块逻辑,和旁边的计数器各干各的。

我个人习惯,在写Verilog之前,先画一个模块框图。把输入输出标清楚,把每个模块的功能想明白。这样写出来的代码,综合后基本就是你想要的结构。

小技巧:写Verilog时,脑子里要想着“这行代码会综合成什么电路”。如果想不到,那就先别写,回去翻翻数字电路教材。

1.3 FPGA与ASIC设计流程简介

好,接下来聊聊FPGA和ASIC。这两个东西,说白了就是硬件设计的两种“落地方式”。

FPGA(现场可编程门阵列),你可以把它理解成一块“万能积木”。里面预置了大量逻辑单元和连线,你通过编程(下载比特流)来“拼”出你想要的电路。优点是灵活,改起来快,适合原型验证和小批量生产。

ASIC(专用集成电路),则是“定制芯片”。从设计到流片,周期长、成本高,但性能好、功耗低、量大便宜。手机里的主芯片、AI加速芯片,基本都是ASIC。

我给大家整理了一个对比表,一目了然:

对比项 FPGA ASIC
开发周期 短(几周~几个月) 长(半年~两年)
成本 前期低,批量单价高 前期高(光罩费),批量单价低
性能 中等 高(可定制优化)
功耗 较高 低(可精细控制)
灵活性 可重复编程 流片后无法修改
典型应用 原型验证、通信基站、工业控制 手机芯片、CPU、AI芯片

设计流程上,FPGA和ASIC的前端设计基本一样:

  1. 需求分析——搞清楚要做什么,性能指标是多少
  2. 架构设计——划分模块,定义接口
  3. RTL编码——用Verilog/VHDL写代码
  4. 功能仿真——验证逻辑对不对
  5. 综合——把RTL代码转成门级网表
  6. 时序分析——检查能不能跑到目标频率

区别在于后端。FPGA只需要布局布线、生成比特流,然后下载到芯片上就能跑。ASIC则要经过物理设计、流片、封装测试,每一步都烧钱。

避坑指南:我曾经有个项目,FPGA上跑得好好的,结果转ASIC时发现时序收敛不了。为什么?因为FPGA的布线资源是固定的,而ASIC的布线可以优化。所以,做FPGA原型时,一定要留时序余量,别卡着极限频率跑。

嗯,这里要特别强调一点:设计流程不是死板的。我见过很多团队,花大量时间在仿真上,结果综合出来一堆问题。我的建议是:早期多花时间在架构设计上,把模块划分清楚,接口定义好。代码写起来反而快。

最后,给大家看一个典型的设计流程图,感受一下整体脉络:

需求分析 架构设计 RTL编码 功能仿真 综合 时序分析 明确功能、性能指标 模块划分、接口定义 Verilog代码实现 验证逻辑正确性 RTL→门级网表 检查时序约束

好了,第一章的内容就到这里。记住一句话:硬件设计,本质是“用代码画电路”。别把它当成写软件,也别把它当成画原理图。它是两者的结合——用软件的方式,描述硬件的结构。

课后思考:你写一个always块,里面有两个if-else分支。综合后,它会变成什么电路?是组合逻辑还是时序逻辑?为什么?


公众号:蓝海资料掘金营,微信deep3321