计算机基础实战课
彭东
网名 LMOS,Intel 傲腾项目关键开发者
19719 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
计算机基础实战课
15
15
1.0x
00:00/00:00
登录|注册

03|硬件语言筑基(一):从硬件语言开启手写CPU之旅

你好,我是 LMOS。
我们都知道,自己国家的芯片行业被美国“吊打”这件事了吧?尤其是像高端 CPU 这样的芯片。看到相关的报道,真有一种恨铁不成钢的感觉。你是否也有过想亲自动手设计一个 CPU 的冲动呢?
万丈高楼从地起,欲盖高楼先打地基,芯片是万世之基,这是所有软件基础的开始,这个模块我会带你一起设计一个迷你 RISC-V 处理器(为了简单起见,我选择了最火热的 RISCV 芯片)。哪怕未来你不从事芯片设计工作,了解芯片的工作机制,也对写出优秀的应用软件非常重要。
这个处理器大致是什么样子呢?我们将使用 Verilog 硬件描述语言,基于 RV32I 指令集,设计一个 32 位五级流水线的处理器核。该处理器核包括指令提取单元、指令译码单元、整型执行单元、访问存储器和写回结果等单元模块,支持运行大多数 RV32I 的基础指令。最后,我们还会编写一些简单汇编代码,放在设计出来的处理器上运行。
我会通过两节课的篇幅,带你快速入门 Verilog,为后续设计迷你 CPU 做好准备。这节课我们先来学习硬件描述语言基础,芯片内部的数字电路设计正是由硬件语言完成的。

一个芯片的内部电路是怎么样的?

作为开发,你日常最常用的编程语言是什么?也许是 C 语言、Java、Go、PHP……这些高级编译语言吧。而硬件设计领域里,也有专门的硬件描述语言。为什么会出现专门的硬件描述语言呢?这还要先从芯片的内部结构说起。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Verilog硬件描述语言在芯片设计中扮演着重要角色。本文以LMOS介绍的迷你RISC-V处理器设计为例,深入浅出地阐述了Verilog的基本概念和设计方法。文章首先强调了硬件描述语言的重要性,突出了与传统编程语言的区别。随后,详细讲解了芯片的内部电路结构和数字电路设计的基本原理,强调了模块化设计的重要性。通过一个4位十进制计数器模块的实例,读者对Verilog模块代码有了更直观的认识,并逐步学习了Verilog语言的基础知识。文章内容简洁清晰,适合对芯片设计感兴趣的读者快速入门。Verilog中模块结构、数据类型、数值表达、运算符、条件、分支、循环语句以及过程结构等方面的知识得到了详细阐述,为读者打下了坚实的基础。总之,本文通过实例和清晰的语言帮助读者快速了解了硬件描述语言的基本概念和设计方法,为后续学习和实践奠定了基础。 Verilog硬件描述语言的特点和设计方法得到了详细阐述,为读者提供了深入了解芯片设计的基础知识。文章通过实例和清晰的语言帮助读者快速了解了硬件描述语言的基本概念和设计方法,为后续学习和实践奠定了基础。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《计算机基础实战课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(30)

  • 最新
  • 精选
  • 青玉白露
    置顶
    感觉大家很吃力,做了一个关于Verilog的初学者笔记,里面包含在线学习网站https://zhuanlan.zhihu.com/p/550710744

    作者回复: 6666 感谢分享

    2022-08-06归属地:湖北
    17
  • 肖水平
    思考题: 根本原因就是专用芯片运算速度比GPU快,GPU运算速度比CPU快,而软件实现的算法是运行在CPU上的。 具体原因如下: 1、指令数多:软件实现的算法最终要编译成CPU可执行的机器指令,中间还会有很多控制指令; 2、CPU指令执行步骤多:CPU执行一条指令需要经过取指、译码、执行、访存、写回步骤; 3、多位运算需要拆分:比如128位的运算在32/64位CPU上执行编译后会拆分成多条指令; 4、将算法硬件化后可以直接执行运算,不需要通过指令来控制,多位运算也可以实现多位运算模块来直接运算; 总之软件实现的算法在CPU消耗的时钟数要多很多,而CPU也只擅长控制,不擅长运算。

    作者回复: 是的 你学到了

    2022-08-03归属地:湖北
    13
  • 爱酱大胜利
    思考题: 1.设计的目的 CPU属于“通用性”设计 一个CPU能运行这个算法也能运行那个算法 改改代码就可以 代价就是翻译过程因为通用性所带来的迁就 而硬件化的算法属于“专用性”设计 也就是说它只能做着一件事所以怎么设计方便怎么来 反正以后不用为了实现其他算法再改电路了 这也是软硬件实现的区别之一 2.运行效率 还是由于上一条的设计理念 导致软件的运行依赖于CPU实现的特定指令集 原本算法中一个硬件周期的动作可能被转化为多条指令 而每条指令可能会依赖多个运行周期 即使运行会得到优化 也远远比不上一个周期来的快 而且CPU为了通用性很可能不会将这种特殊性动作添加到一个不常用CISC里

    作者回复: 66666

    2022-08-04归属地:湖北
    8
  • peter
    请教老师几个问题: Q1:代码转化后的逻辑电路,只是电子版的“设计电路”,并不是实际的电路,对吗? 文中有这样一句:“把一份电路用代码的形式表示出来,然后由计算机把代码转换为所对应的逻辑电路。”,此处,“转换后的逻辑电路”并不是实际的电路,应该只是“设计电路”。 Q2:“cnt_r <=4'b000;”? 此处应该是四个0吧,为什么写成三个0?笔误吗? Q3:芯片中的模拟电路是用什么设计的? Q4:芯片前端设计的代码,就是用verilog写的代码,对于一个芯片来说,一般规模多大?比如十万行代码?

    作者回复: Q1:对 Q2:是笔误 Q3Q4:是的 只会更多

    2022-08-01归属地:湖北
    3
    8
  • 泡泡龙
    思考题我认为,软件实现要在通用的硬件上执行就势必要执行一些逻辑上的模拟或者转换。而专用的硬件则没有这些转换过程,并且可以针对性的优化执行路径,所以要快许多。

    作者回复: 是的

    2022-08-01归属地:湖北
    5
  • LockedX
    老师,有个问题一直没有想明白 reg [3:0] cnt_r;     wire [1:0] cout_w; reg和wire的声明,冒号前面是数字代表位宽,冒号后面的0含义是什么?

    作者回复: 是0到3 4个bit 0到1 2个bit

    2022-08-01归属地:湖北
    2
    3
  • Geek_21cfda
    FPGA编程和今天讲得编程有什么区别吗?

    作者回复: 有

    2022-08-01归属地:湖北
    2
  • 可爱因子1/n
    针对我自己的理解,打个比喻:在性能和单位时间以及油门相同的情况下,我开着一辆车的发动机的转速和一个直接裸的发动机的转速比较,裸的发动机的转速按常理来说应该会更快一点,不知道我的比喻是否准确?

    作者回复: 你说呢

    2022-08-06归属地:湖北
    1
  • 111
    关于思考题: 我的理解是 Verilog更多面向的是硬件,通过它设计完成之后,可以直接参照其代码流程组合相关硬件,在针对特定算法的设计后,组合出来的就是该算法最“合身”的底层电路模型。 而对于一些软件语言的实现,更多的是业务层面的实现,业务实现之后还要面临“翻译”,翻译成计算机能够执行的指令集,这一步就已经开始出现了效率损耗,同时因为“翻译”动作,也就可能出现为了实现某一功能,底层指令可能要绕一些“弯路”才能实现,毕竟不能像Verilog那样,做到“完美贴切”的电路设计

    作者回复: 对的

    2022-08-02归属地:湖北
    1
  • nmg
    是因为用硬件实现是算法最优化电路设计,而软件实现可能是芯片现有资源的组合,不是最优电路,所以会慢吗?

    作者回复: 是的

    2022-08-01归属地:湖北
    1
收起评论
显示
设置
留言
30
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部