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

04|硬件语言筑基(二): 代码是怎么生成具体电路的?

你好,我是 LMOS。
上节课,我们学习了硬件描述语言 Verilog 的基础知识。今天我会带你一起用 Verilog 设计一个简单的电路模块。通过这节课,你不但能复习巩固上节课学到的硬件语言知识,还能在动手实践中体会代码是怎么生成具体电路的。

Verilog 代码编写

如果你学过计算机组成原理的课程或图书,应该对 ALU 并不陌生。算术逻辑单元(Arithmetic&logical Unit,ALU)是 CPU 的执行单元,是所有中央处理器的核心组成部分。
利用 Verilog,我们可以设计一个包含加、减、与、或、非等功能的简单 ALU 模块,代码如下:
module alu(a, b, cin, sel, y);
input [7:0] a, b;
input cin;
input [3:0] sel;
output [7:0] y;
reg [7:0] y;
reg [7:0] arithval;
reg [7:0] logicval;
// 算术执行单元
always @(a or b or cin or sel) begin
case (sel[2:0])
3'b000 : arithval = a;
3'b001 : arithval = a + 1;
3'b010 : arithval = a - 1;
3'b011 : arithval = b;
3'b100 : arithval = b + 1;
3'b101 : arithval = b - 1;
3'b110 : arithval = a + b;
default : arithval = a + b + cin;
endcase
end
// 逻辑处理单元
always @(a or b or sel) begin
case (sel[2:0])
3'b000 : logicval = ~a;
3'b001 : logicval = ~b;
3'b010 : logicval = a & b;
3'b011 : logicval = a | b;
3'b100 : logicval = ~((a & b));
3'b101 : logicval = ~((a | b));
3'b110 : logicval = a ^ b;
default : logicval = ~(a ^ b);
endcase
end
// 输出选择单元
always @(arithval or logicval or sel) begin
case (sel[3])
1'b0 : y = arithval;
default : y = logicval;
endcase
end
endmodule
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Verilog是一种硬件描述语言,用于设计电路模块。本文通过一个ALU模块的Verilog代码示例,介绍了如何设计包含加、减、与、或、非等功能的电路。文章详细解释了代码中的各部分功能和实现原理,以及阻塞赋值和非阻塞赋值的区别。通过这个例子,读者可以了解Verilog代码是如何生成具体电路的,以及如何利用Verilog进行硬件设计和实现。文章还提到了时序逻辑和组合逻辑的区别,以及并行执行的概念。此外,文章还介绍了仿真验证代码的方法,包括使用Iverilog和GTKWave进行仿真。另外,文章还介绍了逻辑综合的概念,以及如何使用Yosys进行逻辑综合。总的来说,本文对于想要了解Verilog硬件描述语言以及电路设计的读者来说是一篇很有价值的技术文章。文章内容涵盖了Verilog代码设计、仿真验证以及逻辑综合等方面,为读者提供了全面的学习指导和实践方法。同时,还提供了扩展阅读和思考题,引导读者深入学习和思考,使得本文具有很高的实用性和参考价值。

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

全部留言(37)

  • 最新
  • 精选
  • 揭晓林
    置顶
    老师和同学们好,我也写了下如何运行本次课程里的代码(类似实验手册):在Gitee上,欢迎各位PR https://gitee.com/peterjxl/geek-time-computer-foundation-peterjxl 也感谢Bryan同学的开源

    作者回复: 66666

    2022-10-18归属地:湖北
    2
  • 听水的湖
    置顶
    我是这门课的编辑小新,又见面啦。 感觉没接触过硬件语言的小伙伴对第三、四节课有畏难情绪,并且急于知道这两节课对后续学习的影响。这里统一说明一下: 👀两节课不太可能让你完全掌握verilog,如果之前没接触过硬件语言,一遍看下来有疑惑非常正常(大学学了verilog现在重看,卡壳也不奇怪)。 😑之所以咱们花两节课打这个基础,目的还是为实现riscv的处理器做铺垫,不然后面模块实现部分,代码大致思路都get不到就尴尬了。 👧所以建议根据自己情况量力而行,有能力就跟着课程写一写,至少risc-v指令集比x86简单嘛。 👉verilog我们主要是用在第三节课到第十一节课的处理器实现部分(手写miniCPU模块),不会verilog并不影响后面模块的学习。

    编辑回复: 潜水的同学可以冒个泡,多交流有助于学习进步~

    2022-08-08
    2
    10
  • Bryan
    置顶
    写了下在 Mac 下怎么编译运行整个代码 https://notes.singee.me/#/page/verilog%20%E7%94%9F%E6%88%90%E5%85%B7%E4%BD%93%E7%94%B5%E8%B7%AF

    作者回复: 6666

    2022-08-03归属地:湖北
    2
    17
  • Geek_21cfda
    华为移动端芯片设计是领先的,但要自主可控还要eda、光刻机等庞大的生态

    作者回复: 什么 领先 买的arm的

    2022-08-03归属地:湖北
    7
  • 李钟伟
    如何理解“阻塞赋值”和“非阻塞赋值”

    作者回复: 同步和异步

    2022-08-03归属地:湖北
    6
  • 伊宝峰
    Verilog设计逻辑电路是纯逻辑理论层面的,不需要太复杂的设备,相对容易做,但是做成实体CPU需要逻辑综合布线,需要生产,这两个有极高的难度,是我们目前没有掌握的。

    作者回复: 还有很多设备我们也没有

    2022-08-03归属地:湖北
    6
  • 青玉白露
    感觉大家很吃力,做了一个关于Verilog的初学者笔记,里面包含在线学习网站https://zhuanlan.zhihu.com/p/550710744

    编辑回复: 赞分享精神~

    2022-08-06
    4
  • vampire
    verilog只能设计出微架构,而不能设计出isa,更不能培育出生态

    作者回复: 培养生态 要用商业

    2022-08-03归属地:湖北
    4
  • 熊出没
    有设计,也需要有制造,制造工艺跟不上是一方面,再加上芯片设计的专利保护等,我们没有一完整的生态。

    作者回复: 是的 这是实情

    2022-08-06归属地:湖北
    3
  • DustyBun
    感谢 lmos 把自己的知识与经验分享出来,为求知的人开了一盏明亮的灯。

    作者回复: 一起 加油

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