记录下一生一芯的学习过程
理解mainargs在nemu中,mainargs是通过am/src/platform/nemu/trm.c中的_trm_init()函数传递给main()函数的(在这里调用了main()函数)。在trm.c中定义了mainargs数组,并且在scripts/platform/nemu.mk中通过CFLAGS += -DMAINARGS="$(mainargs)"宏定义了mainargs是什么。在npc中,mainargs是通过在am/src/native/platform.c中的init_platform()传递给main函数的(在这里调用了main()函数)。这里通过getenv(“mainargs”)这个函数获取到了mainargs。
实现printf为了复用之前实现sprintf的代码,把大部分sprintf的功能实现放到了vsprintf中,在sprintf中建立好va_list传入就重新实现了sprintf,printf ...
在金华和金华的电信vps上,安装哪吒探针会提示
Download nezha-agent release failed, check your network connectivity
这是由于哪吒探针的安装脚本在检测到国内网络后,会从gitee上下载应用程序
if [ -z "$CN" ]; then NZ_AGENT_URL="https://${GITHUB_URL}/nezhahq/agent/releases/latest/download/nezha-agent_${os}_${os_arch}.zip"else _version=$(curl -m 10 -sL "https://gitee.com/api/v5/repos/naibahq/agent/releases/latest" | awk -F '"' '{for(i=1;i<=NF;i++){if($i==" ...
网页无法使用127.0.0.1/localhost连接数据库将ip更改为容器名
主要的验证方法包括: 动态仿真(dynamic simulation); 静态检查(formal check); 虚拟模型(virtual prototype); 硬件加速(hardware acceleration); 电源功耗(power consumption); 性能评估(performance evaluation)。
动态仿真通过测试序列和激励生成器给入待验设计适当的激励,随着仿真进程的推进,判断输出是否符合预期。简而言之,我们需要仿真器来配合这一项工作,验证人员也需要查看比较结果和仿真波形,最终判定测试用例是否通过。按激励生成方式和检查方式,可以将动态仿真进一步划分为: 定向测试(directed test); 随机测试(random test); 参考模型检查(reference model check); 断言检查(assertion check)。
定向测试(directed test)定向测试指的是激励内容在仿真之前已经决定下来,测试用例给出的激励序列不会在下一次提交任务时改变。定向测试最终的数据比较分为两种情况: 通过内置的 C 代码进行数 ...
汉明码纠错对于64bit的数据,需要额外的8bit来存储纠错码
Side-band ECC对每个sram额外添加一个8bit位宽的sram来存储纠错码。
Inline ECC将纠错码跟数据存储到同一sram,跟在数据包的末尾。最大需要额外的16拍数据来存储纠错码。
LDPC码纠错LDPC码(一种前向纠错码):基础 & 译码算法LDPC译码算法的简单实现:从C++到Verilog
笔记本是AMD核显与NVIDIA独显AMD不需要单独安装驱动,NVIDIA安装了闭源驱动切换核显
prime-select intel
切换回混合显示
prime-select on-demand
3.1历史观点3.2程序编码假设一个C程序,有两个文件p1.c和p2.c。用命令行编译这些代码:
linux> gcc -Og -o p p1.c p2.c
命令gcc指的就是GCC C编译器。因为这是Linux上默认的编译器,我们也可以简单地用cc来启动它。编译选项-Og告诉编译器使用会生成符合C代码整体结构的机器代码优化等级。使用较高级别优化产生的代码会严重变形,以至于产生的机器代码和初始源代码之间的关系非常难以理解。命令gcc即GCC C编译器,-Og告诉编译器使用生成符合原始c代码整体结构的机器代码的优化等级。最终产生可执行代码文件p(由-o p指定)
3.2.1 机器级代码计算机系统的两种重要抽象:
指令集架构(ISA):定义了处理器状态、指令的格式,以及每条指令对状态的影响。大多数ISA,包括x86-64,将程序的行为描述成好像每条指令都是按顺序执行的,一条指令结束后,下一条再开始。
虚拟地址:提供的内存模型看上去是一个非常大的字节数组。
x86-64的机器代码和原始的C代码差别非常大。一些通常对C语言程序员隐藏的处理器状态都是可见的:
程序计数器(通常称为“P ...
信息存储大部分计算机使用8位的块(或者字节)来作为最小的可寻址的存储器单元。机器级程序将存储器视为一个非常大的字节数组,称之为虚拟存储器。存储器中的每一个字节由唯一的一个地址(address)来标识,所有可能地址的集合称之为虚拟地址空间(virtual address space)
字数据大小每台计算机都有一个字长 (word size), 指明指针数据的标称大小 (nominal size) 因为虚拟地址是以这样的一个字来编码的,所以字长决定的最重要的系统参数就是虚拟地址空间的最大大小。也就是说,对于一个字长为w位的机器而言,虚拟地址的范围为 O~2^w-1,程序最多访问2^w个字节。
寻址和字节顺序跨越多字节的程序对象,我们必须建立两个规则:这个对象的地址是什么,以及在内存中如何排列这些字节。在几乎所有的机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。例如,假设 个类型为 int 的变量 的地址OxlOO, 也就是说,地址表达式 &x 的值为 OxlOO 。那么,(假设数据类型 让为 32 位表示) 节将被存储在内存的 Ox1OO Ox1O1 ...
信息就是位+上下文整个计算机系统中的所有信息都可以用一串比特串的形式表示,区分不同的数据对象的唯一方法就是我们读到的这些对象时的上下文,比如,在不同的上下文中,一个同样的字节序列可能表示一个整数 浮点数、字符串或者机器指令。
程序被其他程序翻译成不同的格式
预处理阶段,处理源码的中的预处理语句(比如说#include)
编译阶段,将c语言编译成汇编语言
汇编阶段,把汇编语言翻译成机器指令
链接阶段,将多个目标文件合并成一个可执行文件
处理器读并解释存储在存储器中的指令系统的硬件组成总线,负责携带信息字节并在各个部件之间进行传输I/O设备,负责系统和外界的联系主存,运行程序时存放程序以及程序中含有的数据中央处理单元 (CPU), 简称处理器,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个大小为一个字的存储设备(或寄存器),称为程序计数器 (PC) 。在任何时刻, PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。
运行hello程序shell程序执行其指令,等待我们输入命令我们输入完命令以后,shell执行一系列指令,将hello程序的代码以及其数据加 ...
verilog实现简单的ecc检验与纠错以4bit数据为例
编码数据原理看上一篇总结![2024-02-03T07:34:30.png][1]PP的值是前面全部数据的奇偶校验值最终数据以{PP,P2,P1,P0,D3,D2,D1,D0}的顺序传输。
解码数据获取到数据后,重新计算出检验码,得到新的检验码,并与旧的检验码进行异或,异或得到的4bit数据称命名为syndrome。
当syndrome最高位为0时 若syndrome其余位为0,则没有错误。 若非0,则存在两个错误。
当syndrome最高位为1时 数据存在1个错误,错误的位置在Hsyndrome[2:0]。
//检验数据并纠错,输出正确的数据module decoder( input [7:0]data_in, output reg [3:0]data_out); //根据接收的数据重新计算检验值 //选择奇偶检验的数据位 wire [3:0] check_bit2_sel=4'b1011; wire [3:0] check_bit3_sel=4'b1101; ...