自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学渣的博客

成长之路。github地址:https://github.com/wangbohy123/

  • 博客(114)
  • 资源 (14)
  • 收藏
  • 关注

原创 一文带你深入理解电路中的亚稳态现象与跨时钟域信号处理

前言亚稳态是一种现象,可以导致数字设备(包括FPGA)出现系统故障。当一个信号在不相关或异步时钟域的电路之间传输时,亚稳态现象较容易出现。本文描述了亚稳性,解释了为什么会出现这种现象,并讨论了它是如何导致设计失败的。由亚稳态引起的平均无故障时间(MTBF)的计算表明设计者是否应该减少此类失败机会的步骤。亚稳态数字设备(如FPGA)中的所有寄存器都定义了信号时序要求,允许每个寄存器在其输入端正确捕获数据并产生输出信号。为确保可靠运行,寄存器的输入必须在时钟边沿之前的最短时间(寄存器的建立时间tSUt_{

2021-06-26 21:19:40 1657 1

原创 同步FIFO和异步FIFO的实现

同步FIFO的实现首先是同步的实现,只需要一个时钟用来控制读写。同步 FIFO 实现较为直接,如下图所示,一个 FIFO 内部实现了 RAM 和一个控制读写的控制端,和普通的随机存储器不一样的是,FIFO 内部需要自动产生读写地址。控制端产生空、满信号。因此如何实现控制端去产生空满信号是主要需要考虑的地方。通常空满的判断是通过读、写地址进行的。第一种思路,利用读写地址的大小来判断空、满方法很简单,设置一个信号量 factor 来表识空满,每次读一个数据则令 factor - 1,写一个数据则令其

2021-06-10 17:32:55 1250

原创 使用 Verilog 实现排序

使用Verilog编写电路,实现排序操作。

2021-06-06 17:01:22 9440 1

原创 c++和Java数组内存空间申请

c++中由于数组导致的内存溢出处理之前实现图论算法的时候碰到过超大的整型数组,用c++去实现着实会碰到一些莫名其妙的内存溢出问题。例如:我们想定义一个 2000*2000 的 2d 数组,甚至是这样大小的 2d 的 vector,如果是直接定义成局部变量,那么将会直接报内存溢出错(大家可以计算一下这样大小的数组会占据多少内存空间)。那么为什么定义成局部变量会导致内存溢出呢?笔者认为是因为程序中函数的调用或者说是运行其实是在栈中执行的,而栈的空间是很有限的,所以说定义过大的局部变量必然导致栈溢出(Sta

2020-11-19 00:05:12 1468 1

原创 zynq sdk 开发之通过 BRAM 进行 PL 与 PS 的数据交互

如何在 zynq 中进行 PL 端与 PS 端的数据交互?在zynq的使用中,高效的进行 BRAM 与 zynq 硬核的数据交换至关重要,当我们需要进行小批量的数据交换时,可以考虑采用 BRAM 作为数据交换的媒介,在 PS 端,将数据通过 AXI 总线写入 PL端的 BRAM 里面去,并且再读出来。整体的设计图如下所示:PL 端硬件的设计在 vivado 2017.4 下,可以通过 block design 快速进行模块的添加与设计。设计出来的架构如图所示:注意事项:BRAM 使用真实双端

2020-10-06 15:54:19 5274 37

原创 FPGA 可编程性与布局布线原理探究

学习 FPGA 也有了一段时间,在不断 coding 的过程中,对综合、布局布线等操作感到一丝丝的困惑,特将一些个人感悟总结如下:为什么说 FPGA 是可编程的?以基于 SRAM 的 FPGA 举例,由于 FPGA 是极其细粒度的架构,无论是怎样的电路,综合到片上之后都将以 LUT 、触发器和 MUX 的结构组成,而一个 k 输入的 LUT 又是由 2k2^k2k 个 SRAM bit 位作为选择输出,从而一个 k 输入的查找表可以配置实现任意 k 输入1输出的组合逻辑,如下图所示。之所以说 FPGA

2020-10-04 22:34:18 5569

原创 《计算机体系结构:量化研究方法》读书笔记

Lecture 1: Quantitative Approach1.计算机体系结构与计算机组成原理有什么区别?计算机的实现包括两个方面:组成和硬件。组成一词包含了计算机设计的高阶内容,例如存储器系统,存储器互连,设计内部处理器 CPU (中央处理器——算术、逻辑、分支和数据传送功能都在内部实现)。有时也用微体系结构一词来代替“组成”。例如AMD Operon和Intel Core I7是两个指令集体系结构相同但组成不同的处理器。这两种处理器都实现X86指令集,但它们的流水线和缓存组成有很大的不同。硬件指

2020-10-04 21:50:16 4067

原创 verilog实现简单的三级加法流水线

pipeline流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗,进可攻退可守。今天这篇文章将小小总结一下流水线设计的一些关键点。

2020-07-08 20:24:02 7396 4

原创 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)

菜鸟一枚,最近也学习了关于 AXI 总线的相关知识。基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写)。设计目的设计出以下一个通过 AXI 总线连接的简单片上系统。包含以下部分:PL 端逻辑PL 端实现四个模块包括:寄存器堆寄存器堆主要是对指令等控制信息进行片上存储。具体的指令将由 PS 端写入。对于寄存器堆来说,其相当于 slave,而 PS 端的 jupyter 服务器相当于 master。使用的总线是 AXI Lite 总线(棕色的大箭头)。控制端控

2020-05-12 21:34:23 3968 3

原创 如何实现一个带双边沿检测的触发器

这是一道 HDLBits 上面的题目(Probelm 97 Dual-edge triggered flip-flop)。目的是实现一个带双边沿检测的触发器。我们知道,FPGA上是没有带双边沿检测的触发器的,即不存在这样的写法:always @(posedge clk or negedge clk)哪怕写了,没有这样的资源也实现不了,无法综合。那么我们怎么通过硬件电路设计去实现下面的时序...

2020-04-27 22:51:11 3003

原创 hdlbits 练习汇总

最近发现一个很有意思的网站,可以在线提交 verilog 代码以完成一些任务,并且还能得到仿真结果对比。可以利用零碎时间提交一些代码,练习verilog基础知识。网址如下:https://hdlbits.01xz.net/wiki/从 basics 开始对提交的答案进行汇总。(本博客会不断更新)//03_Wire.vmodule top_module( input in, output...

2020-04-22 11:25:31 8286 1

原创 单时钟同步 FIFO 和二时钟异步 FIFO 的基本原理和实现

学习目的:1.给大家介绍FIFO的基本原理和组成。2.学习同步单时钟FIFO、二时钟异步FIFO的分析以及编写。3.以实例体验如何将实际需求分析转换成代码。FIFO(First In First Out)队列通常在数字系统中实现两个模块间数据的暂存,达到减少两模块之间的速度依赖,使得两个模块能够相互相对独立的运行。FIFO是FPGA设计的一个非常基本的单元。FIFO一般用一个双口RAM和分别指示...

2020-04-20 11:05:46 2202

原创 基于FPGA的卷积加速

基于FPGA的卷积并行加速其实有很多方法,例如脉动阵列、加法树等操作。本篇博客将介绍一下基于加法树的并行化设计。其实总体原理也是很简单的。如下图所示,九个叶子节点是乘法器节点,分别代表九次乘法运算(卷积核是3*3的)。在得到乘法运算结果之后,将结果传送给加法节点。为了进一步增加并行性,加法树结构采用三叉树。即,对每三个子节点进行求和。最终得到一个部分和。实现方式是写一个加法器模块,再写一个...

2020-04-18 23:32:46 4806 8

原创 CUDA 并行加速基础之 Reduce 和 Scan 的实现

前言我们知道硬件拥有其独特的并行性,为了发挥这一特色。我们要将平时串行执行的程序用并行性算法重新改写才能充分发挥 GPU 的优势。实例:做求和:1+2+3+4+···为了做这样一个累加和的加速,有两种简单的实现方法,分别是 Redece 进行归约(二分),或者是用 Scan 通过控制步长进行扫描求和。Reduce如上图所示为了并行执行累加,我们要构造出一些线程,每个线程并行工作,从...

2020-04-14 21:28:19 2496

原创 CUDA之三种访存模式与代码测试

GPU 硬件架构具有三层的存储结构,分别是:**线程私有存储、线程块共享存储、全局存储**。访问速度自然是由快到慢。CUDA 程序编写的一个重要理念也是尽可能少的访问全局缓存。本博客将编写代码分别对三种访存模式进行相应的简单测试。

2020-04-14 17:26:38 844

原创 CUDA 编程之对原子操作与并行性的理解

相关概念CUDA 的原子操作可以理解为对一个变量进行“读取-修改-写入”这三个操作的一个最小单位的执行过程,这个执行过程不能够再分解为更小的部分,在它执行过程中,不允许其他并行线程对该变量进行读取和写入的操作。基于这个机制,原子操作实现了对在多个线程间共享的变量的互斥保护,确保任何一次对变量的操作的结果的正确性。原子操作确保了在多个并行线程间共享的内存的读写保护,每次只能有一个线程对该变量进行...

2020-04-14 16:44:24 1126

原创 第一行 CUDA 代码之GPU架构理解与代码编写

CUDA 编程之软硬件结构的相关概念首先是对 CUDA 编程中可能会遇到的各种概念进行简单总结。如对 Kernel、Grid、Device、Host、Thread、Thread Block、SM 等部件进行梳理并且阐明相互之间的关系,并且牵涉到CUDA编程的基本理念与基本方法。最后写下CUDA的并行计算的简单入门代码。

2020-04-14 16:25:34 948

原创 字符串高级操作——利用链表进行文本单词频率统计

现有一片英语短文,要求用c语言实现对该文章的词频统计,即利用文件读写方法,提取文本中的每一个单词之后通过算法统计其出现频率,并输出到另外的文件中。短文如下:Of all the changes that have taken place in English-language newspapers during the past quarter-century, perhaps the mo...

2020-04-13 13:32:54 697

原创 I2C 总线操纵 EEPROM

现如今对 FPGA 的基础已经有了一定的了解,并且进入到了总线操纵的学习中来。近一段时间打算更几篇关于总线操作的博文,首先从简单的 I2C 接口对 EEPROM 的操作开始。何为总线?总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。总线...

2020-03-17 15:27:27 1291

原创 如何去设计一个深度学习加速器?

How to make your own deep learning accelerator chip!Currently, there are more than 100 companies all over the world building ASICs (Application Specific Integrated Circuit) or SOC’s (System on Chip) ...

2020-03-01 15:02:22 3291

原创 用 django 构建翻译网站——软件工程课程设计

构架一个名为Bonnie的翻译网站,要求网站具备翻译网站的基本功能,即前台用户注册登录功能,智能翻译功能和后台的用户管理,系统管理。同时本网站具备用户与翻译者直接沟通无中介干涉的特点。

2020-02-04 18:07:55 1883 3

原创 图的embedding问题

图的embedding问题[摘要]:随着word2vec模型的提出,embedding问题开始逐渐引起大家的注意。在如今大数据背景的驱动下,商品、行为、用户等实体之间的关系越来越复杂化、网络化,而word2vec是sequence embedding的,故其表示能力较弱,已不适合表示当下的复杂数据,因此人们又提出了graph embedding,即通过某种方法,将大型的图进行embedding,...

2020-01-04 19:00:12 3122

原创 linux下python3调用c++的方法并传递参数

近日需要用python写一个接口来调用c++项目。在网上找了一些方法感觉较为紊乱,其实python调用c本身就是较为简单的,因为python就是用c写的呀!主要方法就是在python中调用ctypes包,使用相关api调用项目编译生成的.so文件(类似于动态链接库)。唯一需要注意的就是在c++文件里需要将调用的函数用extern "C"{ void c_change(int ii, ...

2019-12-09 19:09:36 1517

原创 isl使用方法

1.isl_ctx对象的创建:All manipulations of integer sets and relations occur within the context of an isl_ctx. A given isl_ctx can only be used within a single thread. All arguments of a function are require...

2019-10-04 10:43:51 4621 2

原创 循环优化与多面体模型

循环通常是数据并行应用的最密集计算段,因此循环优化直接影响性能。当面对嵌套循环时,分配给线程的计算粒度将直接影响性能。循环转换如Fission(循环裂变)与Fusion(循环融合)的嵌套式循环可促使并行化,并提高工作效率。本文就几种循环优化的方法与多面体模型的调度进行简要阐述(因为LZ已经被这些循环优化搞得痛不欲生了)。Loop fusion顾名思义,该变换令循环进行了融合。如图所示,原始...

2019-09-22 22:01:26 3523 1

原创 TVM(端到端的优化栈)概述

陈天奇团队宣布推出 TVM,在微博上表示,「我们今天发布了 TVM,和 NNVM 一起组成深度学习到各种硬件的完整优化工具链,支持手机,cuda, opencl, metal, javascript 以及其它各种后端。欢迎对于深度学习,编译原理,高性能计算,硬件加速有兴趣的同学一起加入 dmlc 推动领导开源项目社区 。」大多数现有系统针对窄范围的服务器级 GPU 进行优化,且需要在包括手机、I...

2019-07-30 23:32:11 5720

原创 用tensorflow实现带批标准化(BN)的MNIST数据集识别训练程序

引入这也是笔者第一次接触面向对象版的神经网络程序——其实也不难发现,我们每一次定义的层级结构中有很多重复的定义或操作,一旦引入面向对象编程方法将大大提高程序的可复用性。并且我们本次要做的是带有BN结构的CNN程序。我们可以把BN操作看成一个放在激活函数操作之后的一个功能单元或层级结构,这样我们可以避免每次都定义一些重复的变量。BN的操作大体如下:对于每一个输入实例xkx_kxk​,我们...

2019-07-23 13:23:01 958

原创 关于Batch Normalization(批标准化)的理解与代码实现

今天看了《深度学习》中关于批标准化的小节,一开始感觉有些困惑,后来搜集了资料后也有了自己的理解,总结如下。概念问题我认为要理解批标准化首先要理解标准化概念。那么,什么是标准化?通过中心化或标准化处理,得到均值为0,标准差为1的服从标准正态分布的数据。事实证明,一个神经网络接收一张白化(令像素点标准化)过后的图片作为输入数据,那么其收敛速度较快。那么将此实例延申,放入神经网络所有结构...

2019-07-23 00:26:06 2711 1

原创 深度学习中学习率的更新策略(MNIST实践)

引入随机梯度下降(SGD)算法是现如今使用较为广泛的优化算法(此处的SGD指的是小批量梯度下降)。具体执行方法是不断迭代直到满足停止准则,在每次的迭代中取小批量训练集,计算损失函数对于权重参数的梯度,并以一定学习率执行权重更新。《深度学习》一书中指出学习率(ε\varepsilonε)是SGD算法中的关键参数。并且在我之前所编写的深度学习程序中,学习率一直是一个固定的变量,但通过阅读才发现自己...

2019-07-20 23:09:57 3094

原创 numpy与tensorflow中的随机函数总结

笔者感觉numpy、tensorflow中的随机函数有些杂,用的时候总是不知道用哪一个,所以在本篇博客中对其进行一个简单的总结。numpy的随机函数我们可以利用numpy随机(random)模块生成我们想要的随机序列或进行一系列随机操作。常用api如下:np.random.randint(a, b)该函数用于生成一个指定范围 [a,b] 的整数。np.random.randn(d0,d...

2019-07-19 21:45:52 2581

原创 Tensor Comprehensions(TC)语言语法简述

背景Tensor Comprehensions 是一种可以构建 just in time(JIT)系统的语言,程序员可通过该语言用高级编程语言去高效的实现 GPU 等底层代码。该项目由face book开源发布。我的理解是我们通过该语言可以更加有效的理解张量、运算图等。虽然tensorflow已经有了tensorboard这样的可视化工具,但是在运算图的理解方面还是有些困难。语法示例下面给...

2019-07-17 15:45:41 1292

原创 CNN(卷积神经网络)实现手写数字识别并与django集成

任务设计一个卷积神经网络来实现对MNIST手写数字集的识别任务。为了增加模型复杂度并进一步练习tensorflow的使用方法,所以模型设计的稍微复杂一些。网路结构总共包括五个层级,包括四个隐藏单元、一个输出单元。 层级结构如下图所示包、数据集载入import tensorflow as tfimport numpy as npfrom tensorflow.examples.tuto...

2019-07-16 16:13:01 6203 2

原创 深度学习之手写数字识别——用bp神经网络实现

任务设计一个bp神经网络是实现对MNIST手写数字集的识别任务。网路结构包含一个输入层、一个隐层和一个输出层。 其实总共只有两个层级结构。包、数据集载入我们使用tensorflow来简化我们的操作。import tensorflow as tfimport numpy as npfrom tensorflow.examples.tutorials.mnist import input...

2019-07-16 00:17:21 8566

原创 机器学习算法之主成分分析——代码实现与相关理论分析

引入主成分分析(PCA)是一种常见的数据分析方法,通过该方法我们可以对数据进行降维操作,并且保留方差较大(信息量大)的维度。为了引入相关概念,我们先看一组数据:import pandas as pdimport numpy as npimport matplotlib.pyplot as plt%matplotlib inline# 总共十个样本 每个样本有两个特征值data = ...

2019-07-13 15:17:00 644

原创 一文讲懂普通线性回归与贝叶斯线性回归的区别

将均方误差应用到线性回归问题中首先我们先回顾频率派的解决方法,即常规解法——利用最小二乘法解决问题。损失函数采用均方误差函数。关于模型容量问题:在《深度学习》中专门指出,模型的容量也是一个需要用户指定的超参数,即拟合的多项式次数。此处为了简化操作,暂定为一次多项式。解决代码如下:import numpy as npx = np.random.randn(10) + 5# 初始参数k...

2019-07-12 01:22:19 2931

原创 tensorflow2.0GPU版本的环境配置与安装教程

现在tensorflow2.0也已经问世了,自然忍不住会想要安装一下,将安装过程记录如下:一、创建虚拟环境虚拟环境自然是在Anaconda下创建。因为tf2.0对应的是python3.7版本,所以我们在Anaconda Prompt或cmd下输入命令:conda create -n your_env_name python=3.7二、CUDA的安装:切记tensorflow2.0对应的...

2019-04-18 16:20:10 58081 32

原创 12行实现一个简易神经网络

准备工作现实现一个具有三层的最简单的神经网络,激活函数采用sigmod函数。整体结构如下所示:x是输入的样本值。设定为5*3的矩阵,即代表5个样本值,每个样本有3个特征值。y是标签,为5*1的矩阵代表每一个样本的标签。且取值范围为0或1。即完成一个简单的分类问题。w0、w1为中间的权重参数。L0、L1、L2表示每一层的计算结果。L2即是最终与标签比对的结果首先是数据的初始化:x...

2019-03-27 17:28:00 814 1

原创 线性回归的讨论

线性回归的概念给定一个数据集D={(x1,y1),(x2,y2),(x3,y3)…},所谓线性回归就是模拟出一个线性模型f(X)=k∗X+bf(X) = k * X + bf(X)=k∗X+b,使得对所有的x∈\in∈D得到 f(X) ≈\approx≈ y ∈\in∈ D,即尽可能准确的预测真实的y值。问题主要集中在我们该如何得到k、b的值呢?关键在于如何度量f(X)与真实的y之间的...

2019-01-03 15:45:39 358

原创 利用opencv实现随机线条的绘制

刚发现一个比较好玩的方法,利用opencv创建一幅图片,之后在上面一直不停的绘制线条(实现一万次),线条的起始点、终止点、颜色都是随即设定。就结果图片而言,有些凌乱,不过实现过程看起来很有意思!代码如下:#include <opencv2\opencv.hpp>#include <iostream>// 绘制图形using namespace cv;using...

2019-01-02 17:08:24 1456

原创 初探opencv——提高图片对比度与亮度(像素操作)

亮度与对比度的操作我们用较原始的方法实现对亮度与对比度的调节,运算实质如下:提升对比度主要调节 α\alphaα ,即使得每一个像素点之间数值的差距更大,对比度就提高了(对比更强烈了)。提升亮度主要调节β\betaβ,令每一个像素点值大一些。代码如下:#include <opencv2\opencv.hpp>#include <iostream>using...

2019-01-02 15:28:09 4086

ZYNQ-AX7020原理图、PCB图和引脚

包含ZYNQ7000系列中的AX7010、AX7020芯片原理图结构图等硬件资料:AX7020开发板原理图V2.0、AX7020开发板PCB设计图、AX7020尺寸结构、AX7010_AX7020管脚。

2020-03-23

基于ZYNQ的FPGA基础入门.pdf

课程共计10课时,主要讲解开机测试,JTAG下载程序,FPGA基础语法基础,VIVADO软件快速入门、VGA或者HMDI接口的测试。开发人员拿到板子后第一件事情应该是对板子做一个开机测试。对于有FPGA基础,第一使用ZYNQ ,第一次使用VIVADO软件的读者,可以把软件使用相关课程看下;对于没有FPGA基础的,需要把FPGA基础的知识好好学习下。对于熟悉ZYNQ软件的,也会FPGA开发的,可以跳过本章基础部分,直接进入后面章节学习。

2020-03-22

BP神经网络的Python实现

该代码是用python实现的手写BP神经网络,实现了反向传播的推导,是非常好的学习资料,有助于理解神经网络的内部结构。内部有权重测试图片等。

2020-03-22

I2C总线操纵EEPROM

i2ceeprom_test模块完成 EEPROM的读写, EEPROM设备地址是A0,程序中将地址00的数据读出,然后通过LED显示,在按键按下时,数字加一并再次写入 EEPROM并显示出来。在 12C控制器中,代码的大部分功能在备注中也有很多批注。使用方法:打开Vivado,新建工程,导入文件即可。

2020-03-17

CCleaner_Pro_v5.56.rar

CCleaner_Pro_v5.56.ccleaner专业版,下载即用,十分方便,无需激活。

2019-05-09

tensorflow-1.8.0-gpu版本

谷歌出品深度学习的框架,是gpu版本的省去下载速度太慢的烦恼!下载后直接pip安装即可。

2019-04-09

飞机大战资源包

飞机大战资源包,python版,可供下载使用,欢迎下载。

2019-02-18

ssd检测工具

来自外国的一款绿色ssd检测工具,无病毒无捆绑,方便快捷。

2019-01-13

鲁大师绿色版

鲁大师仅含硬件检测的版本,解压直接使用,绿色版本,方便快捷。

2019-01-13

wsgi服务器

wigi服务器安装版本,可以在windows下直接安装使用,使用方法见里面的文档。

2019-01-13

Pillow安装包

Pillow安装包,用pip安装之后可直接使用,方便快捷。绘图包。

2019-01-13

Genymotion-ARM-Translation_v2.0

Genymotion-ARM-Translation_v2.0,直接拖入虚拟机,并且记得把里面的txt'文章删掉。

2019-01-13

Django1.11.11安装包

django的web开发框架的安装包,用pip即可安装,使用方便。

2019-01-13

VIM相应操作

Linux的vim的操作手册,中文版,可供学习使用,不可多得的好教程。

2018-01-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除