- 博客(28)
- 收藏
- 关注
翻译 异步FIFO的设计
本文首先对异步 FIFO 设计的重点难点进行分析最后给出详细代码一、FIFO简单讲解FIFO的本质是RAM, 先进先出重要参数:fifo深度(简单来说就是需要存多少个数据) fifo位宽(每个数据的位宽)FIFO有同步和异步两种,同步即读写时钟相同,异步即读写时钟不相同同步FIFO用的少,可以作为数据缓存异步FIFO可以解决跨时钟域的问题,在应用时需根据实际情况考虑好fifo深度即可本次要设计一个异步FIFO,深度为8,位宽也是8.代码是学习...
2022-01-06 16:40:27 3174 3
原创 各类图像加速算法汇总
1.sobel算子(verilog)`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 2021/11/20 15:33:31// Design Name: // Module Name: x// Project Name: /...
2022-01-05 15:04:44 752
原创 (附代码)利用AXI_DMA进行批量数据发送到PS(测试篇)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结一、Zynq的GPIO概述简单的理解,MIO 是 PS 系统原生的,和 PL 没啥关系;但是 EMIO 是 PS 借 PL 的引脚用,所以它们就有千丝万缕的关系,PL 的工程里面势必要做点什么。MIO 在 PS 系统里面分配好对应的信号功能后,在 PL 的代码里面就不需要写任何的逻辑,甚至引脚分配都...
2021-12-28 18:33:51 1883 1
原创 将480*640rgb888彩色图像转为rgb444彩色图像并制作coe文件(matlab)
先上网搜一幅图像,通过画图软件将其变为480*640大小,将其保存为24rgb.bmp文件。将matlab路径迁移到.bmp文件夹下。随后运行脚本。脚本文件如下:img = imread('tar.bmp');%分离通道r = img(:,:,1);g = img(:,:,2);b = img(:,:,3);%修改位宽r = uint32(r);g = uint32(g);b = uint32(b);%降维 2维降到1维r = reshape(r',307200,1);%此
2021-12-27 20:48:02 4083 1
原创 verilog150个经典例子仿真及电路图
1.4位全加器 代码:module module_full_add( input [3:0] iv_a,iv_b, input is_cin, output [3:0] owv_sum, output ows_cout ); assign {ows_cout,owv_sum} = iv_a+iv_b+is_cin;endmodule RTL: Simulation:2...
2021-12-26 21:19:43 13912 3
原创 shell脚本学习笔记
一、什么是shell shell是c编写的程序,是用户和linux内核沟通饿桥梁,命令解释二、shell功能 *命令行解释功能*启动程序 *输入输出重定向 *管道连接 *文件名置换(echo /*) *变量维护 *环境维护 *shell编程三、shell语法shell脚本就是将完成一个任务的所有的指令按照执行的先手顺序,自上而下...
2021-12-22 21:06:30 1424
原创 基于zynq7000的SDSOC的yolo人脸识别(环境篇)
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:一、SDSOC简介以及其与zynq的关系二、环境的搭建三、SD卡的分盘四、启动SDSOC五.
2021-12-16 22:25:44 4059 5
原创 C语言学习笔记
1.地址传递与指针传递 student{ string name; int age; int score;}值传递void printstudent(student s){ cout <<"姓名"<<s.name<<"年龄"<<s.age<<"分数"<<score<<end1;}...
2021-12-11 19:42:45 959
原创 基于verilog实现DDR3存储图像数据,问题,以及解决方案
问题一:在实现DDR3写的时候出现了,数据与地址沿没有对齐的问题,如下图所示。可看图中的蓝色与黄色光标,很明显在地址为0的时候,没有写数。解决办法: case(state) IDLE: begin if( rd_en_fifo1_in & rs_wr_enable)//write_data_2_mig begin orv_cmd <= 3'b0; orv_addr <= 29'h1fff_fff8;
2021-12-10 18:29:47 2110
原创 vivado中testbench的一些技巧
自己工程中用到的一些testbench的代码,以后方便copy直接使用,节省开发时间。一、做数据处理时,数据流的产生有限数据流的产生。 integer i; reg [15:0] st[1:100]; initial begin $readmemh("G:/zz/data.txt",st); i=0; s_axis_tdada1=0; repeat(100) begin ...
2021-12-10 14:31:11 2012
原创 基于数字电路设计的再次理解(随笔)
用verilog写代码的时候一定要做到:心中有电路,代码有电路。至于想要做到心中无电路,代码无电路,那就是玄学了。再者,做FPGA一定要设计当头,做FPGA设计或者是ASIC设计的最重要的就是设计。写代码不要光always,这样很浪费逻辑资源。寄存器多了,面积必然大,功耗也会大。不符合ic设计理念。写verilog之前不光要做到心中有电路,还要做到心中有时序图。一个设计方案,不仅心中要有数,而且要写下来。再动手写代码之前,心中也有个普。正确设计流程应该是确定设计模块的要求,划分硬件结构。同时
2021-12-08 14:01:45 253
原创 基于VIVADO MIG核配置,以及读写的完成(附代码讲解)
一、DDR3用户端见如图是中间部分是我们MIG核,它分为,左边的用户接口与右边的DDR3接口,vivado给我们提供了便利的MIG核,我们只需要通过配置用户端的接口,就可以直接控制DDR3了。MIG核的配置,网上一大堆,在这里,我就挑几个需要重点理解选项。在应用一个模块之前,我们首先要了解这个模块的时钟树。从上图中,我们可以得到 CLOCK PERIOD(clk1)、INPUT CLOCK PERIOD(clk2)、SYStem clock、PHY to c...
2021-12-07 19:43:37 5892 3
原创 DDR3的一些基本知识
一、关于DDRDDR3全名Double Data Rata SDRAM,目前已经更新到第六代,但是第五代与第六代还没在市场上营销。市面上以DDR3以及DDR3居多(目前本人用的VC709是DDR3),DDR的前身是SDRAM,最大的不同在于前者是差分,后者是单端。其他DDR的迭代主要是传输速率,工作电压,功耗等不同。二、一些基本参数的理解DDR3知识大全 - CNZHIQIANG - 博客园c此文章对于DDR3的基本知识有一个很好的理解作用,其中包括了一些关键参数读写时序,如tRCD,CL,
2021-12-03 19:49:33 1553
原创 基于VC709开发板的光纤收发的调试与实现,以及过程中遇到的问题与解决。
VC709是xilinx旗下的一款开发板,搭载了强大的Virtex-7芯片。有着丰富存储资源,时钟资源与高速接口。具体可参考xilinx官网的ug887手册,本次主要是想记录一下自己的学习过程与遇到的困难。一、利用IBERT核实现回环测试。具体的实现流程可参考知乎文章:在开始高速接口前,我们来试试IBERT测试吧! - 知乎下面讲讲自己遇到的困难与最终解决方案。这里设置的设置没什么好说的,注意一点就是,参考时钟决定了你的线速度,因为板子上的参考时钟是固定的(也可以通过外时钟的接入或者可.
2021-11-17 19:20:53 3799 4
原创 基于网口的GPS实时授时的16路AD采集卡
本项目是基于在原有的16路AD采集卡的系统之上,加入GPS实时的授时系统。将FPGA接收卫星信号的时间戳,插入到AD数据中,从而产生带有实时时间戳的ad数据。基本原理是FPGA模块通过uart串口模块,接收来自卫星发送的tod信号,提取tod信号的有效字节作为大秒(既时分秒、日月年),通过10Mclk时钟计数来产生小秒,理论上最小精度可达100ns具体看来自卫星的时钟。具体实现过程,通过调用uart串口,接收卫星信号发送的格林威治时间,通过计数器筛选有用信号(一共35B,有效数据只有12B)
2021-10-27 20:17:50 789
原创 FPGA的时序的一些忠告
忠告一、如果时序差的不多,在 1NS 以内,可以通过修改综合,布局布线选项来搞定,如果差的多,就得动代码。忠告二、看下时序报告,挑一个时序最紧的路径,仔细看看是什么原因导致,先看逻辑级数是多少?是哪种电路有问题,乘法器 或者还是 RAM 接口数据 先弄清楚哪儿的问题忠告三、搞时序优化的话 插入寄存器是王道 但也要看具体情况 不一定都得插寄存器,插入寄存器效果不明显的话,先检查一下寄存器插入的位置,如果寄存器不是在关键路径的中间插入而是在某一端的话,确实不大明显忠告四、把关键路径找出来,看时序报告,看是
2021-09-29 16:23:01 738
原创 FPGA时序学习笔记之一
模块的扇出是指模块的直属下层模块的个数。一般认为,设计得好的系统平均扇出是 3 或 4。一个模块的扇出数过大或过小都不理想,过大比过小更严重。一般认为扇出的上限不超过 7。扇出过大意味着管理模块过于复杂,需要控制和协调过多的下级。解决的办法是适当增加中间层次。一个模块的扇入是指有多少个上级模块调用它。扇入越大,表示该模块被更多的上级模块共享。设计得好的系统,上层模块有较高的扇出,下层模块有较高的扇入。其结构图像清真寺的塔,上面尖,中间宽,下面小。静态时序分析的前提就是设计者先提出要求,然后时序分析工
2021-09-29 16:21:45 671
原创 关于FPGA时序问题的一些学习之路
FPGA时序是FPGA设计过程中一个非常重要的环节,他基本上决定了系统稳定性与鲁棒性。FPGA时序既与其自带的内部器件有一定的关系,同时也与逻辑编程有一定的关系。在此我们可以先了解两个名词 及STA(静态时序分析) 以及SDC文件,这两个名词,前者是高速我们逻辑代码的时序如何,后者则是去改善前者,使其时序逻辑变得较好。一般时序的设计流程如下,综合(Synthesize)>在TimeQuest TA里添加时序要求(约束)> 在工程中使能(及调用)TimeQuest TA>布局布线(F
2021-09-28 21:45:47 513
原创 关于FPGA开发中,对于非逻辑毛刺的解决问题
前文中,我们介绍了毛刺的一种解决方案。此毛刺是通过两个信号的与造成的,可以通过打拍子解决。笔者最近遇到了一个由于硬件电路产生的问题,通过打拍子无法解决,于是可以通过计数器来过滤掉毛刺。具体的操作方式如下:reg [3:0]io1;reg [7:0]cnt1,cnt2,cnt3,cnt4;always@(posedge clk or negedge rst_n)if(!rst_n)begin io1[0] <= 1'b1; cnt1 <= 8'b0;endelse...
2021-09-28 16:26:51 424
原创 FPGA代码中的信号优化问题
(笔者使用的是QuartusII 的SignalTap II Logic Analyzer)在使用开发软件逻辑分析仪的时候,软件为了节约内存。有时候会自动优化一些信号,使得这些信号变得不可见,通过以下方式可以得到一些解决。解决这个问题首先要了解一下扇入扇出问题。网上的解释很多,但是个人认为扇入就是指定义的reg类型寄存器作为输入,扇出就是作为reg类型的寄存器作输出。若这个信号没有作为输出,则称为零扇出,若这个信号没有作为输入,则称为这个信号作为零扇入。从这个理解角度,我们可以:1. 如果是组合
2021-09-25 16:58:39 833
原创 quartus II逻辑分析仪的使用
quartus II逻辑分析仪在逻辑调试中有很大的作用,可以帮助开发人员抓住很多示波器无法获取的中间寄存器信号。具体使用方法点击tools》signaltap II logic analyzer打开界面如图首先点击右上角的hardware 选择USB接口 接着点击 Scan Chain 扫描下载器JTAG接口 预置Clock,尽量选择大的时钟,这样可以看到更多的信号,选择 sample depth的深度,深度越高,可以看到的波形越多。但是选择的时候,Medium的值不可超过阈值。随后双击中间..
2021-09-15 13:26:56 5215
原创 关于verilog中的毛刺产生问题。
verilog中,产生毛刺是一个常见的现象。目前发现的一种毛刺产生的原因,是由于上升沿与下降沿的与操作,使得系统产生了毛刺,如下:reg [3:0]acountreg sclk;always(posedge clk)if(!rst_n )begin acount <= 4'b0; sclk <= 1'b0;endif(acount == 4'd10)begin sclk <= ~sclk; ...
2021-08-17 11:14:56 2870
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人