V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Schwinger777
V2EX  ›  硬件

一名本科生对于 FPGA 问题求教

  •  
  •   Schwinger777 · 2023-02-06 13:20:57 +08:00 · 2242 次点击
    这是一个创建于 650 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我个人本科有门计算机组成原理与接口技术学起来感觉特别吃力,该课程是关于 mips 指令,然后实验是做 FPGA 板的实验,应该用的是 nexys4 开发版。我想请教一下各位这门课到底该如何入门,我听学校老师的课,感觉有点听不懂。我感觉记忆量很大,很多东西我不是很理解,感觉是死记硬背。还有就是做题涉及到 mips 指令和 c 语言指令相互转换的题目,以及就是 FPGA 做中断和 AXI 总线一些实验在 vivado 上做一些实验,这些我都感觉脑海一片空白。希望各位能够推荐一些好上手的资料。感谢。

    15 条回复    2023-02-07 13:07:33 +08:00
    duke807
        1
    duke807  
       2023-02-06 13:41:00 +08:00 via Android   ❤️ 2
    我表示,这些专业知识靠上课就完蛋了,除非你不在国内

    建议找海外教材自学

    fpga 建议在 linux 系统下开发,因为厂商 eda 都是原生 linux 版本,之后 porting 到 win 系统
    而且未来涉及到 asic 芯片开发,主流 eda 都是 linux only

    语言建议用 verilog ,不要用 vhdl
    仿真建议用 cocotb ,用 python 写 tb 更高效方便,波形用 gtkwave 查看
    Mithril
        2
    Mithril  
       2023-02-06 13:59:42 +08:00   ❤️ 5
    你要搞明白一件事,这课不是让你去学 FPGA 的,而是让你通过 FPGA 和实验,去了解“计算机组成原理”的。

    简而言之,就是你自己用 FPGA 上模拟一个简单的 CPU 核,去尝试和了解指令是如何执行的,中断是如何处理的等等内容。你去找一堆 FPGA 教程,学各种开发相关的内容其实是本末倒置了。

    对于 FPGA 开发方面,你只要知道怎么编写烧录程序,怎么调试(甚至这个都不必要,学会怎么用 LED 就行,等你项目复杂靠灯搞不定了,自然就想办法去学了),以及基本的 Verilog 或者 VHDL 的语法功能就行了。

    如果你自己实在弄不明白,可以找老师要一份写好的项目,最简单的能跑就行。在此基础上随便改改,逐渐习惯了整个流程,再上手写自己的。

    这个课程可以算本科课程里面最重要的之一了。通过它你可以明白,用于支撑你开发的这些代码运行的电路基础到底是什么样的。哪怕你以后只做高级语言开发,这些也能帮你写出更高性能的代码,更容易地学习靠近底层的技术。非常值得你花大量精力去学好它。
    leoleoasd
        3
    leoleoasd  
       2023-02-06 14:06:00 +08:00
    我的 verilog mips 核(只做了学校要求的十几条简单指令,非常少):
    https://github.com/leoleoasd/mips_cpu
    logisim mips:
    https://github.com/leoleoasd/mips-cpu-logisim
    可以参考
    leoleoasd
        4
    leoleoasd  
       2023-02-06 14:07:50 +08:00   ❤️ 1
    mips 指令和 c 语言指令如果不熟悉,可以找汇编语言资料。不同的架构的汇编( mips/arm/riscv/amd64 )都是相通的,学明白一个其他的就自然懂了

    以及,非常推荐『深入理解计算机系统』( Computer System: A Programmer's Perspective )这本书,适合汇编和计算机组成原理课程的入门。
    Schwinger777
        5
    Schwinger777  
    OP
       2023-02-06 14:16:36 +08:00
    @duke807 感谢您的指点。
    Schwinger777
        6
    Schwinger777  
    OP
       2023-02-06 14:20:21 +08:00
    @Mithril 感谢您的指点,我会好好体会计算机组成原理。我可以买 nexys4 开发版照着官方给的指导手册慢慢来研究吗?
    Schwinger777
        7
    Schwinger777  
    OP
       2023-02-06 14:20:44 +08:00
    @leoleoasd 多谢大佬的指点
    leoleoasd
        8
    leoleoasd  
       2023-02-06 14:21:51 +08:00
    至于『推荐在 linux 系统下开发』、『推荐使用 verilog 而不是 VHDL 』这类建议,一定要提前问老师是否可以。比如,我们学校的机组课程不能用 VHDL ,我们也必须用一个只有 windows 版的很旧的 eda (板子很旧,新的 eda 不支持)
    Schwinger777
        9
    Schwinger777  
    OP
       2023-02-06 14:33:28 +08:00
    @leoleoasd 我会找老师咨询的,我不知道是不是我学习方法有问题,在 mips 指令和 c 语言互相转化的时候,短一点的代码和汇编我都能做出来,但是一到比较长的代码,或者涉及递归迭代,我做这种问题,就会脑袋一片空白。然后考试做中断设计的综合题目,也是很难下笔,这种情况是不是我实验理解不够,做的太少?我看书上那些伪代码,短的可以看懂,但是一旦代码很长,我就感觉很难看下去,对于一些细节感觉就是看不懂。
    leoleoasd
        10
    leoleoasd  
       2023-02-06 14:51:21 +08:00
    我理解,长的代码和短的代码也没本质区别?比如 c 翻译成汇编的时候,第一步,给所有变量分配一个地址(栈上或者堆上或者寄存器),然后一行一行对照着翻译。翻译的时候,只管当前的一行,不管上下文。最后再整体看看有没有可以优化的(比如复用寄存器、复用运算结果等)就完了,这样 拆开看,短的程序和长的程序也没本质区别?可能就是熟练程度的问题?
    我当时是,大一看了深入理解计算机系统那本书(也没看完,就只看了前几章,到 jvm 那里就没继续看),就有了一个初步的理解,然后再上计组课和汇编课就没啥难度了
    leoleoasd
        11
    leoleoasd  
       2023-02-06 14:52:28 +08:00
    中断设计,我做的不多。我一般是先用 c 和伪代码整体想好怎么写,再一点一点翻译成汇编。直接写汇编确实很难。
    Mithril
        12
    Mithril  
       2023-02-06 14:53:49 +08:00
    @Schwinger777 自己买肯定是可以的,但感觉没什么必要,直接用学校的就行了。只要不是上课时间值班老师一般是不会拦着你的,毕竟他们也知道实验课就是为了让你刷经验的。

    而且有的时候学校的不一定和你买的一样,有的是自己统一做过修改,有的是版本特别老,你自己买个不一定能对的上。而且它本身也不便宜,反正你都交了学费了,玩坏几块板子也算回本了:)

    另外你说的短一点的能写出来,长的写不出来。个人认为主要还是经验问题,多写多练就行了。你本身开发经验就不是很多的时候,去学这做这些编译器的工作自然比较困难。

    你可以用个正常的编译器生成汇编,然后你再用你写的对比一下。主要是看看编译器在结构上是怎么处理你的代码的。不懂怎么装交叉编译工具的话,可以试试这个 https://godbolt.org/ 主要注意的是转换的思路,不要在意具体细节,毕竟不同编译器有不同的处理逻辑,指令集也不一定完全一致。
    rudder2021
        13
    rudder2021  
       2023-02-06 18:29:26 +08:00 via Android   ❤️ 1
    我最近在看的一本书,好像叫《 Computer Architecture Tutorial Using an FPGA 》,书中基本上是手把手地教你怎么用 Verilog 实现一个简单的 ARM CPU ,不过书中用的是 Intel 的 FPGA 。有兴趣可以看看。
    中文书的话,我觉得比较好的入门资料:
    1. 《计算机组成 结构化方法》,从底层的数字电路一步步往上搭建体系结构
    2. 《数字设计和计算机体系结构》,里面包含了 SystemVerilog 、VHDL 的入门内容
    如果需要了解更高级的内容,可以找一些数字 IC 和 VLSI 设计的书来看
    levelworm
        14
    levelworm  
       2023-02-07 11:31:07 +08:00 via Android
    实在不行先看看这两门课程,第一门是 nand2tetris ,仅看硬件部分即可;第二门是 edx 上面的 RISC-V softcore ,都挺适合入门的,后者可以用类 verilog 语言。
    qi1070445109
        15
    qi1070445109  
       2023-02-07 13:07:33 +08:00 via Android
    @Schwinger777 这不是编译器做的吗?可以编译出来看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:25 · PVG 00:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.