- 博客(18)
- 收藏
- 关注
原创 STM32学习——硬件IIC调试遇到的问题
是先烧录进正确的程序,然后拔掉所有电源,让EEPROM断电一次,最后再次开机,自动运行正常程序,这样就可以了,否则会发生一些灵异BUG,比如两次烧录一样的程序,结果不一样,等等,这是由于外设没有复位导致的。这种状态的产生多半是因为在程序中,EEPROM还没有写入完毕就进行了读取。这种情况的产生很有可能还是在EEPROM正在写入的时候,提前开始了读取。然后再次运行正确的代码,在写入的时候就会卡在EV5,出现问题1。EEPROM进入了一种状态,无法回复起始位的请求,运行Debug的时候,卡在EV6。
2024-01-05 17:39:31 1209
原创 虚拟机使用心得——文件拷贝失败
在使用虚拟机的时候我们一般会装上VMTools,这样可以方便在物理机和虚拟机之间拷贝文件,但是有时候会遇到拷贝文件失败卡死的情况,找寻很久无法解决,最后发现可能是文件路径的问题,贴在这里供大家搜索。很有可能导致文件路径超过260个字符的最长限制,这就会导致文件无法复制到虚拟机,我们需要精简目录或者解开这个限制,这里我选择精简目录。虚拟机文件拷贝失败/虚拟机拷贝卡死/虚拟机卡死/虚拟机复制卡死/文件目录过长。用软件查看这个文件夹的深度实在是太深了,目录名太长了。
2023-12-13 17:32:16 552
原创 ZYNQ学习:Verilog语言心得(九)
通过上面两个例子我们可以看出,如果不把sys_clk在tb中写成阻塞赋值就会带来大量的麻烦,时钟和其他信号总是同时到来,需要反复思考上升下降沿,信号的值到底是什么,这样非常费脑子,而且会导致大量的错误,所以我们要把时钟写成阻塞赋值,总是时钟第一个到,其他突变的量全部取值为之前的值,这样就很好判断了。
2023-11-30 16:58:37 186
原创 ZYNQ学习:Verilog语言心得(八)
1.当敏感事件被触发的时候,可能有很多信号处于跳变状态,这时候,判断他们的值需要分析2.当敏感信号上升或下降沿被触发的时候,在语句块内,该跳变信号的值是跳变后的值3.当敏感信号上升或下降沿被触发的时候,在语句块内,其他所有跳变中输入信号的值是跳变后的值4.当敏感信号上升或下降沿被触发的时候,在语句块内,其他被always赋值的输出信号,是跳变前的值,这是因为always语句并行执行,先把所有always的右值算出来然后再放到左边,不同always之间没有优先级。
2023-11-29 12:44:58 178
原创 ZYNQ学习:Verilog语言心得(七)
发现额外的分号,这在系统Verilog语言中是允许的,但是Verilog中不允许这样做。在使用整行编辑的时候不小心把分号多写了一行,这样是无法通过编译的。在编写tb文件的时候遇到一个报错,提示。
2023-11-24 12:02:37 130
原创 ZYNQ学习:Verilog语言心得(六)
结论一个always块内使用非阻塞赋值,对同一变量多次赋值,从时间上来看是并行的,但是从结果上来看,会采用最后一次赋值,在编写代码的时候应当避免这种无效多次赋值,这样会导致逻辑混乱。当 always语句中对变量反复赋值的时候,会发生什么后果?1.LED[0],并没有翻转两次而是只反转了一次。2.LED[1],取了最后赋的值0。3.LED[2],取了最后赋的值z。
2023-11-23 17:41:30 61
原创 ZYNQ学习:Verilog语言心得(五)
虽然前面进行了赋值,但是这里还在过程块内,并行执行的过程块并不知道key_f的值,所以右侧是未定状态,在过程块结束后,key_f被赋值两次第一次是1,第二次是未定,以最后一次为准,所以前面全是未定状态。else}组合,是合理的,如果写了大量{if else if。但是这里继续运行后面的if,前两项if计数器因为程序刚开始,计数器初值都赋的是0,所以没有进入if,直接进入最后的else。2.在一个always块中,前面对一个变量赋值之后,后面是无法调取变量的最新值的,调取的还是上一次的值,需要注意。
2023-11-23 16:33:57 70
原创 ZYNQ学习:Verilog语言心得(三)
这需要通过一些实验来证明。所以,逻辑是这样的:因为“两个信号同时触发了” ==> 进入了always块 ==> 进入后第一行要求判断clk的电平 ==> 因为输入信号。3.关键的90ns处,时钟处于上升沿,rst处于下降沿,同时满足了触发always块的条件,所以进入了always块,这里需要注意,编写RTL代码,输入是系统时钟和复位,输出是一个LED灯,模块中还包含了一个计数器,用来测试always块被进入了几次。1.对于多个敏感信号触发的always模块,如果条件同时满足,将只会执行一次块内代码。
2023-11-23 14:44:56 169 1
原创 ZYNQ学习:Verilog语言心得(二)
4.led_2的逻辑是每次时钟上升沿触发时,都把自己的值变成led_0的值,我们观察到led_2的值一直“滞后”led_0一个周期,这是因为时序逻辑的特点,也就是说当敏感事件触发,执行always块的时候,除了该信号本身,所有此时此刻正在跳变的被always赋值的值都取跳变之前的值。3.led_1的逻辑是时钟信号触发敏感事件时,led_1的值变为时钟信号的电平,led_1后续一直是高电平,证明了时钟信号作为敏感事件被触发的时候,在语句块内,该信号都是高电平。输出是一个三位的LED信号。
2023-11-20 18:52:47 89
原创 ZYNQ学习:VIVADO使用心得(一)
可以成功实现,没有问题,所以关键在于没有更新综合设计,网上搜了很多都不是这个问题,把这个报错贴在这里希望同样问题有人能搜索到。的确有线没有连接,这是由于约束文件更新,但综合过时导致的。也就是说,我们只更新了约束文件,没有进行新的综合。在开发时遇到了一大堆错误,但是代码没有问题,这是由于VIVADO使用错误导致的,记录一下。下面我们来试一试推荐的方法,就是提示告诉我们的,为了避免重新综合你可以点击强制更新。其实上面已经有英文提示,说综合可能过时了,这时候我们就需要重新综合。重新开始综合,综合完后再重新实现。
2023-11-02 17:30:03 2060
原创 ZYNQ学习:Verilog语言心得(一)
可以观察到根据计数器产生的信号也都延后了计数器一拍,这说明我们不能这样基于一个计数器设计,需要每个信号重新计数,每个信号只延后rst_n和ram_en一个周期。可以看到ram_we信号滞后了一个周期才开始工作,观察RTL代码可以发现,我们使用always赋值语句块来实现的ram_we,所以在这里信号延后了。1.使用always判断时钟上升沿来临时,如果改语句块内进行了判断,则判断信号的电平是该时刻之前的电平,这会导致赋值延后一个周期。,即ram_en为低电平,所以触发if语句,ram_we为低电平。
2023-11-01 17:00:11 177
原创 ZYNQ学习笔记:基本介绍
即可编程IO单元,可以设置引脚特性。Zynq 上的通用输入/输出功能(IOB)合起来被称作 SelectIO 资源,它们一般被组织成 50 个 IOB 一 组。每个 IOB 有一个焊盘,是与外部世界连接来做单个信号的输入或输出的。每个 IOB 还包含一个 IOSERDES 和 IODELAY 资源,可以做并行和串行数据的可编程转换。
2023-09-15 15:46:18 1071
原创 Windows开发虚拟机环境搭建
在开发多个项目的过程中,如果将所有开发环境都安装在一台物理机上,就会导致物理机软件安装过于繁杂,可能导致冲突。C盘一旦重装,很多专业软件随之也用不了了,所以需要搭建虚拟开发环境,保证开发环境的纯净,确保系统可以简单移植和交接。
2023-09-11 18:12:19 458
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人