SpinalHDL
SCALA语法介绍
SystemVerilog For Design
声明空间
在verilog中,reg 、wire、task、function等的定义都必须在module之内,这些声明都是局部的,因此只能在模块内部使用,无法跨模块使用。如果希望在多个模块中使用某个function,则需要在每一个模块内都重新定义。特别是使用user-defined type,需要在每一个模块内都重复进行typedef,非常的冗余,且容易出错。
为此system verilog拓展了声明空间。
package
package的定义
package是一个独立的声明空间,因此不能嵌入在module内部。
package是通过两个关键字进行定义的——package与endpackage。可综合的package可以包含如下的内容:
parameter和localparam定义的常数(在package中,两个是一样的,都不能在外部被修改)。
const定义的变量。
typedef定义的自定义类型。
automatic task和automatic function。
import导入其他package。
操作符重载。
package还可以包含全局变量声明、静态任务定义和静态函 ...
RL理论基础
强化学习基础
强化学习概述
强化学习(reinforcement learning,RL) 讨论的问题是智能体(agent)怎么在复杂、不确定的环境(environment)中最大化它能获得的奖励。如图 1.1 所示,强化学习由两部分组成:智能体和环境。在强化学习过程中,智能体与环境一直在交互。智能体在环境中获取某个状态后,它会利用该状态输出一个动作 (action),这个动作也称为决策(decision)。然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中获取奖励。
强化学习与监督学习
我们可以把强化学习与监督学习做一个对比。以图片分类为例,如图 1.2 所示,监督学习(supervised learning)假设我们有大量被标注的数据,比如汽车、飞机、椅子这些被标注的图片,这些图片都要满足独立同分布,即它们之间是没有关联关系的。假设我们训练一个分类器,比如神经网络。为了分辨输入的图片中是汽车还是飞机,在训练过程中,需要把正确的标签信息传递给神经网络。当神经网络做出错误的预测时,比如输入汽车的图片, ...
TLS握手流程
TLS握手过程
HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。
所以安全上存在以下三个风险:
窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS 在 HTTP 与 TCP 层之间加入了 TLS 协议,来解决上述的风险。
TLS 协议是如何解决 HTTP 的风险的呢?
信息加密:HTTP 交互信息是被加密的,第三方就无法被窃取。
校验机制:校验信息传输过程中是否有被第三方篡改过,如果被篡改过,则会有警告提示。
身份证书:证明淘宝是真的淘宝网。
上图简要概述来 TLS 的握手过程,其中每一个「框」都是一个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP 里的 segment。多个记录可以组合成一个 TCP 包发送,所以通常经过「四个消息」就可以完成 TLS 握手,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境里发送 HTTP 报文,实现 HTT ...
CRC校验详解
摘要
本文首先阐述了错误检测的目的以及纠错复杂度,然后以此引出了CRC背后的基础思想。为了能够充分理解CRC运算所基于的运算系统,本文还介绍了抽象代数中的相关概念(多项式环、素域、扩域)。然后描述了如何选取CRC的多项式。有了这些基本概念之后,本文介绍了三种CRC的实现,对于同一个CRC算法,其中SIMPLE于TABLE ALGORITHM所使用的寄存器初值是一样的,只是后者更高效一点,而DIRECT TABLE ALGORITHM则更高效,而且寄存器初值也与前两种不一样(通常CRC算法所说的初值就是指的这个算法的寄存器初值),因此需要进行初值转换。在此之后还介绍了一些决定CRC算法的其他参数,并且以此定义一个名为Rocksoft™的参数化模型,用以精确描述CRC算法。最后本文还包含了CRC算法的C实现。
本文很大程度上参考了A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS,在其中加入了一些自己的理解。因此非常感谢Ross N. Williams.大佬
错误检测的目的
发射机产生的数据,在经过带有噪声的信道之后,会被噪声所污染,从而导 ...
WaveDrom教程
WaveDrom 可以根据特定指令生成时序 / 波形图(SVG/PNG),并且也可以在浏览器中运行。同时也提供了在线编辑器和教程、教程 2。
信号(signal)
名称(name)和波形(wave)
绘制信号时,需要向 WaveDrom 传递键为 signal,值为 WaveLanes 的数组,WaveLane 一般至少需要包含两个属性:名称(name)和波形(wave),例如(在官方在线编辑器中打开):
1{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
{ "signal" : [{ "name": "clk", "wave": "P..........." }] }
波形的名称将显示在波形左侧,波形由一个字符串指定,每个字符都代表了一个周期的波形,每个字符代表的意义如下:
符号
含义
样例
渲染结果
.
与上一周期状态相同
{ signal ...
计算机数值表示
计算机数值表示
符号定义
Symbol
Type
Meaning
Defineition
\(B2T_w\)
函数
Binary to two's complement
\(\vec{x} = [x_{w-1},x_{w-2},\cdots,x_0];\;B2T_w(\vec{x})=-x_{w-1}2^{w-1}+\sum\limits_{i=0}^{w-2}x_i2^i\)
\(B2U_w\)
函数
Binary to unsigned
\(\vec{x} = [x_{w-1},x_{w-2},\cdots,x_0];\;B2U_w(\vec{x})=\sum\limits_{i=0}^{w-1}x_i2^i\)
\(U2B_w\)
函数
Unsigned to binary
\(B2U_w\)的反函数
\(U2T_w\)
函数
Unsigned to two's complement
\[0\leq u\leq UMax_w;U2T_w(u)=B2T_w(U2B_w(u))=\begin{cases}u, u\leq TMax_w \\ u- ...
The Art of Command Line
命令行的艺术
前言
基础
日常使用
文件及数据处理
系统调试
单行脚本
冷门但有用
仅限 OS X 系统
仅限 Windows 系统
更多资源
免责声明
熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练掌握这里列出的所有技巧时,你就学会了很多关于命令行的东西了。
这篇文章是许多作者和译者共同的成果。这里的部分内容首次出现于 Quora,但已经迁移到了 GitHub,并由众多高手做出了许多改进。如果你在本文中发现了错误或者存在可以改善的地方,请贡献你的一份力量。
前言
涵盖范围:
这篇文章不仅能帮助刚接触命令行的新手,而且对具有经验的人也大有裨益。本文致力于做到覆盖面广(涉及所有重要的内容),具体(给出具体的最常用的例子),以及简洁(避免冗余的内容,或是可以在其他地方轻松查到的细枝末节)。在特定应用场景下,本文的内容属于基本功或者能帮助您节约大量的时间。
本文主要为 Linu ...
c plus plus summary
C++基础入门
C++初识
第一个C++程序
编写一个C++程序总共分为4个步骤
创建项目
创建文件
编写代码
运行程序
创建项目
Visual Studio是我们用来编写C++程序的主要工具,我们先将它打开
创建文件
右键源文件,选择添加->新建项
给C++文件起个名称,然后点击添加即可。
编写代码
1234567891011#include<iostream>using namespace std;int main() { cout << "Hello world" << endl; system("pause"); return 0;}
运行程序
注释
作用:在代码中加一些说明和解释,方便自己或其他程序员程序员阅读代码
两种格式
单行注释:// 描述信息
通常放在一行代码的上方,或者一条语句的末尾,==对该行代码说明==
多行注释: /* 描述信息 */
通常放在一段代码的上方,==对该段代码做整体说明==
提示:编译器在编译代码时,会忽略注释的内 ...
PyTorch Abstract
简单的PyTorch教程,来自官网教程60分钟PyTorch教程、通过例子学PyTorch和迁移学习教程。
目录
60分钟PyTorch教程
什么是PyTorch?
Tensor
Operation
Tensor的变换
Tensor与Numpy的互相转换
CUDA Tensor
Autograd: 自动求导
从自动求导看Tensor
梯度
PyTorch神经网络简介
定义网络
测试网络
损失函数
计算梯度
更新参数
训练一个分类器
如何进行数据处理
训练的步骤
数据处理
定义卷积网络
在测试数据集上进行测试
GPU上训练
通过例子学PyTorch
使用Numpy实现三层神经网络
使用Tensor来实现三层神经网络
实现autograd来实现三层神经网络
使用自定义的ReLU函数
和Tensorflow的对比
使用nn模块来实现三层神经网络
使用optim包
自定义nn模块
流程控制和参数共享
迁移学习示例
加载数据
可视化图片
训练模型
可视化预测结果的函数
fine-tuning所有参数
fine-tuning最后一层参数
60分钟PyTorch教程
...