- 博客(20)
- 收藏
- 关注
原创 学习verilator(号称最快的verilog simulator)
verilator: 号称最快的verilog simulator. 最快, 还开源, 还可以用C++写sim代码, 那么就可以使用各种C++的调试手段了.它的原理是把verilog翻译成C++, 可以看做是verilog设计出来的硬电路的等价的"纯软件模拟器".
2025-01-25 17:43:29
424
原创 自己动手写CPU - 5
自己动手写CPU系列, 从0开始写了一个最简化的CPU, 并且烧录到小SiPeed Tang Nano开发板(高云 小蜜蜂系列FPGA)上试运行了一下. 验证结果是正确的. 验证成功后还可以加入一些新的指令.
2025-01-11 15:46:02
2230
原创 自己动手写CPU - 4
上一节中有一个问题未解决: 没有条件跳转, 需要利用CMP的结果来控制跳转, 例如: 比较循环次数到了10了没? 小于10则继续循环. 这一节补上它.
2025-01-06 11:22:45
1613
原创 自己动手写CPU - 3
这样ALU基本都完成了. 将R7连接至一个8位地址/16位数据的ROM, 将里面存储的数据一行一行读出来, 就可以执行代码了.可见, RTL中增加了一个加法器实现加1, 增加了一个2选1, 由sel[7]选它是输出out1, 或者是R7+1.哦, 对了, 一开始准备用R7当PC指针使用的, 这样如果使用指令修改了R7的值, 即实现了跳转.如果当前指令不修改R7的值, R7也需要自加1的, 即顺序执行.这个要怎么实现. 只增加几行代码. 修改如下。自己动手写CPU - 2-优快云博客。
2025-01-04 21:02:39
406
原创 自己动手写CPU - 2
目标寄存器, 这里还没有体现, 因为目前代码全部是组合逻辑. 存入目标寄存器是根据op[10:8]将out1存入相应寄存器, 还需要有clk信号.3-8译码器代码很简单, 也放上来, 它做为alu的子模块.自己动手写CPU - 1-优快云博客。代码怎么实现呢. 也是很简单的, 如下。下面放上全代码, 和全RTL图.
2025-01-04 21:01:17
190
原创 自己动手写CPU - 1
电脑, 手机, 单片机, 都有一个核心部件: CPU.今天开始学verilog, 就尝试一下动手写一个可以工作的CPU.
2025-01-04 17:55:39
561
原创 华为机试:仿 LISP 运算 - Python实现之篇3
lambda关键字后面是pars参数表, body函数体, env刚才打包的变量捕获. 这里pars/body/env都不是一个简单的值, 可能是一组值.完成这些工作, 先code=‘(+ 2 3)’, 再run(code). 便 可以执行代码, 并输出结果了.最后面的__main__函数, 则是写了一个主循环, 不停在从命令行接收用户输入的lisp语句, 并执行.以上功能, 仅仅实现了一个计算器的功能. 离变成编程语言还差了: 函数定义和调用. 那么,有了命令行输入的处理, 这便更像一个解释器了.
2024-12-25 23:01:19
417
原创 华为机试:仿 LISP 运算 - Python实现之篇2
上一节实现了语法树的解析, 将表示式的字符串解析成Python里面list的形式.lisp_interpreter_pytest.py 内容如下。在上一节的基础上, 加入执行运算, 就可返回求值.lisp_interpreter.py 内容如下。运行如下, 测试PASS, 所以执行是正确的.
2024-12-24 22:45:02
207
原创 华为机试:仿 LISP 运算 - Python实现之篇1
今天也做一个Python版本的. 后面可能会逐步把它实现成一个Lisp解释器.华为机试:仿 LISP 运算_仿lisp运算华为机试-优快云博客。看到这一篇博文, 感觉这个题目挺有意思的.欢迎对Lisp感兴趣的同学一起讨论.测试运行PASS, 解析正确.同时也写了一个测试代码.
2024-12-24 22:17:49
357
原创 定制最小linux系统 - 4: 使用vscode单步调试
内核毕竟是一个很大的工程, 有时看得一头雾水, 如果能单步调试的话, 对于理解可能有亿点帮助.下面一步步搭建 qemu+vscode环境对内核进行单步调试.
2024-12-22 16:36:57
1445
原创 定制最小linux系统 - 3: 使用qemu启动系统
系统启动时会停留在: Please press Enter to activate this console. 按回车进入命令行.系统已经启动成功, 可以试试常用命令.2秒启动完, 按回车进入命令行。
2024-12-22 16:35:58
269
原创 定制最小linux系统 - 2: 编译busybox
Busybox是Linux界的瑞士军刀, 只有1-2M, 包含了大部分Linux常用命令., 位于: ~/code/busybox-1.36.1/rootfs.cpio。嵌入式Linux/Android一般都使用。到这里, 编译busybox并生成了最小。init文件写入以下内容。构建最小的运行环境.
2024-12-22 16:35:19
218
原创 定制最小linux系统 - 1: 编译 linux 内核
编译完成, 即可以看到生成了内核, 路径: arch/x86_64/boot/bzImage.下面完成定制一个可启动的最小的linux系统, 包括。原则: 最少的操作, 尽量使用默认配置., 然后用qemu启动它.后面的篇节会制作一个最小。
2024-12-22 16:34:41
295
原创 linux驱动 - 4: simple char device字符驱动2
在上一节的基础上, 加入处理函数.既然导出了文件节点, 用户程序就可以对这个文件节点进行open()/write()/read()/close()等操作, 用户操作时内核就会调用这里写的对应的函数.
2024-12-22 16:33:43
469
原创 linux驱动 - 3: simple char device字符驱动
上一节的驱动, 确实可以加载, 但其实没有什么功能.驱动的作用 一般是 "硬件程序" 之间的桥梁, linux中"一切皆文件"的思想, 所以驱动会暴露一个文件节点给用户态程序控制硬件, 或者与其交换数据.用户态程序通过标准文件接口open()/write()/read()/close()进行操作.
2024-12-22 16:32:31
186
原创 linux驱动 - 2: helloworld.ko
上一节, 搭建好了开发环境.那就小试牛刀, 编写一个最简单的ko, 从内核发出一句问候: hello-world.
2024-12-21 01:52:31
265
原创 linux驱动 - 1: 准备工作
只用一个虚拟机linux系统, 即是开发机, 也是测试机.只用一个工具vscode, 即是ssh命令行, 也是文件管理/编辑/编译/测试. 还是git客户端!只需要安装2个包: openssh-server, build-essential到这里, 可以进入下一步: 小试牛刀, 编译一个helloworld.ko, 见下一节.
2024-12-21 01:40:12
348
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人