笔记
FPGA硅农
数字IC设计,FPGA开发
展开
-
git合并多次提交
Git是一个分布式版本控制系统,它允许开发人员在不同的分支上进行并行开发,并将这些分支合并到主分支或其他分支中。在开发过程中,我们经常会创建多个commit来记录每次的代码变更。有时候我们希望将这些连续的commit合并为一个更有意义的commit,以提高代码的可读性和维护性。原创 2024-03-02 22:45:06 · 674 阅读 · 0 评论 -
Git Cherry Pick的使用
其中,<commit>是要应用的提交的哈希值或分支名。该命令会将指定的提交应用到当前分支上,并创建一个新的提交。原创 2023-10-16 22:53:57 · 563 阅读 · 0 评论 -
Verdi实现信号的平移
在Verilog/System verilog中,可以实现延迟指定时间的功能,而在使用verdi查看信号波形并进行分析时,同样也可以实现类似的功能。:这种信号平移是有其应用场景的,例如,在某些仿真模型中,为了模拟实际的信号延迟,信号的实际跳变沿往往和时钟的上升沿不是完全对齐的,而是存在一定时间的错开,这样,在将该信号与clk相与时,就会出现毛刺,从而干扰后续的分析)下面,以时钟信号clk为例,展示verdi对信号进行的实现方法。原创 2023-09-16 10:45:31 · 1793 阅读 · 0 评论 -
Latex参考文献引用
使用\bibitem格式。该方法不能将参考文献直接放在.bib文件中引用,而是将\bibitem{}命令(花括号里写正式的引文)写在论文的.tex文件中。原创 2023-03-02 10:15:59 · 3977 阅读 · 0 评论 -
【visio使用技巧】图片导出pdf时去掉多余空白
在visio导出pdf格式的图片时,往往会存在多余的白边,本文讲述如何去掉这些多余的空白原创 2023-02-12 21:55:19 · 8803 阅读 · 1 评论 -
visio画网格(包括平行四边形)
visio画网格示例。原创 2022-12-21 19:15:07 · 5887 阅读 · 2 评论 -
Git统计代码行数
通过git统计代码行数原创 2022-06-05 10:58:57 · 646 阅读 · 0 评论 -
VCS和Verdi联合仿真
编写RTL代码设计文件如下:add.vmodule adder(input clk,input wire [31:0] a,input wire [31:0] b,output reg [31:0] c);always@(posedge clk) c<=a+b;endmodulesub.vmodule suber(input wire clk,input wire [31:0] a,input wire [31:0] b,output reg [3原创 2022-04-15 22:45:40 · 5700 阅读 · 4 评论 -
问题记录:Vivado HLS结构体作为顶层接口时cosim无法结束
博主在用Vivado HLS进行开发时,用到了结构体数据类型,C仿真,综合均正常,上板测试IP核也正确,但是cosim却迟迟停不下来,最终猜测顶层接口不可以使用结构体,正确的代码写法应该如下所示:可以看到,当设计内部用到结构体数据类型时,顶层不能直接将它作为m_axi接口,而是应该使用ap_uint<W>*指针代替,通过ap_uint读入(或写出)数据后,再使用range方法将值赋给结构体。采用这个方法后,该设计可以顺利通过cosim仿真!!#include"top.h"cdata_t原创 2022-04-13 17:34:58 · 527 阅读 · 3 评论 -
Vivado HLS导出IP出错(2022)
自2022年开始,所有vivado hls或者vitis hls在导出IP的时候,都会报错。博主一共尝试了两种解决方法,在此作一记录:方法1修改计算机的系统时间至2022年之前方法2在Export RTL对话框中选择Configuration,将version从0.0.0修改为1.0.0或其他,即指定一个新的version。...原创 2022-03-01 23:05:51 · 1992 阅读 · 2 评论 -
visio画太极图
步骤一添加两个圆,且大圆的半径是小圆的2倍。步骤二往小圆添加一条直线作为直径步骤三选中小圆和直径,依次点击开发工具–操作–连接,然后选中连接后的小圆,再依次点击开发工具–操作–修建,可以分离出如下所示的两个半圆弧。步骤四将两个圆弧添加至如图所示位置,选中,点击开发工具–操作–连接步骤五选中连接后的弧线和大圆,点击操作–连接,然后选中连接后的几何体,点击操作–拆分,得到如下所示的两块(即太极图的两边)。步骤六填充颜色如下:...原创 2022-02-11 17:39:02 · 8329 阅读 · 2 评论 -
visio画扇形
步骤1首先,选择文件–选项,打开开发工具。步骤2添加圆形步骤3添加两条线,形成扇形的两条边步骤4选中圆和线条,在开发工具菜单栏选择操作----修剪。步骤5选中线条和右边这段弧形,依次选择开发工具—操作—连接。步骤6拖动该扇形,填充自己想要的颜色即可!...原创 2022-02-11 17:14:41 · 17979 阅读 · 0 评论 -
Zynq使用math.h函数库
问题:在Zynq的开发过程中,有时候可能会用到math.h等库,然而,简单的#include<math.h>在编译时会报错:undefined reference to ***解决方法:1.右键工程,选择C/C++ Build Settings2.按照1,2,3,4操作3.在弹出的窗口中输入m(表示math库),点击ok,并应用4.再次编译,发现编译过程不报错:...原创 2021-12-12 09:47:12 · 1812 阅读 · 0 评论 -
Xilinx HLS FFT IP核运行时动态配置FFT长度
如上图所示,xilinx hls的fft ip核不仅可以计算固定长度的FFT变换,还可以在运行时动态配置fft变换长度,但其可配置的长度仅限于小于等于最大长度的所有可能的2的幂,即若该fft ip可支持的最大长度为32,那么配置选项为32,16,8…运行时实时参数的配置可通过如下方式实现config_t fft_config;fft_config.setDir(0); //用来配置FFT:0正向 1反向fft_config.setSch(0x57B);//用来设置缩放因子[01 01 01 .原创 2021-12-06 15:02:26 · 3122 阅读 · 2 评论 -
Tcl学习笔记4-控制语句
条件语句使用方法:if { condition1} { true_statement1 } elseif { condition2 } { true_statement2 } else { default_statement }例:Vivado% set a 11Vivado% set b 22Vivado% if {$a<$b} {puts "a is less than b"}a is less than bif 语句还可以原创 2021-11-16 11:42:12 · 711 阅读 · 0 评论 -
Tcl学习笔记2-字符串匹配
字符串匹配字符串匹配命令使用格式如下:string match -nocase pattern str-nocase 表示不区分大小写匹配;pattern 表示匹配方式,通常由字符和通配符组成。如果匹配成功,string match 的返回值为 1,否则为 0。使用 * 匹配匹配符 * 可以匹配 0 或多个字符,示例如下:Vivado% puts [string match {name*tom} "name is tom"]1Vivado% puts [string match {nam原创 2021-11-13 15:22:57 · 2954 阅读 · 0 评论 -
Tcl学习笔记3
string 命令合集示例:compareVivado% string compare "abc" "abc"0Vivado% string compare "abc" "Abc"1equalVivado% string equal "abc" "abcd"0indexVivado% set str "hello world"hello worldVivado% string index $str 4orangeVivado% set str "hello world原创 2021-11-13 15:44:29 · 253 阅读 · 0 评论 -
Tcl学习笔记1
Hello world设置变量为某个字符串set str "hello world"打印该变量的值puts $str输出如下:数值与变量1.计算表达式的值puts [expr 33+3]结果为:362.变量的声明和调用定义:set 变量名 变量值取值:$变量名变量名可以包含任何字符,长度任意,甚至可以包含空格等特殊字符,但是需要封闭在大括号内。建议变量名以字母或下划线开始,不要包含特殊字符,让代码更加的简洁、规范。有空格的情况:set {array num14}原创 2021-11-13 13:30:00 · 1966 阅读 · 0 评论 -
visio中自定义图形的颜色填充
一.首先勾选开发者选项1.文件--选项2.自定义功能区--勾选开发工具3.之后菜单栏会出现“开发工具"二.绘制自定义图形绘制如下,选中并组合:三.颜色填充选中图形,在开发工具中选择操作,依次进行组合,连接和拆分回到开始,选择颜色进行填充,效果如下图2...原创 2021-10-11 18:54:43 · 10522 阅读 · 1 评论 -
python einops张量操作工具包
eniops是python提供的一个对张量维度进行随心所欲操作的包,具有十分强大的功能,下面就让我们来见识一下eniops的强大表达能力。rearrange具有交换张量维度的功能,下面的例子将C,H,W方式存储的图片转化为H,W,C的存储方式import torchfrom einops import rearrangex=torch.rand((10,3,224,224))print(x.size())x = rearrange(x, 'b c h w ->b h w c'原创 2021-08-30 22:49:44 · 2293 阅读 · 4 评论 -
ZYNQ及HLS开发中遇到的问题记录
一.数组字节对齐问题可通过__attribute__((aligned(#)))进行数组首地址的#字节对齐,这在某些情况下是非常有用且必要的。比如,当PL端位宽为128bit时,那么PS端被读取的数组的首地址必须是16字节对齐的,否则会发生读取的错位,从而造成错误。二.malloc指针的字节对齐问题同一,只是对齐使用的方法不同,这里使用的是memalign函数三.HLS m_axi接口的burst length问题在对接口进行pragma设置时,需要加上max_read(wri.原创 2021-08-25 23:32:57 · 1299 阅读 · 0 评论 -
基于pytorch的花卉识别小程序
通过迁移学习,以VGG16为基础,对有5种类型的花卉数据进行训练,训练完后,保存模型参数,然后用Pyqt5简单实现了一个小程序。代码:predict.py(加载模型参数,对输入的图片进行预测,给出类别和概率)import torchimport numpy as npimport matplotlib.pyplot as pltimport torchvision.models as modelsimport torch.nn.functional as Fdef imshow(imag原创 2021-08-12 19:53:28 · 2087 阅读 · 2 评论 -
Pytorch数据集加载---DataLoader和Dataset
DataLoader 和 Dataset神经网络训练的第一步往往是数据集的加载和处理,当然,我们可以自己手动完成,但这也往往给我们带来了诸多的不便,尤其是当数据集比较大的时候,比如shuffle操作,batch操作等等,甚至更加高级的图片预处理操作。幸运的是,pytorch为我们提供了用于数据加载和处理的DataLoader和Dataset类,Dataset是一个包装类,用来将数据包装为Dataset类,然后传入DataLoader中,我们再使用DataLoader这个类来更加快捷的对数据进行操作。Da原创 2021-08-12 12:18:38 · 744 阅读 · 0 评论 -
pytorch中requires_grad=false却还能训练的问题
在pytorch中,requires_grad用于指示该张量是否参与梯度的计算,我们可以通过如下方式来修改一个张量的该属性:tensor.requires_grad_() //True or False然而,本人在写代码的过程中发现,在搭建完一个网络之后,打印所有参数的requires_grad属性,结果显示全为false,但训练时loss损失函数却能下降,令人百思不得其解,代码和打印输出的结果如下:class Net(nn.Module): def __init__(self):..原创 2021-08-12 00:26:28 · 9182 阅读 · 6 评论 -
Vivado与SDK联合调试
1.在block design中选中要debug的信号,右键选择debug。2.重新点击Run connection automation ,可以看到,生成了system ila IP核3.综合,综合结束后点击set up debug4.点击find nets to add5.选择刚刚标记的信号(mark_debug is true),点击OK6.添加所需信号7.若有信号无时钟域,右键选择时钟域8.候选捕获,触发等高级功能,选择采样深度.原创 2021-07-19 16:35:37 · 4323 阅读 · 1 评论 -
卷积神经网络FFT变换后数据的方差分布情况探究
import torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.optim as optimfrom torchvision import datasets, transformsBATCH_SIZE=512 # 批次大小EPOCHS=10 # 总共训练批次DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 让t原创 2021-07-14 12:34:28 · 363 阅读 · 0 评论 -
geopandas拓扑检查(任意两个几何体不相交)
之前使用rtree来进行拓扑检查,主要是使用GeoDataFrame的sindex来实现的,但是由于某种未知的原因,rtree总是会莫名奇妙的运行错误,且没有任何错误提示,因此博主自己实现了一版拓扑检查,思想和之前其实差不多:先得到所有几何体的外接矩形框,然后根据外接矩形框判断是否有可能相交(矩形框相交,几何体才有相交的可能性),通过外接矩形框的筛选之后,再对可能相交的几何体进行一个精确的相交判断,代码实现如下:import geopandasimport copyimport matplotlib.原创 2021-06-23 23:26:00 · 1170 阅读 · 0 评论 -
ZYNQ裸机开发中的Cache问题
在裸机开发中,经常会涉及到cache一致性的问题,我们知道,使用Xil_DCacheFlushRange和Xil_DCacheInvalidateRange函数可以解决这个问题,但是Xil_DCacheInvalidateRange使用时有一些注意事项,之前没注意,导致一些莫名奇怪的错误,故在此记录一下。我们知道,在cache和DDR之间数据传输的基本单位是Cache Line,因此,在使用Xil_DCacheInvalidateRange时,无论是起始地址,还是要Invalidate的长度,都必须是Ca原创 2021-06-16 11:49:08 · 6497 阅读 · 1 评论 -
卷积神经网络相关函数的C/C++实现
void pool(int h,int w,int ch,float* in,float* out){ int i,j,n,kx,ky; for(i=0;i<h/2;i++) for(j=0;j<w/2;j++) for(n=0;n<ch;n++){ //float tmp=in[n][2*i][2*j] float tmp1=*(in+n*h*w+2*i*w+2*j);原创 2020-12-02 10:01:47 · 752 阅读 · 0 评论 -
解决pycharm上PyQt5程序不显示错误的问题
前言默认情况下,pyqt5运行时候如果报错了,会直接崩掉,但是用try又可以try的出来,这个时候我们可以打开当前项目的pycharm的run/debug configure,在这里面去设置,这样我们就可以显示报错了。1.点击run里面的edit configurations2.将Emulate terminal in output console勾上后点击apply应用3.设置一个报错点击运行这样就会将报错详细的显示出来!博客转载自http://blog.hcs427.cn/index/转载 2021-03-17 21:50:16 · 3343 阅读 · 6 评论 -
qt designer入门
由ui文件转化而来的py文件:# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'untitled.ui'## Created by: PyQt5 UI code generator 5.15.2## WARNING: Any manual changes made to this file will be lost when pyuic5 is# run again. Do not ed原创 2021-03-13 14:53:40 · 190 阅读 · 0 评论 -
卷积运算的im2col实现
#include <stdio.h>#include <windows.h>#include<iostream>using namespace std;typedef double dtype;void kernel_reshape(dtype* weight_in,dtype* weight_out,int K,int C,int N) //N*K*K*C->(K*K*C)*N{ for(int i=0;i<N;i++)原创 2021-02-10 23:40:51 · 745 阅读 · 0 评论 -
笔记本核心数变少的解决方法
最近发现我的笔记本由双核四线程变成了单核双线程,查看任务管理器核心数为1,逻辑处理器为2,查看设备管理器,发现4个逻辑处理器均正常,查看BIOS,也发现核心数为2,也就是说,硬件上没有任何问题,最终通过如下方法解决:1.win+r,并输入msconfig2.取消"处理器个数(N):"的勾,确定并重启3.重启后打开任务管理器,发现电脑回复正常:双核四线程...原创 2021-02-01 13:17:12 · 5046 阅读 · 0 评论 -
Ubuntu16.04安装VCS和Verdi
安装所需软件的链接:https://pan.baidu.com/s/1PHgK9dh8MlyzzFZdfb9vFQ提取码:887j安装1.运行./SynopsysInstaller_v3.3.run2.创建文件夹作为安装目录mkdir vcs_2016.06 #为vcs建立文件夹mkdir scl_11.9 #为scl建立文件夹mkdir verdi_2016.06-1 #为verdi建立文件夹3.运行./setup.sh进行安装,若报下图的错则输入sudo原创 2021-01-31 22:00:18 · 2606 阅读 · 9 评论 -
ZYNQ中断过程分析
以下面代码为例#include <stdio.h>#include "platform.h"#include "xscugic.h"#include "xil_exception.h"#define INT_CFG0_OFFSET 0x00000C00// Parameter definitions#define SW1_INT_ID 61#define SW2_INT_ID 62#define SW3_INT_ID原创 2021-01-01 12:25:47 · 1516 阅读 · 0 评论 -
用HLS LineBuffer实现2D卷积
为了在每个周期都能得到一个3x3的卷积窗口,我们可以通过linebuffer来实现,具体方法为:对于一个KxK的卷积核和一个NxN输入特征图的卷积,我们可以设置K-1个深度为N的FIFO,然后将第i个FIFO的读出连接到第i+1个FIFO的读入端,第0个FIFO的读入则直接从特征图按序获取。下面是HLS的代码实现,为了简单起见,本代码仅支持步长S=1,卷积核大小为K=3的情形,支持任意大小的N(只要不超过LineBuffer的最大深度):#include<iostream>#include&原创 2020-12-21 08:15:49 · 1716 阅读 · 0 评论 -
Zynq开发-通过寄存器读写调用HLS IP核
一般情况下,在使用Vivado HLS工具将设计导出为RTL IP时,会附带一个在Xilinx SDK中调用HLS IP核的驱动程序,我们可以直接使用已经写好的驱动程序来使用PL端的ip来为我们做一些计算,本文则旨在直接通过读写寄存器来进行HLS IP的调用。HLS IP的设计流程以及Vivaod中的Block Deisgn在这里略去,主要讲如何使用寄存器来控制我们的IP。首先我们在system.hdf中查看HLS IP核的寄存器地址:因为不使用中断,我们主要关心以下三个寄存器地址在HLS提供的原创 2020-12-20 20:09:33 · 1403 阅读 · 3 评论 -
STM32F103ZET6入门----使用库函数点亮LED灯
1.首先新建一个文件夹LED,作为本次的工程目录2.新建工程3.在LED文件夹下新建USER目录,将新建的工程存于该目录下,这里工程名为led4.选择STM32F103ZE,点击OK5.点击cancel6.在工程目录LED下再新建以下三个文件夹7.复制以下文件至STM32F10x_FWLIB文件夹8.复制完成后如下:9.复制以下文件10.粘贴至CORE文件夹11.复制启动文件12.粘贴至CORE文件夹13.复制以下文件14.粘贴至USER文件夹15.复原创 2020-12-09 17:27:27 · 3026 阅读 · 1 评论 -
linux操作物理地址
在基于linux的zynq开发中,PL端的IP核一般访问的是内存的物理地址,而linux上的应用程序则使用的是虚拟地址,这就给开发带来了诸多不便。虚实地址的转换可以通过linux中的mmap和/dev/mem来实现,详见链接https://blog.csdn.net/gujintong1110/article/details/46684589...原创 2020-11-28 23:17:15 · 659 阅读 · 0 评论