自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 小梅哥Xilinx FPGA学习笔记22——ip核之FIFO

FIFO 本质上是由 RAM加读写控制逻辑构成的一种先进先出的数据缓冲器,其与普通存储器RAM的区别在于FIFO没有外部读写地址线,使用起来非常简单,但FIFO只能顺序写入数据,并按顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址,不过也正是因为这个特性,使得FIFO在使用时并不存在像RAM那样的读写冲突问题。根据 FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO。同步FIFO。

2024-01-09 22:03:43 1171

原创 小梅哥Xilinx FPGA学习笔记21——IP核之RAM实验

存储器的分类在了解RAM IP核之前,我们先来看下存储器的大致分类,如下图所示:由上图可知,存储器包括随机存储器和只读存储器,随机存储器包括。

2024-01-05 16:39:57 1183

原创 小梅哥Xilinx FPGA学习笔记20——无源蜂鸣器驱动设计与验证(音乐发生器设计)

从波形上可以看出,循环音乐循环播放之间有一定的时间间隔,这个与设计预期是一致的。可以放大波形后看,其波形也是与预期设计是一致的。有的两个连续的音符上面带弧线,表示连音,可以稍微改下连音后面那个音的频率,比如减少或增加一些数值(需自己调试),这样表现会更。由上图可知,当信号周期一定,信号高电平时间所占信号周期的百分比不一样,即为不同占空比的。信号的频率,并将同时影响输出占空比,而在预重装值确定的情况下,修改输出比较值,则可以设置。计数值与用户设定的比较值的大小,根据比较结果来控制输出信号的电平高低。

2024-01-04 16:44:51 1171

原创 小梅哥Xilinx FPGA学习笔记19——IP 核使用之 ROM

ROM 是只读存储器()的简称,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除,且资料不会因为电源关闭而消失。而事实上在FPGA中通过IP核生成的ROM或RAM,调用的都是FPGA内部的RAM资源,掉电内容都会丢失(这也很容易解释,FPGA芯片内部本来就没有掉电非易失存储器单元)。用IP核生成的ROM模块只是提前添加了数据文件.coe格式),在FPGA运行时通过数据文件给ROM模块初始化,才使得ROM。

2023-12-28 17:32:18 2798

原创 小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

IPIntellectual Property)即知识产权,简言而之,IP即电路功能模块。IP核在数字电路中常用于比较复杂的功能模块(如FIFORAMFIR滤波器、SDRAM控制器、PCIE接口等)设计成参数可修改的模块,让其他用户可以直接调用这些模块。IP核有三种不同的存在形式:HDL 语言形式---(软核)硬件描述语言;可进行参数调整、复用性强;布局、布线灵活;设计周期短、设计投入少网表形式---(固核)完成了综合的功能块;

2023-12-27 17:04:56 2239

原创 小梅哥Xilinx FPGA学习笔记17——模块化设计基础之加减法计数器

在相对大一点的工程设计过程中,设计内容通常不会写在一个设计文件而是会针对不同的功能设计出不同的子文件,最后在顶层文件中再进行例化调用。在上面设计并验证了独立按键的消抖,这里基于上一讲的按键消抖模块,利用 EDA 扩展板来实现一个加减法、移位计数器,实现每次按下按键。在后面章节中将利用第四章编写好的独立模块,组合起来设计一些应用性较强的项目,进一步理解模块化设计方式的优点。控制模块,其模块间的连线如下图所示,这里的 key_in0~3。,8 个 LED 显示状态以二进制加法格式。

2023-12-26 17:04:17 438

原创 小梅哥Xilinx FPGA学习笔记16——FSM(状态机)的学习

一、 状态机导读状态机大家一定都听说过,为什么需要状态机呢?通过前面的学习我们都知道FPGA 是并行执行的,如果我们想要处理具有前后顺序的事件该怎么办呢?这时就需要引入状态机了。本文将从原理、实例、应用为大家总结了状态机设计和实现的方法。1.1 理论学习状态机简写为FSMFinite State Machine),也称为同步有限状态机,我们一般简称为状态机,之所以说“同步”是因为状态机中所有的状态跳转都是在时钟的作用下进行的,而“有限”则是说状态的个数是有限的。

2023-12-26 11:12:32 1155

原创 ZYNQ 7020 之 FPGA知识点重塑笔记一——串口通信

通信方式一般分为串行通信和并行通信。并行通信是指多比特数据同时通过并行线进行传送。这种传输方式通信线多、成本高,故不宜进行远距离通信,通常传输距离小于 30 米。串行通信是指数据在一条数据线上,一比特接一比特地按顺序传送的方式。这种运输方式通常节省传输线,大大降低使用成本,但数据传送速度慢。综上可知,串行通信主要应用于长距离、低速率的通信场合。本次实验我们主要讲解下串行通信。串行通信一般有2种通信方式:同步串行通信和异步串行通信。同步串行通信。

2023-12-25 21:01:35 1616

原创 小梅哥Xilinx FPGA学习笔记15——基于SPI接口的ADC芯片驱动

ADC(Analog to Digital Conver),通常是指一个将转变为数字信号(二进制表示的离散信号)的转换器。先将输入模拟电压转换成时间或频率,再把中间量转换成数字量双积分型 ADC,先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。抗干扰能力强,稳定性好,但转换速度低。①并联比较型 ADC,采用各量级同时并行比较,各位输出码也是同时并行产生,转换速度快。缺点是成本高、功耗大。

2023-12-12 11:01:01 1713 1

原创 小梅哥Xilinx FPGA学习笔记14——基于74HC595动态扫描数码管显示

74HC595 是用于 CMOS 应用的 HC 系列逻辑器件中的一部分。74HC595 器件包含对8位 D 类存储寄存器进行馈送的 8位串行输入/并行输出移位寄存器。移位寄存器时钟(SRCLK)和存储寄存器时钟(RCLK) 均为正边沿触发。如果将两个时钟连接在一起,则移位寄存器始终比存储寄存器早一个时钟脉冲。

2023-12-08 19:29:05 324

原创 小梅哥Xilinx FPGA学习笔记13——动态数码管显示

根据这两种现象我们可以想到,如果让数码管轮流显示,而且轮流显示速度很快,这样会不会看起来六个数码管都在显示呢?时间,光的作用结束后,视觉影像并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。样我们就可以通过位选信号去控制数码管亮,而在同一时刻,位选选通的数码管上显示的。同了,数码管的这种显示方式即为静态显示。这样我们段选信号点亮的就只是我们选中数码管的值了,那是不是就可以给每个数码管显。在点亮的时间去点亮其他数码管,让其他数码管也达到这样的效果,这样就可以让我们人。

2023-12-06 13:17:13 248

原创 小梅哥Xilinx FPGA学习笔记12——使用状态机实现按键消抖

第二件事是20ms内检测到上升沿,则表明此时处于抖动状态,立即退回空闲状态。第三件事是20ms内未检测到上升沿,就干巴巴的等待20ms,直至20ms结束仍未有上升沿就进入第一件事。第二件事是20ms内检测到下降沿,则表明此时处于抖动状态,立即退回等待状态。第三件事是20ms内未检测到下降沿,就干巴巴的等待20ms,直至20ms结束仍未有下降沿就进入第一件事。,此时按键已经被按下,这个状态要做的事就是一直检测上升沿的到来,如果上升沿没到来就一直待在等待状态,如果一旦检测到上升沿出现,则立即进入。

2023-12-04 22:16:00 373

原创 小梅哥Xilinx FPGA学习笔记11——亚稳态

亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。

2023-12-04 21:21:56 182

原创 小梅哥Xilinx FPGA学习笔记9——串口通信发送逻辑

RS232 通信接口标准,通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输,在数据接收时将接收到的串行数据转换成并行数据,可以实现全双工传输和接收。UART 是异步串行通信的总称(UART 是一种协议)。

2023-11-27 21:35:00 263

原创 小梅哥Xilinx FPGA学习笔记8——从计数器到可控线性序列机

让LED灯按照亮0.25秒,灭0.75秒的状态循环亮灭任务2:让LED灯按照亮0.25秒,灭0.5秒,亮0.75秒,灭1秒的状态循环亮灭以0.25为基本的LED状态变化间隔(最小时间单元)以8小段·为一个循环周期(参考任务二10个小段);LED在每一小段该点亮还是该熄灭由8个输入端口决定。任务4:在任务三的基础上,实现每隔一定时间,比如1秒钟,执行一轮LED8个状态的切换控制。1.case语句,没有列举完的情况,需要加一个默认项列举完//语句1endcase。

2023-11-19 21:22:28 163

原创 小梅哥Xilinx FPGA学习笔记7——语法(阻塞与非阻塞赋值)

1.阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕。2.阻塞赋值语句使用等号 = 作为赋值符。3.前面的仿真中,initial 里面的赋值语句都是用的阻塞赋值。4.阻塞赋值时赋值顺序调换所得到的结果不同。非阻塞赋值:1.非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行。2.非阻塞赋值语句使用小于等于号

2023-11-15 18:11:00 115 1

原创 小梅哥Xilinx FPGA学习笔记6——参数化设计及模块重用设计不同频率的流水灯

8个Led灯分别以不同频率循环闪烁,led[0]0.05s亮一次;led[1]0.1s亮一次;led[2]0.125s亮一次;led[3]0.25s亮一次;led[4]0.5s亮一次;led[5]1s亮一次;led[6]1.25s亮一次;led[7]2s亮一次.1.在主模块led_flicker_8模块中,通过调用子模块单个led闪烁功能,用LED_Flicker_inst0.MCNT 对8个led分别进行闪烁频率配置;并且要注意每一次调用子模块的函数名应当不同,要有唯一性;#(或者。

2023-11-14 21:57:06 102

原创 小梅哥Xilinx FPGA学习笔记5——调用子模块使用三八译码器设计流水灯

8个Led灯以0.5s的的速率循环闪烁,调用三八译码器模块完成该设计。三八译码器模块见小梅哥Xilinx ZYNQ学习笔记2——38译码器-CSDN博客1.调用子模块decoder_3_8的时候,对其端口进行例化.out(Led)//系统自动分配8对应LED输出,并且LED的输出此时是由三八译码器输出决定的,所以不再使用reg型,而应该是wire型2.在LED_Run.v中,输出不需要定义成reg型;

2023-11-14 20:30:07 154

原创 小梅哥Xilinx FPGA学习笔记4——流水灯

1.学习板上晶振为 50MHz,也就是说时钟周期为 20ns,这样可以计算得出 500ms =500_000_000ns/20ns = 25_000_000,即需要计数器计数 25_000_000 次,也就是需要一个至少25 位的计数器(225>25_000_000>224)。且每当计数次数达到需要清零并重新计数。2.可以用"位拼接"{led[6:0,led[7]]}对led进程进行改写;if(!Reset_n)//以下两种写法都可以。

2023-11-13 21:32:52 396

原创 小梅哥Xilinx FPGA学习笔记3——时序逻辑电路设计之计数器(LED闪烁)

时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入形成的状态有关。这跟组合逻辑电路相反,组合逻辑的输出只会跟目前的输入成一种函数关系。换句话说,时序逻辑拥有储存元件来存储信息,而组合逻辑则没有。此处设计一个计数器,使开发板上的 LED 状态每 500ms 翻转一次。1.学习板上晶振为 50MHz,也就是说时钟周期为 20ns,这样可以计算得出 500ms =

2023-11-13 20:59:54 340

原创 小梅哥Xilinx ZYNQ学习笔记2——38译码器

译码器(Decoder)是一种多输入多输出的组合逻辑电路,负责将二进制代码翻译为特定的对象(如逻辑电平等),功能与编码器相反。译码器一般分为通用译码器和数字显示译码器两大类。本设计的是通用译码器。三八译码器,即是 3 种输入状态翻译成 8 种输出状态。1.case开始开始,endcase结束;2.数字声明时,合法的基数格式有 4 中,包括:十进制('d 或 'D),十六进制('h 或 'H),二进制('b 或 'B),八进制('o 或 'O)。数值可指明位宽,也可不指明位宽。

2023-11-08 15:26:33 698 1

原创 小梅哥Xilinx ZYNQ学习笔记1——二选一多路器

1.`timescale 1ns/1ns //时间刻度 前面的1ns是时间单位,后面的代表精度;2.所有程序总是从modbule开始,endmodule结束;a:b;相当于c语言中的if条件判断。4.激励文件中的例化步骤:1)把设计文件 mux2( a,b,sel,out所以的信号);都搬过来,进行在测试平台上面的例化;a.把设计文件mux2( a,b,sel,out所以的信号);都搬过来module mux2( //模块名和端口a,b,sel,out。

2023-11-07 09:29:07 212

原创 树莓派基于Linux内核驱动开发入门指南

写驱动是为了操作IO口,实现自己的wiringpi库,跟硬件打交道。

2023-04-23 13:36:44 1139 2

原创 linux内核结构介绍(面试可能会问)

在没有图形界面之前,shell充当了用户的界面,当用户要运行某些应用时,通过shell输入命令,来运行程序。内核是一个很厉害的超级逻辑,把硬件底层的东西抽象化,对用户来说只需要调API就好了,根本不需要管寄存器,协议,总线…如今,由于图形化界面的普及,终端往往就像下图一样,是一个图形化的窗口。你可以通过这个窗口输入或者输出文本,这个文本直接传递给shell进行分析解释,然后执行,本质就是提供和内核交互的程序。一个操作系统,以及基于操作系统的应用,都不可能实现超越系统调用的功能。

2023-04-16 15:45:08 92

原创 linux文件系统、文件系统目录结构、虚拟文件系统

文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法。根分区/根目录。

2023-04-15 23:06:15 155

原创 树莓派Linux源码配置,内核编译以及内核更换

编译完成后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。我们工作的时候,需要进行驱动代码编写,紧接着对驱动代码进行编译,但驱动代码的编译需要一个提前编译好的内核,编译内核就必须配置。驱动代码的编译需要一个提前编译好的内核,所以需要先编译内核,而编译内核又必须提前完成相关的源码配置;

2023-04-11 21:23:58 1545

原创 Linux交叉编译

编译:是在一个平台上生成在该平台上的可执行代码交叉编译:是在一个平台上生成另一个平台上的可执行代码。● 我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行● 我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行的。

2023-04-10 22:47:28 2651

原创 基于Linux的树莓派和电脑之间的串口通信编程

● 对于USB口而言,是没法和TTL串口直接通信的,因为接口不匹配,电平也不匹配,这时候就需要借助其它设备来实现接口与电平的转换;● 如果需要看串口的打印信息,一般是需要接一个上位机的,常规的就是电脑,而现在的电脑一般的通信接口只有USB;● 常规操作是使用CH340这种芯片所制作的USB转串口模块,这个模块就可以实现TTL串口和USB之前的转换。● 我们常用的单片机,引出来的串口,如果不加其他的接口电路,出来的信号就是TTL电平;● 波特率:好比人的语速,常用的115200,9600;

2023-04-06 16:58:44 1435

原创 用树莓派实现超声波测距

gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中。开始发送波,启动定时器,接收到返回波,停止计时器。计算距离:测试距离=(高电平时间*声速(340m/s))/2。② 计算波在空气中的时间,要尽量统一把时间单位换算成微妙。让它发送波:给Trig端口至少10us的高电平。开始发送波:Echo信号由低电平跳转到高电平。接收返回波:Echo信号由高电平跳转回低电平。计算时间:Echo引脚维持高电平的时间!① 代码编写一定要结合时序图分析过程;

2023-04-05 15:10:34 277

原创 树莓派控制继电器和继电器组

若要控制多个开关元件需要接很多杜邦线,很麻烦,所以要引入继电器组,其实控制继电器组和控制单个继电器操作一样,只是继电器组要多设置一些控制的io口而已!继电器通常应用于自动化的控制电路中,它实际上是用小电流去控制大电流运作的一种“自动开关”。1、DC+:接电源正极(电压按继电器要求,有5V.9V.12V和24V选择)3、NC: == 继电器常闭接口==,继电器吸合前与COM短接,吸合后悬空。1、NO: 继电器常开接口,继电器吸合前悬空,吸合后与COM短接。● 本次用的继电器组是4个继电器组;

2023-04-04 20:37:23 629

原创 【Linux】静态库和动态库的生成与使用

实现一个项目需要实现很多的功能,那么这些功能不可能在一个".c"文件下实现,需要多个".c"文件来共同实现,但是程序的入口只有一个,就体现了分文件编程的重要性。:把生成的动态库文件libtest.so拷贝到/usr/lib/这个路径下,因为它会默认去/usr/lib/下去寻找动态库文件。1,mv xxx.c ~ 将原先的功能文件和生成的.o文件移至工作目录,只留下.h头文件和主函数文件,还有生成的静态库文件。1,将 xxx.c 文件生成 xxx.o 文件:gcc xxx.c -c;

2023-04-04 16:53:34 673 1

原创 树莓派(3B) 系统启动流程 、系统初始化、引脚说明

2023-04-03 20:15:57 496 1

原创 C语言鹏哥编程习题(暂时更新至16题)

3.实现reverse()函数完成数组元素的逆置。2.实现print()打印数组的每一个元素。1.实现函数init()初始化数组全为0。要求:自己设计以上函数的参数,返回值。

2023-04-02 20:28:07 593

原创 冒泡排序法(c语言)

比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数。这样便可以将第二大的数转移到数组的倒数第二位。,比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数。这样便可以将数据中最大的数转移到数组的最后。由于这个循环过程就像泡泡上浮的过程,所以被称为冒泡排序法。以从小到大排序为例,冒泡排序法的思路是:遍历原始数据,之后再次遍历原始数据,但是变为。重复执行上述过程,一直到。,从而完成了排序过程。

2023-03-30 23:00:20 85 1

空空如也

空空如也

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

TA关注的人

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