F6:我的第一块芯片
我们已经实现了sCPU,可以计算数列求和,但是这个处理器确实让我们对处理器如何工作有着更为深入的认识。但由于限制,不能运行复杂的程序,由于其指令集的宽度,PC的数量,GPR的位宽,指令的功能。所以,在接下来我们要实现一个功能完备的RISC-V处理,可以运行更多的程序。 Just for fun! let’s go! 迷你RISC-V指令集RISC-V是近十年流行起来的开放指令集架构, 它采用模块化的思想, 把指令划分成不同模块。除了基础指令集RV32I, 还有各种指令扩展, 包括乘除扩展, 浮点扩展, 原子操作扩展等. 开发者可以根据自身需求选择一个或多个扩展, 也可以一个扩展都不选, 这种灵活性受到了开发者的喜爱. RV32I共有42条指令, 通过实现RV32I, 处理器已经足够完成绝大部分的计算工作. 不过为了进一步降低开发的工作量, 我们提出了一个”迷你RISC-V”指令集minirv, 从RV32I中选出了8条指令, 用它们来替代其他RV32I指令的功能, 使得RV32I能完成的工作, minirv也能完成. 这样, 我们就不必实现完整的42条RV32I指令, 也能让处理...
F5 支持数列求和的简单处理器
要求:在此之前, 我们需要再次明确需要实现的指令集sISA的细节. 和上一小节相比, 此处还约定了一些寄存器的位宽: PC位宽为4位, 初值为0 GPR有4个, 位宽均为8位 支持如下3条指令 123456787 6 5 4 3 2 1 0+----+----+-----+-----+| 00 | rd | rs1 | rs2 | R[rd]=R[rs1]+R[rs2] add指令, 寄存器相加+----+----+-----+-----+| 10 | rd | imm | R[rd]=imm li指令, 装入立即数, 高位补0+----+----+-----+-----+| 11 | addr | rs2 | if (R[0]!=R[rs2]) PC=addr bner0指令, 若不等于R[0]则跳转+----+----------+-----+ 最多执行16条指令,不含benr0现有情况,支持8位int,最大数为256 我们将这个用数字电路实现的sISA指令集的CPU称为sCPU. 要实现sCPU...
F4 计算机系统的状态机模型
计算机是严谨的,输入与输出有着严格的end to end的关系,我们要处理的中央处理器(CPU),也是这样的装置。 处理器是一个机械地进行数据处理的装置, 它要做何种处理, 就应该是受到某种方式的控制, 而不存在可以自己思考的智能。这样的处理器的媒介,就是指令。我们可以用加法字段对两个数据相加,和我们在计算器中的控制码是非常的类似的。 要”用加法指令来控制处理器对两个数据进行相加”, 说明一条指令需要给出两方面的信息: 一方面, 计算机需要处理的数据有很多, 因此指令中需要指定需要处理哪些数据, 这称为指令的”操作数”(operand)字段; 另一方面, 计算机处理数据的方式也有很多种, 因此指令中也需要指定用何种方式处理数据, 这称为指令的”操作码”(opcode)字段. 我们看到,在计算中的很多结果,需要保存起来供后续使用,这种东西就叫做寄存器。由于这样的寄存器用于处理一般数据,一次也称为通用寄存器(GPR)。相对地,有一些寄存器地功能并不是用于一般处理,便不叫作GPR 存储程序程序的本质就是一段指令序列 那就有一个问题,计算机为什么会比计算器强太多。答案在于计算机的工作机制...
2:对寒假的总结
从二月多放假,到二月底的现在。寒假快要走到了尾声。 虽说寒假的确在学习上花了很多时间,但多多少少是有些不在状态的,也就是说,我画的时间和得到的进步往往不成比例。我学的最多的应该是“一生一芯”,可能对于一个新生的板块,我自己有着很强的好奇心和主观能动性,所以应该还是投入最多的。但接触一个新的,诸如计算机原理这样的课程,对我也有着并很多的冲击和启发。 去动手,去实践,不去逃避,不去AI。而是去手搓,感受老一辈艺术家的魅力,我觉得这样真的很棒,在假期中,我可以追寻在课本之外的一个世界。对于电信大类而言,学的东西说白了都很肤浅,在其中有着极其庞大的一座巨人的肩膀,等着我们去探索和发现。 但是假期我还是懒惰的,思想中也产生了片刻的迷茫。当一股热潮过去后,思考为什么的时候,确实应该是这样的。只不过在假期快要结束的现在,这样的情况,得到了一些的好转。 还有一件很重要的事情,是要去保护视力,我的视力,相比高三那种健康的状态,视力还是有了很多的下滑,实际上花在工作上的时间是有限的,更多是自己玩手机刷视频而虚度的。 在这个变换的世界,大道以多歧亡羊,学者以多方丧生。有的时候,相比于刷短视频去打发时间...
1:bilibili下载器
最近喜欢听钢琴曲,但很多曲子在音乐上都没有,而且很多音乐的曲子在音乐平台上都是没有的,又或者有些是UP主的天赋,很想下下来,放在耳机里循环欣赏,于是有了这个想法 参考 pangguy/bilibiliAudioDownloader-1: 输入视频BV号列表,批量下载B站视频中的音频到本地。 https://github.com/Henryhaohao/Bilibili_video_download https://github.com/SocialSisterYi/bilibili-API-collect 改进原有的代码在2021年最后一次进行更新,我们在现在进行复现,并且随着哔哩哔哩的反爬技术进一步的更新,我们需要进行一些改进,最后在原有的代码基础上,我们将其封装成为exe文件,供没有python环境的音乐爱好者们可以一起欣赏 主要功能输入视频BV号,下载B站视频中的音频到本地。 使用方法在哔站上复制BV号,然后按需要点击下载即可 获取https://github.com/lijiayi-plus/bilibili-audio-downloader-v2
F3.3: 数字逻辑电路基础
续 基本组合逻辑电路多路选择器1.搭建一个1位2选1选择器,如图 整数的机器级表示原码原码是一种直观的编码,最高位表示符号位,0表示正数,1表示负数,其余位表示真值的绝对值,但这存在一个问题。 例如: 12340b00000111 = 70b10000111 = -70b00100010 = 340b10100010 = -34 考虑采用8位的RCA进行原码加法: 12340b10000111 (-7) 0b10000111 (-7) 0b00000111 (7)+0b10100010 (-34) +0b00100010 (34) +0b10000111 (-7)----------- ----------- --------0b00101001 (41) 0b10101001 (-41) 0b10001110 (-14) 通过上述观察, 我们可以得出以下结论: 当两数皆为正数时, 通过RCA进行加法所得的结果按原码解释, 与将两数按原码解释后得到的结果在数学意义上相加, 两者一致. 因此, 在这种情况下, 可...
F3.2 数字逻辑电路基础
通过门电路搭建基本组合逻辑电路有了门电路以后,我们就可以通过多个门电路的组合来搭建一些在数字电路中常用的模块了 译码器译码器(decoder)是一种将K位输入转换为最多2的K次方种不同输出的电路,一类常见的译码器是n选1译码器(1-of-n decoder),他将二进制输入解析为一个数值x,并且使得输入的第x位为1,其余全为0,也就是我们说的独热(one-hot)编码。其真值表和电路图如下: 搭建2-4译码器我们在logisim中进行实现,由于我们要进行编码,而输入为2,输出为4,我们需要将其两两进行逻辑运算。我们对于输入的两个信号进行非运算后,我们有了4个两两一组的元素可以进行比较。由于其它都是0,只有一位是1,所以我们最终选择与门进行实现在计算机中, n选1译码器常用于实现寻址的部分功能, 此时译码器的输入即为地址, 输出则是选择信号, 其中与地址对应的选择信号为1. 在现代计算机中,得益于存储单元之间的连续性, 如果计算机要访问其中一个存储单元, 它并不需要从第1个存储单元开始按顺序检查, 而是可以通过一个”行号”来快速找到对应的存储单元. 这个”行号”在计算机中称为”地址...
F3.1 数字逻辑电路基础
这是“一生一芯”项目的一个beginning,千里之行始于足下,希望能够通过自己的学习和体会,在下个学期末之前完成流片。如果我的数电的大作业最后是自己搭的一个芯片,我真的觉得那样酷毙了,learn for fun。 处理器本质上是数字电路,而数字电路是用来处理数字信号的电路,而数字信号简单来说就是指0和1这样两种练得信号。0和1并不是数字意义的自然数的前两位,而是电路的高电平和低电平的两种不同的状态,所以有的时候也会把它们称之为逻辑0和逻辑1。 模拟信号是连续的,像是电流和电压一样。 想要学习数字电路,学习处理器的芯片设计,数字电路的知识是基础,而要学习数字电路,就是要学习信息在数字电路中是如何表示,处理和存储的。 通过晶体管实现0和10和1是抽象的,在数字电路中,0和1一般来说依靠晶体管进行实现,我们常常采用MOSFET(金属-氧化物-半导体场效应晶体管),根据用途的不同,一般又分为nMOS ,和pMOS,管两种。在模电中,我们一般运用的是场效应管的放大效应,即其对电压的放大能力,而在数电中,我们一般使用其开关特性。原理不进行赘述,参考模电教材。 接下来我们学习CMOS(Com...
我的第一篇原创博客
作为一个想要使用hexo在github上搭建自己的主页的小白而言,首先需要搭建好自己的主页,也许以为是markdown的原因,也许我们需要还要搭建一个图床。我相信hexo架构一定是一个不错的选择,以下这一部分就是一个hexo架构搭建的过程。 参考教程:文档 | Hexo 什么是hexohexo是一个快速简洁并且高效的一个博客的框架,使用markdown语言解系文章。 安装安装hexo需要以下的应用程序: node.js git 关于Git首先打开powershell,输入git --version,如果有显示版本号,那么我们的程序就是正确安装好了的。 关于node.js我们通过nvs进行安装,首先用管理员身份打开powershell,执行以下的命令:winget install jasongin.nvs,然后就会开始安装。但是在这里有一个坑,就是如果我们直接打开普通的powershell的模式下,我们输入nvs --version 的时候会显示无法执行脚本文件,这是因为powershell的管理模式默认的运行策略是restricted,所以我们需要运行命令,更改运行的模式。...
Hello World
Hello World 正如千千万万人的第一个print的语句,Hello World!的确具有非凡的意义。 这也是我的第一篇blog,以此为起点,以此为地基。慢慢的成长,慢慢的发芽。 人生也许就是一场游戏。不代表游戏人生,不代表不认真,而是人生百年,真的很好玩。 人生百年,活不带来,死不带去。每个人生命的起点和终点,始终是一样的。人生也像一个游戏一样,有着开始,有着结束。剩下的日子,耍喽。 我想搞懂这个世界的逻辑,搞懂宇宙的一些奥秘。我也想在电子的世界里面,创造我自己的一个世界。 生命本就是一场,创造奇迹的旅程。肆意生长,悄然绽放,开花结果。于周而复始中,将很熟撇捺慢慢拉平,捋顺。在错落有序里,窥探到生命本质的踪迹。 愿除旧妄生新意,端与新年日日新








