项目笔记
文章平均质量分 72
对做的或者学习的一些实际项目做下记录
耐心的小黑
七月份就上班了,比较忙!
展开
-
毕设学习笔记之DCT/QNT
一、原理、标准相关。原创 2022-11-06 17:26:07 · 955 阅读 · 0 评论 -
毕设学习笔记之CABAC
不止如此,上下文存储器更新模块也是,读写存储器的逻辑是并行的,但是一旦各bin之间有关系,需要使用电路中的mux,就也是增加了上下文模型更新的级联逻辑,会降低系统时钟频率。严谨点就是,这两种编码模式可以使用LU和MU,但是rLPS更新级需要改变,那个查表肯定不能是pstate和range所有相乘结果的表,而应该根据具体的编码模式,将表中所有的数据修改成2或者0。①这只是不同作者自己设计的级联结构,目前作者的设计情况是相邻的两三个U是完全并行的,但是相连的三组U,是级联的,所以严格来说并不是完全的并行结构。原创 2022-10-12 16:02:40 · 1507 阅读 · 4 评论 -
基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)
一、前言关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL)关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制二、实验内容本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供:ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真原创 2021-10-27 12:11:09 · 2438 阅读 · 4 评论 -
SPI协议详解
一、SPI简介SPI(Serial Peripheral interface)是由摩托罗拉公司定义的一种串行外围设备接口,是一种高速、全双工、同步的通信总线,只需要四根信号线即可,节约引脚,同时有利于PCB的布局。正是出于这种简单易用的特性,现在越来越多的芯片集成了SPI通信协议,如FLASH、AD转换器等。SPI的通信原理比较简单,它以主从方式工作,通常有一个主设备和一个或多个从设备。二、SPI接口SPI通信需要四根线,分别为SPI_CS、SPI_CLK、SPI_MOSI和SPI_MISO。其中SP原创 2021-01-26 10:07:11 · 4745 阅读 · 0 评论 -
SPI协议的数据读写实现(spi_slave)
一、SPI协议介绍SPI协议详解二、程序设计该模块接收8路16bit的数据信号ave1---ave8,以及标志数据有效的信号ave_valid;该模块作为SPI的slave端,可以通过spi_miso将ave数据发送出去;也可以通过spi_mosi接收master端发送来的数据,并将数据再通过godata发送出去;该模块采用的是模式0:CPOL = 0,CPHA = 0;该模块可以接收两种命令:读命令COMMAND_READ = 8'hA5、写命令COMMAND_WRITE = 8'H5A;原创 2021-10-19 22:06:19 · 5408 阅读 · 0 评论 -
手写异步FIFO
以下内容摘自:《正点原子逻辑设计指南》一、异步FIFO简介异步 FIFO 有两个时钟信号,读和写接口分别采用不同时钟,这两个时钟可能时钟频率不同,也可能时钟相位不同,可能是同源时钟,也可能是不同源时钟。在现代逻辑设计中,随着设计规模的不断扩大,一个系统中往往含有数个时钟,多时钟域带来的一个问题就是,如何设计异步时钟之间的接口电路。异步 FIFO 是这个问题的一种简便、快捷的解决方案,使用异步 FIFO 可以在两个不同时钟系统之间快速而方便地传输实时数据。异步 FIFO 指针的考虑:为什么异步 FI转载 2021-03-09 17:52:35 · 3125 阅读 · 1 评论 -
手写同步FIFO
以下内容摘自:《正点原子逻辑设计指南》一、 FIFO简介FIFO 是一种先进先出的数据缓存器,在逻辑设计里面用的非常多,FIFO 设计可以说是逻辑设计人员必须掌握的常识性设计。FIFO 一般用在隔离两边读写带宽不一致,或者位宽不一样的地方。在逻辑设计的时候,尤其是 FPGA 设计,使用 FIFO 一般有两个方法,第一个方法是直接调用官方的FIFO IP,另外一个方法是自己设计 FIFO 。直接调用 FIFO IP使用非常简单,也不需要知道FIFO 内部的控制逻辑。但是在 IC 开发中,往往需要我们自己转载 2021-03-09 12:33:05 · 2592 阅读 · 2 评论 -
Verilog 图像数据时序生成(timing_gen/output)
一、要求图像输出时序如下图所示,其中VSYNC_OUT为场同步信号,HSYNC_OUT为行同步信号,DATA_OUT为16bit图像信号,单个通道进行数据传输,输出格式为4096行*4096列*16bit。时钟为60MHZ,HBLANK为512CLK,HSIZE为4096CLK,VSIZE为(4096+512)*4096+512=18874880CLK,VBLANK为14458453CLKDATA_OUT为16bit,一次传输4096个数据。二、程序设计//此工程为EMCCD增益控原创 2021-10-16 20:43:59 · 1809 阅读 · 0 评论 -
FPGA 16bit 串口发送程序设计
一、前言在之前的一篇文章—FPGA UART串口通信实现 中,已经介绍过了串口通信的基础知识。你可能会发现,串口发送的一帧中数据位只能为5、6、7、8 位,也就是一次最多发送8bit的数据。最近在做一个项目,需要将图像数据保存到本地。想法是先将到来的图像数据写入RAM中,然后再读出来并用串口发送出去,串口调试助手一般都可以保存接收的数据到本地,这样就可以将图像数据保存到本地了。但是我的图像数据是16位的,我需要保存全部bit,不能截断后直接使用8bit串口发送的程序,所以就干脆利用状态机设计一个16bi原创 2021-09-10 12:19:37 · 1619 阅读 · 1 评论 -
FPGA 中差分时钟的使用
一、前言很多FPGA的板载时钟(板载晶振提供)不是普通的单端时钟信号,而是差分时钟信号,比如我正在使用的genesys2开发板。此时我们就不能像使用普通时钟信号一样直接使用差分时钟信号,而是需要使用IBUFGDS(xilinx 原语)或者PLL将差分信号转换成单端信号。PLL之所以也可以用来将差分时钟转换成单端时钟,是因为我们可以设置其输入时钟的source为Differential clock capable pin,也即告诉PLL输入时钟差分时钟。其实PLL也是在自己内部调用IBUFGDS来实现信原创 2021-04-20 17:24:38 · 16015 阅读 · 3 评论 -
FPGA VGA图片显示(vga_top)
以下内容来自正点原子的FPGA开发指南,觉得讲的不错,就搬了过来。一、VGA简介传送门:VGA介绍二、实验内容使用开拓者开发板上的VGA接口在显示器的屏幕中心位置显示彩色图片。显示分辨率为640*480,刷新速率为60hz,图片的大小为100 * 100。三、程序设计图 21.4.1是根据本章实验任务画出的系统框图。其中,时钟分频模块负责产生像素时钟,VGA驱动模块产生行场同步信号及像素点的纵横坐标,VGA显示模块输出图像数据,ROM用于存 储需要显示的图片。VGA显示模块中的ROM是通过例原创 2021-01-27 18:27:32 · 2361 阅读 · 10 评论 -
Vivado FPGA代码固化流程(以genesys2为例)
第一步:先综合,然后打开综合设计第二步:点击Tools—Edit Device Properties(注意,必须按照第一步打开综合后的设计,才能找到这个选项),然后配置相应参数。可以选择压缩bit流,这样后面固化时会快一些。选择合适的固化速率,可以适当设置高一些(默认是3MHZ),因为固化本身比较慢;设置SPI 的bus width,因为flash使用的是QSPI,也即SPI4x(后面还会设置此参数),所以这里要设置为4。选择编程模式,因为我们是将程序固化到flash中,以后上电自动从fla原创 2021-04-23 22:23:32 · 4476 阅读 · 4 评论 -
FPGA 读取SD卡图片数据(top_sd_photo)
以下内容来自正点原子的FPGA开发指南,觉得讲的不错,就搬了过来。一、SD卡介绍传送门:https://blog.csdn.net/qq_39507748/article/details/113195336初始化以及读写操作的流程文章中也有说到。二、实验内容使用FPGA开发板向SD卡指定的扇区地址中写入512个字节的数据,写完后将数据读出,并验证数据是否正确。三、程序设计SD卡初始化、写操作以及读操作是相互独立且不能同时进行的,因此我们可以将SD卡的初始化、写操作以及读操作分别划分为三个独立的原创 2021-01-28 08:57:59 · 4491 阅读 · 2 评论 -
使用winhex查看SD卡文件的物理扇区地址
一、前言最近在一个工程中需要读取存放在SD卡中的图片数据,在格式化了SD卡之后,我把.bin格式的图片数据使用读卡器移动到了SD卡中。然后将读取SD卡的程序的bit流下载进了FPGA中,之前是可以正常读取数据的,可是这次我用ILA监测读取的数据时,发现读取的数据全都是0,但是一些标志信号如读取开始、读取有效等都是正确的,说明读取动作是没有问题的。于是我就思考为什么会出现这种情况?最后发现是代码中设置的要读取的文件的物理扇区地址不对,可能是因为格式化之后再次将图片数据拷贝到SD卡时,物理扇区地址发生了变化原创 2021-04-22 23:19:46 · 7084 阅读 · 1 评论 -
基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL)
一、前言由于DDR3的控制时序相当复杂,为了方便用户开发DDR3的读写应用程序,Xilinx官方就提供了一个MIG(Memory Interface Generator) IP核,它可以为用户生成一个DDR3控制器。该控制器结构如下:它提供了用户接口(左侧),内部会将用户接口接收到的时序转换成DDR3所需的真正时序,并通过物理端(右侧)的接口连接到DDR3。由于用户接口的时序比较简单,因此该控制器就隐藏了极其复杂的DDR3的控制时序,让用户只需要按照用户端的时序来操作就可以对DDR3进行相应的读写。原创 2021-09-20 16:54:45 · 7457 阅读 · 3 评论 -
Verilog 图像数据的采样和缓冲(FMC_apt)
一、问题提出我们假设上一级传输过来了如下的图像数据:时钟为60MHZ,HBLANK为512CLK,HSIZE为4096CLK,VSIZE为(4096+512)*4096+512=18874880CLK,VBLANK为14458453CLKDATA_OUT为16bit,一次传输4096个数据。如果想通过VGA将图像显示出来,VGA显示用的时钟是65MHZ,那么就有两个问题需要我们解决:图像分辨率是4K * 4K,数据量太大,我们需要将其压缩为比如512 * 512;图像数据的时钟和原创 2021-06-12 16:21:34 · 1516 阅读 · 0 评论 -
内网穿透工具frp的简单使用
一、frp 是什么?frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。刚开始的时候,代理多数是帮助内网client访问外网server用的。后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内。项目链接:https://github.com/fatedier/frp二、为什么使用 frp?通过在具有公网原创 2021-05-28 17:30:56 · 2660 阅读 · 0 评论 -
什么是内网、公网和NAT?
一、内网、公网和NAT的定义内网也叫局域网,从范围上来讲内网就是小部分的网络,一般指的是特定环境下组成网络,比如某一个家庭多台计算机互联成的网络,也可以学校和公司的大型局域网,内网的IP一般都是192.168.1.100,192.168.0.100,172.16.1.100……这些都是内网IP,内网是不能直接连接外网,比较封闭,但在内网里面可以实现文件管理,应用软件共享、打印机共享等服务。外网又被叫做互联网,是连接不同地区局域网或者城域网计算机的通信的远程网络。通常可以跨接很大的物理范围,覆盖的范围可转载 2021-05-28 12:05:33 · 1197 阅读 · 0 评论 -
Python音频操作工具PyAudio上手
一、前言当需要使用Python处理音频数据时,使用Python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包。PyAudio是Python开源工具包,由名思义,是提供对语音操作的工具包。提供录音播放处理等功能,可以视作语音领域的OpenCV。二、示例1、采集音频下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav。使用了tqdm模块,可以方便显示出来读取过程:import pyaudioimport wavefrom t转载 2021-05-16 12:24:18 · 2238 阅读 · 0 评论 -
EMCCD自适应增益控制芯片
一、功能概述此芯片对EMCCD输出图像的不均匀性进行校正以及实现EMCCD增益的自适应控制,最后对校正完的图像进行拼接,拼接后的图像大小为4096*4096,拼接后数据以单路形式输出。主要模块包括:非均匀性校正模块、自适应增益控制模块和接缝平滑模块。芯片结构如下图所示:1、本帧接缝平滑系数为上一帧计算结果,上电初始情况下接缝系数为1。2、第一帧图像数据到来,内部控制逻辑从输入FIFO中读取数据进行非均匀性校正,接缝平滑的计算,并通过SDRAM控制器将数据写入SDRAM1中,写入时间为192ms。3原创 2021-03-23 10:37:00 · 1156 阅读 · 0 评论 -
使用python的pyserial操作串口
一、初始化1、简单初始化示例import serialser = serial.Serial('com1', 9600, timeout=1)2、所有参数ser = serial.Serial(port=None, # number of device, numbering starts at# zero. if everything fails, the user# can specify a device string, note# that this is转载 2021-01-19 10:59:58 · 7497 阅读 · 0 评论 -
驾驶证/行驶证信息提取与识别
一、前言最近想要玩一个关于驾驶证和行驶证信息提取的小项目,于是就准备开始学习相关的知识。因为之前对身份证号码提取有过了解,所以一开始整体的概念还是有的,比如这种项目需要使用opencv、ocr或者深度学习模型等等。于是就带着这些仅存的印象开始了这个项目。二、搜集资料刚开始我习惯性的直接去百度搜索,想要搜索一些开源的项目,但是我发现并没有多少可以使用的资源。大多是一些只讲基本原理或者是身份证识别项目。虽然说原理也有了,相似的项目也有了,但是这都不是我想要的,因为这种项目并不是直接在相似的项目上直接修改就原创 2020-07-18 23:12:55 · 5337 阅读 · 0 评论 -
STM32 BOOT0/BOOT1设置启动方式
参考: https://www.cnblogs.com/long5683/p/9638866.htmlSTM32三种启动模式对应的存储介质均是芯片内置的,它们分别是:1)用户闪存 = 芯片内置的Flash。2)SRAM = 芯片内置的RAM区,就是内存啦。3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在...原创 2020-03-17 09:35:46 · 6633 阅读 · 0 评论