自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 Hls学习(一)

4:FPGA善于进行并行计算,有大量的乘法器,同时由于ARM的嵌入,在管理方面也增强,功耗相比于CPU低,并且对于软件工程师来说用C/C++编程变成一种可能。2:dsp在递归方面有所减弱,在递归方面有所增强,比如递归啊等,GPU可以同时处理多个进程,对于大块数据,流处理比较适用。存储单元:Block RAM、分布式的RAM,对于大块的存储选择Block RAM,小量的

2023-11-11 16:01:58 444

原创 Vim编辑器学习

vimrc为vim的配置文件,进去之后,直接把syntax on 和set number输入进去,这样就会保留文件的配置,再下次再进入文件的时候保存之前的更改。11:命令模式下按w键,表示一次跳一个单词,适用于想要跳的比较多的时候,B键表示往前跳,按键盘上的。15:/+要查找的单词会高亮显示搜索所有的该单词,例如**/node**,查找node,接下来按。,删错了的话想恢复,在命令模式下按U(undo)恢复。2:命令到编辑模式,按键盘i,编辑到命令格式按。下有两种模式,一种是命令模式,一种是编辑模式。

2023-11-09 00:06:34 315

原创 Verilog 学习第十节(使用ram/rom IP核写入数据并测试)

首先点击侧边栏的IP Catalog并在搜索框中搜索ram,有两种ram形式,块状ram更有利于处于数据量比较大的数据,这里我们选择第二种。之后根据需要选择单端口的只读存储器,并设置使能为总使能~设置好端口宽度与深度并加入初始化数据后开始编写代码。这里在配置寄存器的时候选择没有原始的寄存器输出~rom_control.v文件。read_rom.v文件。测试文件rom_tb.v。

2023-03-25 16:31:27 1660

原创 Verilog 学习第九节(DDS原理)

注:由于vivado软件在模拟正弦波的时候会自动补齐一些本来没有的点,所以在计算一些点的时候或者周期的时候可以把波形图像返回原来的10进制数据模式以更准确地显示~一个完整的周期,被分成了2^32 个点,输出32个点,每1ms输出一个点,得到一个完整周期的波形。根据图像计算得:频率为1000000000/1315200=760。根据上面的公式计算得:50MHz*10^16 /2^32=762。

2023-03-14 16:20:39 341

原创 Verilog 学习第八节(数码管段码显示)

共阴极数码管:低电平端接的都是0,高电平端哪里设置为1 ,哪里就亮~共阳极数码管与之相反~对于三位的共阴极数码管第0.01s:让数码管0的a段亮,其他数码管全灭Sel0为高电平,sel1和sel2为低电平A段为低电平第0.02s:让数码管1的b、c段亮,其他数码管全灭Sel1为高电平,sel0和sel2为低电平B和C段为低电平第0.03s:让数码管2的e段亮,其他数码管全灭Sel2为高电平,sel0和sel1为低电平E段为低电平所以,通过这种方式,可以节约引脚~

2023-03-07 10:54:21 1479

原创 Verilog 学习第七节(亚稳态状态原理与解决方案)

在亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。对按键消抖模块修改~添加一层同步信号。

2023-03-03 19:31:16 892

原创 Verilog 学习第六节(基于状态机的按键消抖原理与状态转移图)

通常情况下解决按键消抖可以采用当将上图中的第一个实际图转换成第二个方便处理分析的图,在第一次检测到电平波动从上生沿变化下降沿的时候开始计时20ms,下后面的都判断为按下状态;4:释放消抖状态:20ms的计时状态,在这个状态里,一边计时,一边检测有没有出现下降沿,如果有下降沿,回到等待释放状态;2:按下消抖状态:20ms的计时状态,在这个状态里一边计时,一边检测有没有上升沿出现,如果有上升沿,回到空闲态;3:等待释放:等待按键释放(等待上升沿),一旦出现上升沿,就开始20ms的计时。

2023-02-27 21:58:52 698 1

原创 Verilog 学习第五节(串口接收部分)

波特率是指串口通信中,单位时间传输的二进制位数eg:115200对应的就是1s传输115200位,即传输一位需要1000000000/115200,若进行采样频率为波特率的16倍则需要再除以16对应于每次的采样的时间,由于内部时钟20ns的频率进行变化,所以想要计算对应的采样次数就需要再除以20~在实际板级运行的时候,当我们的time值更新时(25000000),counter的值已经大于该值,所以无法通过计数比较的方式清零,只能一直自加下去,直到32位计满了,溢出清零,然后才能正常的循环计数清零。

2023-02-27 15:21:06 1847

原创 Verilog 学习第五节(串口发送部分)

2:在主代码中为了模拟实际电路中的赋值情况,可以设置#10代表延时时间,上面记得加`timescale 1ns/1ns,因为在下载到电路板上以及vivado识别的时候会自动略去这里的延时,但是这么写对实际电路仿真的时候却又非常有用。题目:使用上面的串口发送模块,设计一个数据发送器,每10ms以115200的波特率发送一个数据,每次发送的数据比前一个数据大一(计数器)3:串口通信的本质就是将8位并行数据通过一根信号线,在不同的时刻传输并行数据的不同位,通过多个时刻,最终将8位并行数据全部传出。

2023-02-21 22:00:43 3573 6

原创 Verilog 学习第四节(从计数器到可控制线性序列机——LED实验进化六部曲)

1:锻炼了自己分析波形的能力,自己调试,最初小梅哥的代码在间隔10ms的时间里会一直保持ctrl[0]的状态,让波形看的很乱,找不到是什么时候开始算起的,于是我对counter2进行计数更改,当当前处于不计数的状态时,不为0.因为为0 的话需要在后面case循环中进行判断等于ctrl[0],于是我把不计数的状态设为不在判断范围内的8,使其为0,这样使得波形比较规律易懂。答:在四的基础上增加led的位宽,以及设置多个控制信号进行赋值。1:这里为了使亮灭计数好想,设置了复位状态时led灯为灭~

2023-02-18 18:32:15 1132

原创 Verilog 学习第三节(参数化方法,led 不同频率闪烁)

收获:使用modelsim仿真的时候如果需要仿真的时间比较长,刚开始可能会没反应出现不了自己想看到的结果,所以设置适当的时间也很关键。

2023-02-17 20:47:05 372

原创 Verilog 学习第二节(语法学习与应用,led跑马灯)

3:写法二中新填了一个计数器count计数为8,关于else if位置对7的判断地方,自己的逻辑思考中是要有的,但是其实可以直接一直加1,因为3位的计数器再加1的时候会产生溢出,保留位置的值仍是000,可以简便写法不去判断。4:有的时候出现灯的情况和自己理想状况不一样的时候可以看看是不是在写0000_0001的时候忘记在前面加上8’b了如果不加其默认可是为系统宽度十进制的数的,要注意!5:参数化的写法不只是用于仿真中,也可以在其他模块例化的时候进行重新赋值等等的使用。

2023-02-17 16:56:27 1053

原创 Verilog 学习第二节(设计一个以1s频率闪烁的LED灯)

注:虽然以下的代码仿真验证都有效,但是我个人觉得还是不是最完美的代码,自己还需要学习,因为if后面没有else,以及if else后面没有else感觉会生成多余的电路元件,自己进行了测试见文末好像也没有很大区别(再议)eg:如果要计数4次,则需要的是0-1,1-2,2-3,3-0,0-1这样的循环;的时候就可以了,不要记到整,因为它还需要进行个归零状态也需要一次时钟计数。同时不要忘记设置复位按钮,有了以上的思考就可以开始编写代码了~能够保存一定时间的数据,所以在设置的时候要设置成。

2023-02-15 14:48:30 3074

原创 Verilog学习第一节(基于vivado基本编译流程以及3-8译码器简单实现)

3:综合工具(由专业的EDA软件进行,Quartus,Vivado,ISE),对所写的逻辑描述内容进行分析,并得到逻辑门级别的电路内容。2:行为级仿真和时序级仿真是有区别的,时序级别仿真可以看出输入改变的时候输出并不会立即改变因为有延时,感觉可以进行延迟测试观察~4:功能仿真(使用专门的仿真工具进行仿真,验证设计的逻辑功能能够实现)仿真是理想情况,可靠度不是那么高,不要依赖仿真XXX。7:板级调试:让设计的逻辑在目标板上正常工作,(功能正常,性能稳定)6:分析性能:1)时序仿真(非常耗费时间)。

2023-02-14 22:13:26 1607

原创 剑指 Offer II 004. 只出现一次的数字

注意:本题与主站 137 题相同:https://leetcode-cn.com/problems/single-number-ii/给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。请你找出并返回那个只出现了一次的元素。链接:https://leetcode.cn/problems/WGki4K。nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次。输入:nums = [0,1,0,1,0,1,100]输入:nums = [2,2,3,2]

2022-10-05 17:00:42 89

原创 剑指 Offer II 001. 整数除法

给定两个整数 a 和 b ,求它们的除法的商 a/b ,要求不得使用乘号 ‘*’、除号 ‘/’ 以及求余符号 ‘%’。注意:整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231−1]。本题中,如果除法结果溢出,则返回 231 − 1输入:a = 15, b = 2输出:7。

2022-10-05 16:58:39 117

原创 牛客网动态规划练习专项版二(C++)

在第3天(股票价格 = 2)的时候买入,在第6天(股票价格 = 7)的时候卖出,最大利润 = 7-2 = 5 ,不能选择在第2天买入,第3天卖出,这样就亏损7了;1:采用压栈的方式,左括号入栈,右括号则对当前栈内进行判断,为空怎么样,不为空怎么样,最后使用res进行记录,记得不要忘记设置start为-1即遍历的前一个,同时入栈的是序号而不是左右括号。如果 str10~i-1 已经编辑成了 str20~j-1,只需要将 str1i 替换为 str2j 可以完成转换,代价为 dp[i-1][j-1]+rc。

2022-09-12 13:44:49 130

原创 牛客网动态规划练习专项版一(C++)

a. 如果两种跳法,1 阶或者 2 阶,那么假定第一次跳的是一阶,那么剩下的是 n-1 个台阶,跳法是 f (n-1);如果 s [i-1] == ‘0’,dp [i] = 0,否则 dp [i] = dp [i-1];如果 s [i-1] == ‘2’&& s[i]

2022-09-12 00:29:46 164

原创 oj练习1

1:学会了多组string输入,

2022-09-09 16:34:57 139

原创 最小生成树(prim算法和Kruskal算法)(C++)

,所以这里想要用最大距离作为判断的时候,直接写INT_MAX,会都赋值为-1,这里采用,都设置成0x3f的方法,最终和它define的INF进行比较,若相等则代表并不能生成最小生成树~1:学到了关于memset(vis,0,sizeof(vis));初始化函数的使用,只有设置成0,才是都初始化为0,其他的如果写10,并不会像我们理想状态都设置为10 的(2:关于vectora作为函数参数的调用方法自己还是不是很会,只能设置成全局变量,希望在未来的学习中可以知道是为什么?

2022-09-05 23:25:52 317

原创 无向带权图求两个节点之间的最短路径(C++)

1:大概应该好像学会了dijkstra算法,首先依据给的节点之间的关系建立双向映射,然后依次从起点起开始遍历,每个节点只能遍历1次,找到依据当前节点从初始位置到达下一位置是否会变小,如果变小了则说明路径较好,入队列,同时最小堆的好处可以使得对于每一个元素,取到的都是最小值更新好的避免了很多次的重复比较。

2022-09-05 16:13:26 1856

原创 图的遍历应用(C++)

1:这是自己做的第一道图的题,感觉好像和自己学习中学到的C语言写的图有丢丢区别,原来可以使用位置i表示一个节点,然后vector数组中的元素值表示节点连接的位置,这样也表示出来了一个图的样子,然后使用深度优先搜索添加路径,因为最开始已经有一个固定的值0,所以在最开始提前添加,然后仍然通过,循环和递归的方法实现回溯添加路径(这里自己好像感觉,如果想要获得路径的话,就要使用循环和递归的方法,单纯的递归有时好像会出现数组空等的问题)解释:总共有 2 门课程。并且学习课程 0 之前,你还应先完成课程 1。

2022-09-05 16:00:47 632

原创 双队列实现栈&&最小栈&&逆波兰式(力扣C++)

解法二:class MinStack { /* * 思路:每次入栈 2 个元素,一个是入栈的元素本身,一个是当前栈元素的最小值 * 如:入栈序列为 2-3-1,则入栈后栈中元素序列为:2-2-3-2-1-1 * 用空间代价来换取时间代价 */ private Stack stack;tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数。输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,“著作权归领扣网络所有。

2022-09-02 11:44:55 87

原创 两数相加(C++)

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。商业转载请联系官方授权,非商业转载请注明出处。商业转载请联系官方授权,非商业转载请注明出处。商业转载请联系官方授权,非商业转载请注明出处。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:l1 = [2,4,3], l2 = [5,6,4]解释:2-2 = 1/22 = 1/4 = 0.25。输入:l1 = [0], l2 = [0]

2022-09-01 22:43:26 671 1

原创 大根堆小根堆(C++)

1:学习了如何建堆,以及如何使用堆进行排序,一般使用堆排序都是先建立一个初始堆,然后再一点一点遍历排序,如果想要升序则建立大根堆,想要降序排序,建立小根堆。2:比较重点需要掌握的知识:建堆的时候如果数组的下标是从0开始,则第一个要调整的元素为length/2-1,同时每一个节点的左孩子是2。i+2这点需要注意一下!(因为有的时候会采取以节点数目为判断进行建堆等处理,下标是从1开始~)大根堆和小根堆的建立过程,区别就是在于调整堆的时候谁在上面,谁在下面~...

2022-08-31 12:16:05 1320

原创 栈、队列牛客网(C++)

2:统计一下该题的方法使用优先队列,队列中一直要排序的就是留下最小的值,采用大根堆的方法,队头是最大的元素,对每一个新来的元素如果其小于队里最大的元素,它就可以入队,队里那个即将要第一个出去的元素就出去,遍历完所有元素之后就可以得到队列的就都是最小的元素,而队首要出去的第一个元素就是第K小的元素,队内的元素都是所求的!3:如果要找最大的K个元素,就要采用小跟堆的方法,使得队头是最小的那个,对每一个新来的元素进行比较,如果其比队头大,那么它就可以入队列,最后遍历结束后,队首也是那个第K大的元素!...

2022-08-30 18:45:12 311

原创 归并排序(C++)

1:参考归并排序实现统计数组中逆序对数的方法,通过一个函数实现了归并排序是方法,代码相对来说比较简洁~

2022-08-29 20:59:51 212

原创 N皇后问题(C++)

1:这道题也是一个很经典的题,统计可以有的摆法数,对每一列依次进行深入判断,如果达到了最终的n的深度,摆法数+1,返回,后续的循环继续,只要对应的位置符合条件就可以摆放,然后再继续深入判断~,明白了原理之后个人觉得递归最重要的就是之间传递的参数,拿些参数会随着递归的深入有影响并返还回去。...

2022-08-29 20:21:14 408

原创 递归牛客网(C++)

1:同样是使用递归的方法,但是这次的递归是在每次递归的时候查找对应的前后左右是不是1,是1就代表是一堆把一堆的所有1都变成0,每次的双重循环就是查找位置,从第1次找到一个独立的1开始把相邻的都变成0以后,继续返回查找新的独立的1,这样子就可以把所有的独立的1的个数统计出来就是岛屿的数量~~,这种找到并修改值的算法也是一种思路!一定不要忘记首先排序,另外int型vector初始化的方法vector...

2022-08-29 20:07:51 131

原创 哈希牛客网(C++)

1:这道题应该比较容易想到,遍历两遍数组,一次是统计每个元素出现的次数,另一次就是找到其中出现次数为1的元素并进行记录,记得排序,感觉map和基本的数组好像使用起来也没有什么 区别,大概是具体的大小可以随便控制这里有丢丢不同~......

2022-08-29 18:24:01 162

原创 牛客网排序题(C++)

i++)这里的里面的if3次判断,刚开始一直不懂为什么是这样,后来理解了过后发现真的是巧用,会节省好多代码,此外关于归并排序的应用自己还要再理解理解,稍微懂其中的一点原理,但是还是不能自己手写出来一个归并排序,归并融合递归解这道题对于初次学这种题的自己还是有些难度的,但是也体会到了写代码有的时候不知道为啥,但是真的可以背下来经典的代码,相信随着时间的流逝自己会理解的~如果中间值小的话,那么就修改right为中间值,进行靠拢!...

2022-08-29 18:09:24 260

原创 链表牛客网中等、较难题(C++)

8:多个头节点有的时候就是为了维护同一个链表,所有通常情况下都是不对head直接进行操作的,需要进行保留,只要少部分递归的情况需要直接用head,再者就是pre节点,最后返回pre->next的问题,虽然最开始定义的是pre->next=head, cur=head但是并不代表最终运算完返回pre->next还是等于head了,因为head会一直不变,但是pre->next也许会根据实际情况为空也是可能的,还是要看代码编写情况再确定!1:这道题不是自己写的,题解用递归的思想实现,很方便,自己也理解了~...

2022-08-26 23:21:40 653

原创 链表牛客网简单题(C++)

1:这道题最开始自己的想法是先统计一下有多少个节点,然后再重头遍历到n-k个,但是相比于答案的一个快链表一个慢链表,直到快链表遇到结尾停止,慢链表就是所求位置的方法,会慢一些时间,这也可以理解为用空间换时间吧~

2022-08-20 21:15:26 334

原创 序列化与反序列化二叉树(C++)

1:又巩固了一遍二叉树的创建过程已经先序遍历输出的过程(遇到的一个小问题就是在创建二叉树的时候判断直接进行返回了没有进行root=NULL:的赋值,这里最开始弄得还不是很透彻。3:对字符串的相关操作更加熟悉了一些,以及地址(*str)++等的操作和**str的意思等~(后期还要继续巩固使用)2:在使用to_string()函数的时候报错了,因为了编译器不支持的问题,参考了网上的博客进行了修改~......

2022-08-15 12:36:49 365

原创 二叉树与双向链表&&重建二叉树&&输出二叉树的右视图(牛客网C++)

1:学会了根据先序遍历和中序遍历创建二叉树~(或许可以自己尝试一下已知中序和后序遍历的结果创建应该是什么样子的)1:学会了用递归遍历的方法遍历二叉树并和链表相结合~2:练习了用层次遍历的方法统计最右面的右视图~2:能够自己默写下来并进行后期的应用~1:将前面学到的建树方法进行应用~...

2022-08-15 12:29:22 305

原创 判断是不是二叉树搜索树&&在二叉树中找到两个节点的最近公共祖先&&按之字形顺序打印二叉树(力扣C++)

1:这题最开始自己是想要或许可以使用双向队列根据层次进行判断的,但是后来发现原来可以直接遍历之后依据层次之间翻转就可以了,就觉得这就简单多了(有时间或许可以试一下双向队列的方法多多练习嘛~)1:二叉搜素树有一个特点,不仅是便于搜索,而且中序遍历的值都符合前一个小于后一个的特点,如果不符合就不是,因此可以使用递归的方法进行实现。1:收获还是递归吧,感觉递归的思想解决问题很简单,但是真的很抽象,希望自己可以多理解理解吧~2:又温习了一遍层次遍历创建树的过程,记得赋值NULL。4:有关递归又有了更深的理解~...

2022-08-14 00:18:42 84

原创 牛客网简单题二叉树(训练2)

这道题分别求路径,然后再重新遍历找到最后一个相同的点是我没想到的,因为忽略了二叉搜索树的本质即找到一个值的路径只能有一条~,这点自己没想出来。这道题学会的一个是将以后的知识进行应用,自己会求最大深度,但是就是没会双层利用,判断每一个二叉树的左右子树的深度并进行判断是不是平衡二叉树。摆出一个大神的解法,真的佩服~(代码简化任重而道远,先学会思路吧)......

2022-08-12 19:41:21 1451

原创 牛客网二叉树简单题(训练1)

这道题的求解很巧妙,最开始我想的是先求其镜像树,然后再依次遍历有点像入栈的意思,以相同的顺序遍历查看是否每一个位置是否相同(还没有具体实现,估计思路应该差不多,当时没有想到递归&&flase的值可以永远传递这个思想,有时间可以试一下)这道题主要是记得创建一个新节点,然后对其左孩子和有孩子分别递归赋值,最后返回的思想。这道题的思想与上一题的差不多都是创建新节点递归赋值返回~就是刚开始的判断有丢丢区别。学习这种将sum值传下去,递归return相减的方法。有关基本二叉树的创建查看。......

2022-08-12 18:37:43 244

原创 二叉树的创建(内含层次遍历创建、递归创建方法)(C++)

2:二叉树的递归和层次遍历都是刚开始判断第一个节点是否为空则可以确定该树是否为空,但是中序和后序遍历创建的时候不可以,因为先要找到最左部才是第一个访问节点(这里本来的理解有错误,之前以为递归创建是先序创建,后来发现还是理解为递归的形式比较好,因为已知先序、中序、后序遍历任何一种方法都无法明确一棵树的形状)是一个意思,即层次遍历和前序遍历创建的时候都需要注意(使用树的其他节点left和right的时候都需要先把树创建完成)...

2022-08-12 16:35:22 545

原创 判断是否是满二叉树、完全二叉树以及二叉树的最大深度(两种方法)和最小深度(C++)

1:自己又默写了一遍二叉树的创建流程,相比于昨天顺利了许多,但是还是有一些小细节自己没有记牢,比如判断空指针的时候把-1加了个引号,使得输入一直没有停止,以及忘记给root->val赋值,真的要时常温习~=nullptr的判断,在codeBlock对应的编译器会报错,这个要注意需要一定的配置,这里没有进行配置就稍微更改了些思路。2:重写了层次遍历的算法解决了对应的判断是否是满二叉树、完全二叉树的例子,对层次遍历有了更深的理解~.........

2022-08-10 15:49:11 315

空空如也

空空如也

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

TA关注的人

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