自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

悟已往之不谏 知来者之可追

年轻人总是要为一些自己认为有意义的事情而废寝忘食,通宵达旦,直至白发方休

  • 博客(39)
  • 资源 (1)
  • 收藏
  • 关注

原创 【SoC FPGA学习】十四、基于 Linux 标准文件 I/O 的设备读写

一、什么是文件 I/OLinux 下的输入输出(I/O),设计成“一切皆文件”,把各种各样的输入输出(I/O)当成文件来操作,统一用文件 I/O 函数的形式,提供给应用程序调用。Linux 下的文件概念不仅仅是我们日常所理解的文件例如 txt 文本、 sh 脚本, Linux 系统下一个目录,一个设备也会被当做文件。尤其是字符设备, 对一个设备的操作, 就像是操作实际的文件一样方便。对于文件,可以执行打开(open)、 读取(read)、 写入(write)、 关闭(close) 等操作,而对于一个设备

2020-08-31 21:11:03 804

原创 【SoC FPGA学习】十一、基于 Linux 应用程序的 HPS 在线配置 FPGA

在众多的嵌入式系统应用中, 有一类应用可能需要根据不同的应用场景,动态的更改 FPGA 内部的逻辑设计, 以适配不同的工作环境。 例如在一个数据采集系统中,连接不同型号的模拟数据采集卡, 其所需要的 FPGA 接口逻辑以及内部的数据变换处理逻辑都有可能不同。不同性能的 ADC 芯片其所能工作的采样率不一样, 即所需的接口时钟频率不一样,而在 FPGA 中针对高速时钟信号希望动态修改频率,传统的方案只能使用多路时钟切换电路, 或者使用PLL 动态重配置方案。 而基于 SoC FPGA 的在系统重配置 FPGA

2020-08-31 10:10:47 2113

原创 【SoC FPGA学习】十三、编译嵌入式 Linux 系统内核

一、简单介绍SoC FPGA 上的 HPS 能够运行标准的 Linux 系统。而 Linux 系统是一个高度可裁剪的系统,支持用户根据自己实际的硬件平台,选择需要的驱动和功能,并编译得到 Linux 系统镜像。 通过此种方式,可以使得编译得到的 Linux系统镜像文件尺寸非常的小,以便于部署到各种嵌入式硬件板卡上。开发基于 SoC FPGA 的嵌入式系统应用, 如果仅仅使用基于虚拟地址映射的方式开发 Linux 应用程序,无需开发 Linux 内核驱动和修改 Linux 内核配置,实际上是可以不用安装

2020-08-30 00:16:11 1972

原创 【SoC FPGA学习】十二、Linux 设备树的原理与编写I2C控制器应用实例

在《【SoC FPGA学习】八、从零开始体验一把为 HPS 添加外设,以 UART 外设为例》章节,学习了如何使用SoC EDS 软件为创建好的包含 HPS 的 Qsys 系统添加 UART 外设并生成相应的设备树(dts) 文件。在《【SoC FPGA学习】十一、基于 Linux 应用程序的 HPS 配置 FPGA》章节,提到了使用开发软件安装包提供的不含 FPGA 逻辑部分的设备树文件来配合启动 Linux 系统。那么什么是设备树,如何得到适配硬件系统的设备树, linux系统又是如何使用设备树信息来加

2020-08-29 22:38:15 1652

原创 【SoC FPGA学习】十、SoC FPGA 开发板的 FPGA 配置数据下载和固化

生成配置数据二进制文件一、SoC FPGA 启动配置方式介绍Intel Cyclone V SoC FPGA 支持在上电时根据启动设置引脚的电平状态选择从 EPCS 或者 HPS 中启动。一般的硬件板卡在设计时,都使用拨码开关来设置启动设置引脚的电平。具体是通过 EPCS 还是 HPS 启动,由一个 6 位拨码开关通过设置不同的值来决定。 下图所示为 AC501-SoC 开发板上的启动设置拨码开关。Cyclone V SoC FPGA 有 5 位的启动设置引脚用于启动方式的设置,为MSEL0~MSEL

2020-08-28 23:01:13 2743

原创 【SoC FPGA学习】九、为新添加的 UART 外设编写应用程序

一、更新hps_0.h文件我们是在 FPGA 侧添加的uart外设,对应的需要更新这些外设的硬件信息。详细介绍可参考《SoC FPGA学习】五、基于虚拟地址映射的 Linux 硬件编程,在已有工程上实现按键与LED的联动》中的4.2小节,这里直接操作。打开 SoC EDS Command Shell,使用 cd 命令切换到对应的 Quartus 工程目录下(即GHRD工程目录),最后在其中输入./generate_hps_0.sh命令以执行 hps_0.h 文件生成脚本,即可在工程目录下生成或更新名为

2020-08-27 17:18:03 777

原创 【SoC FPGA学习】八、从零开始体验一把为 HPS 添加外设,以 UART 外设为例

在本系列教程中 《【SoC FPGA学习】二、SoC FPGA硬件初探,基础扫盲 》一节中的2.5小结简单介绍了一下 SOC FPGA添加timer外设的方法,但是此外设并没有实际的引出脚,并且在那篇文章的介绍中也并没有实际的跑进来timer,这一节我们就拿UART外设为例,从来开始了解添加 SOC FPGA 外设并使用起来的全部流程!本节将通过完全手把手的形式介绍如何修改AC501_SoC_GHRD工程文件,通过在 Platform Designer(原 Qsys)加一个 Altera UART 外设

2020-08-27 16:42:06 4449 2

原创 【SoC FPGA学习】七、基于虚拟地址映射的 I2C 编程应用

在前面两节的内容中, 通过虚拟地址映射的形式,已经完成了基于虚拟地址映射的 PIO、 UART IP 核的使用。这些 IP 核对于使用过基于 NIOS II 的SOPC 技术开发的读者,应该来说已经是十分的熟悉了。而这个 oc_i2c 核,则是一个第三方开源的 IP 核, 不仅提供了完整的 IP 手册, 而且 Linux 系统中也有对该 IP 核的驱动支持。使用起来非常的方便。 而 Intel 在 Platform Designer 中提供的 Avalon I2C (Master) IP 核,由于 Linu

2020-08-26 22:21:52 1456 1

原创 【SoC FPGA学习】番外篇一、SOC FPGA常见问题集锦

小梅哥论坛已有的:【SoC FPGA开发常见问题合集】SoC FPGA开发过程中常见问题问题:SOC-EDS5(Eclipse)出现“You are opening a large file.Scalability mode has been turned on for this editor to help improve performance. Do you want to change scalability settings now?”大意是:打开了一个大文件,编辑器自动启用了可伸缩性

2020-08-26 20:08:23 1311

原创 【SoC FPGA学习】六、基于虚拟地址映射的 UART 编程应用

上一节的实验,完成了虚拟地址的映射和基于虚拟地址的按键和 LED指示灯的编程控制。 本节将继续使用该种方法,完成对 AC501_SoC_GHRD 工程中添加的 uart_0 外设进行控制。一、UART (RS-232 Serial port) 核介绍UART (RS-232 Serial port) 核是 Platform Designer 中提供的一个经典的字符型串行通信外设,使用该外设,能够方便的通 FPGA 片外的设备进行通信。该 IP 核实现了 RS-232 协议的时序,并提供可调整的波特率速度

2020-08-26 19:55:59 1726

原创 【TDA2x学习】番外篇三、VisionSDK开发指南笔记

【TDA2x学习】番外篇三、VisionSDK开发指南笔记

2020-08-24 14:26:28 2136 6

原创 【软件工具使用】高效使用VScode工具

总结的一些高效使用vscode的技巧!

2020-08-24 10:35:23 2223

原创 【TDA2x学习】番外篇一、TDA2x工程学习手记

【TDA2x学习】番外篇一、TDA2x工程学习手记

2020-08-24 10:19:24 1751

原创 【TDA2x学习】V、编译并运行第一个SDK程序(最新版)【包含RTOS和HLOS】

【TDA2x学习】V、编译并运行第一个SDK程序(最新版)【包含RTOS和HLOS】

2020-08-20 17:30:51 1508 9

原创 【C++快速上手】十三、extern学习笔记

总结在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。1、C++与C编译区别在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。C++虽然兼容C,但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载,C++函数编译后生成的符号带有

2020-08-18 19:54:28 242

原创 【SoC FPGA学习】五、基于虚拟地址映射的 Linux 硬件编程,在已有工程上实现按键与LED的联动

参考教程中的以下章节:传统的单片机得到的是外设寄存器的绝对地址。而在HPS中,得到的是经过MPU转化过后的虚拟地址(虚拟地址映射),这样CPU 访问外设寄存器就像直接访问内存总线上的某个地址一样方便了。这样在编写 Linux 应用程序的时候通过简单的操作完成虚拟地址映射,就能够非常方便的去操作这些外设 IP 了,无需再编写 Linux 内核驱动程序, 降低了开发难度。...

2020-08-18 15:45:21 3203

原创 Premiere Pro cc 2019 学习笔记

新建新建项目新建序列自动保存快捷键放大缩小某一个面板:Tab上面那个波浪号(英文)调整时间轴面板:Alt+滚轮;英文状态下按反斜杠\自动调整面板(回车键上面这个键)播放:空格键时间轴序列有不同的轨道,相同时间点上面轨道素材会覆盖下面轨道的素材。图片素材只能在V轨道,音乐素材只能在A轨道撤销:ctrl+z;取消撤销:ctrl+shift+z调节音频的音量:选中时间轴的音频,然后在左上方的那个面板选择音频剪辑混合器时间轴面板的对齐可以让时间轴的素

2020-08-17 20:17:17 791

原创 【C++快速上手】十二、位域学习笔记

总结位域在内存中的布局是与机器有关的位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域1、位域(Bit field)是什么?“ 位域 “ 或 “ 位段 “(Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的一个好处是它可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重要。第二个好处是位段可以很方便的访问一个整

2020-08-17 17:45:17 696 2

原创 【C++快速上手】十一、assert学习笔记

总结断言,是宏,而非函数忽略断言,在代码开头加上:#define NDEBUG1、第一个断言案例断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include 之前。#include <stdio.h>#include <assert.h>int main(){ int x = 7; /* 中间的

2020-08-17 17:28:29 327

原创 【C++快速上手】十、volatile学习笔记

总结volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)const 可以是 volatile (如只读的状态寄存器)指针可以是 volatile1、volatile被 volatile 修饰的变量,在对

2020-08-17 17:22:22 319

原创 【C++快速上手】九、virtual学习笔记

结论虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。默认参数是静态绑定的,虚函数是动态绑定的。 默认参数的使用需要看指针或者引用本身的类型,而不是对象的类型。1、虚函数与运行多态虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。#include<iostream>using namespace std;class Employee{public: virtual void raiseSalary() {

2020-08-17 16:56:59 467

原创 【C++快速上手】八、C++虚函数的vptr与vtable学习笔记

结论C++的动态多态性是通过虚函数来实现的;为了实现虚函数,C ++使用一种称为虚拟表的特殊形式的后期绑定每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表(vtable)编译器还会添加一个隐藏指向基类的指针,我们称之为vptr类指针调用函数通常使用->操作符;引用调用函数通常使用.操作符。两种实例与调用函数的方法通过指针:Base *pt = new Derived();,调用时通常是:pt->fun1();这样的形式直接实例:Base base,调用时通常是:p

2020-08-17 15:51:22 422

原创 【C++快速上手】七、纯虚函数和抽象类学习笔记

总结纯虚函数(或抽象函数)是我们没有实现的虚函数!我们只需声明它,通过声明中赋值0来声明纯虚函数!纯虚函数:没有函数体的虚函数;抽象类:包含纯虚函数的类,不能创建对象。抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,可以创建抽象类的指针和引用。抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数。如果一个类从抽象类派生而来,它必须实现了基类中的所有纯虚函数,才能成为非抽象类。重要点纯虚函数使一个类变成抽象类抽象类类型的指针和引用如果我们不

2020-08-17 11:51:28 304

原创 【C++快速上手】六、sizeof学习笔记

总结原则1:空类的大小为1字节原则2:一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间。原则3:对于包含虚函数的类,不管有多少个虚函数,只有一个虚指针vptr的大小。原则4:普通继承和派生类继承了所有基类的函数与成员,要按照字节对齐来计算大小原则5:虚函数继承,不管是单继承还是多继承,都是继承了基类的vptr。(32位操作系统4字节,64位操作系统 8字节)!原则6:虚继承,继承基类的vptr原则1:空类的大小为1字节#include<io

2020-08-17 10:57:28 261

原创 【C++快速上手】五、inline学习笔记

结论inline要起作用,inline要与函数定义放在一起,inline是一种“用于实现的关键字,而不是用于声明的关键字”内联能提高函数效率,但并不是所有的函数都定义成内联函数!内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果代码执行开销大于函数调用开销,那么这个时候不宜使用内联。1、类中内联头文件中声明方法class A{public: void f1(int x); /** * @brief 类中定义了的函数是隐式内

2020-08-17 10:27:18 270

原创 【C++快速上手】四、this指针学习笔记

结论this在成员函数的开始执行前构造,在成员的执行结束后清除。类的成员默认是private,而结构是public1、this指针的作用python中的self类比到C++中就是this指针,this指针的用处如下:(1)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。(2)this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译

2020-08-17 10:15:05 260

原创 【C++快速上手】三、static学习笔记

结论类中的静态变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。也是因为这个原因,静态变量不能使用构造函数初始化。当与不同类型一起使用时,Static关键字具有不同的含义,常用的用法有以下两种:1、静态变量:函数中的变量,类中的变量2、静态类的成员(静态成员):类对象和类中的函数1、静态变量1.1、函数中的静态变量当变量声明为static时,空间将在程序的生命周期内分配。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。这对于在C

2020-08-17 09:36:48 343

原创 【C++快速上手】二、const学习笔记

结论未被const修饰的变量不需要extern显式声明,而const常量需要显式声明extern!const修饰的变量必须初始化!const *表示指针指向为常量,* const表示指针本身是常量!1、const含义常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。这里的对象是广义的对象,不单单指类的对象。比如int a = 3,此处a也可以称为对象,通常将之称之为普通对象。2、const作用2.1、可以定义常量const int a=100;

2020-08-16 16:01:34 483

原创 【C++快速上手】番外篇二、知识点总结(持续更新...)

重载和多态的区别重载是同名参数不同,通过参数来确定调用那个函数;多态是同名同参数,通过函数的实际类型决定调用那个函数。默认情况下,在类中定义的所有项目都是私有的。类根据访问权限总结出不同的访问类型多继承多继承即一个子类可以有多个父类,它继承了多个父类的特性。C++ 类可以从多个类继承成员,语法如下:class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…{<派生类类体>};

2020-08-16 14:54:06 283

原创 【C++快速上手】一、CLion环境搭建,HelloWorld初探(windows10 + Ubuntu)

MinGW,Cygwin是什么?什么区别?一、下载安装CLion前往JET BRAINS官网下载CLion下载完毕后的安装包,如下图所示。双击安装包,依次按照如下步骤进行安装二、下载MinGW,配置CLion前往MinGW下载主页,点击下图所示选项,进行下载D:\CLionEnvironment\mingw64其余路径会自动检测输出结果如下...

2020-08-11 13:06:06 1899

原创 【C++快速上手】番外篇一、Tip of the day in CLion(持续更新...)

记录CLion的一些Tips!

2020-08-11 13:05:01 331

原创 【SoC FPGA学习】四、使用gdbserver远程调试Linux应用程序

gdbserver调试实验保证电脑能够网络访问开发板配置IP地址有两种方式:ifconfig eth0 192.168.×××.×××或者编辑/etc/network/interfaces使用passwd命令为root账号设置密码将希望调试的程序拷贝到开发板中为程序添加可执行权限 chmod 777 hello_world在DS-5软件里面设置调试相关配置debugger - gbdserver选择gdb.execonnect:tcp ip address在开班上启动调

2020-08-05 21:52:23 972 2

原创 【SoC FPGA学习】三、通过Hello World快速上手SOC FPGA的应用程序开发

Hello world创建流程打开SoC EDS Command shell软件输入eclipse&file -> new -> C project创建main.c文件编写c程序编译可得到可执行程序制作开发板Linux系统镜像SD卡将编译得到的可执行程序拷贝到开发板的SD卡用Micro USB数据线连接开发板和电脑将SD卡插入开发板的卡槽中查看电脑上的串口号,打开putty软件,打开该串口,波特率115200给开发板上电输入root进入系统查看分区 fdis

2020-08-05 19:27:13 2631 2

原创 【SoC FPGA学习】二、SoC FPGA硬件初探,基础扫盲

FPGA:现场可编程逻辑门阵列编程语言:HDL(Verilog VHDL)FPGA - 高效并行执行FPGA和ARM可以互补Intel PSG(原ALTER)SOPC:(NIOS II + FPGA)通过Avalon MM 以及 Avalon ST总线进行通信SOPC是使用FPGA做CPUSoC FPGA:同一个芯片集成了FPGA和高性能的硬线逻辑固话的处理器Cyclon...

2020-08-05 11:43:57 6286 2

原创 计算机中字符的编码方式

一、编码背景在计算机上,我们看到的字符“A”可能长这样:也可能长这样:对于同一个TXT文件中的内容,你在Notepad上选择不同字体时,字符显示的形状不一样。所以TXT文件中保存的是字符的核心:它的编码值。而Notepad上显示时,这些字符对应什么样的形状态,这是由字符文件决定的。编码值,字体是两个不一样的东西,比如A的编码值是0x41,但是在屏幕上显示出来时可以使用不同的形状。什么叫编码?就是一个字符用什么数字来表示。在计算机里一切都是用数字来表示,比如字符A,用0x01还是0x02来表示它

2020-08-04 21:11:00 1886

原创 【ZYNQ学习之FPGA开发】零、ZYNQ硬件初探

ZYNQ All Programmable SoC赛灵思(Xilinx)推出的新一代全可编程片上系统,它将处理器的软件可编程性与FPGA的硬件可便乘兴进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。ZYNQ旨在为视频监控、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理能力与计算性能。这款基于ARM处理器的SoC可满足嵌入式系统的高性能、低功耗和多核处理能力等要求.S...

2020-08-02 20:21:58 2200

原创 【Verilog基础】一文快速上手 Verilog 基础知识(总结版)

一、FPGAPLD - 可编程逻辑器件CPLD - 复杂可编程逻辑器件【基于乘积项的与或逻辑阵列】FPGA - 现场可编程逻辑门阵列【基于查找表的CLB阵列】两者虽然有差异,但也只是硬件层面,在编程上是没有区别的!什么是FPGA?一种可通过编程来修改其逻辑功能的数字集成电路(芯片)与单片机的区别?单片机并不改变电路的内部连接结构,只是根据要求实现的功能来编写运行的程序(指令)二、HDL数字系统设计流程?逻辑设计(前端)-> 电路实现(后端) -&

2020-08-02 11:47:54 2998 1

原创 【FPGA基础】基于 Vivado 2017.4 的FPGA开发流程

文章目录一、创建LED工程二、创建设计源文件三、RTL分析,进行引脚绑定四、synthesis - 综合五、时序约束六、生成比特流文件七、仿真八、下载验证PL设计九、内嵌逻辑分析仪9.1、方法一9.2、方法二一、创建LED工程打开位于桌面的vivado 2017.4快捷方式选择Create Project创建工程当然也可以使用File->New Project创建工程出现下图所示界面,直接Next即可选择工程名字和位置,注意勾选创建子文件夹。然后选择工程类型,选择RTL

2020-08-01 18:27:40 3579

原创 同一局域网下的两台电脑使用网线高速传输数据(基于Windows10)

需求在日常生活过程中,我们时常面临这样的需要:把一台电脑的文件数据拷贝到另一台电脑上。如果文件数据并不大,利用网络传输或者U盘拷贝就可以很好地解决这个问题。但我们也难免会碰上要拷贝的文件太大,没有足够大的移动硬盘或者传输速度太慢,如需要置换新电脑时的文件复制。这个时候,考虑使用网线传输就是一个很好的办法,传输速度也能达到几十兆每秒。首先我们需要用网线将两台电脑相连,并手动设置两台电脑的IP,请检查网线确实已经连接而没有断开。这里以Windows 10 专业版操作系统为例,具体操作如下:第一步,设置电脑

2020-08-01 13:08:05 2746 1

AHB-SRAMC项目RTL模块综合后的电路原理图PDF版

一共3个电路原理图文件:顶层模块-sramc_top;接口模块-ahb_slave_if;SRAM模块-

2021-10-16

空空如也

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

TA关注的人

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