- 博客(455)
- 资源 (17)
- 收藏
- 关注

原创 xilinx zynq ps端移植vxworks6.9系统
基于a board support package,选择xlnx_zynq7k BSP,编译工具链选择diab,勾选Enable WDB Target Agent,选择next下一步,VxWorks Image Project Multipage Wizard就配置完成。从the New VxWorks Image Project中,profile选择PROFILE_DEVELOPMENT,单击finish。project中选择open development shell打开vxworks脚本编译窗口。
2023-05-30 08:30:00
4813
7

原创 ZYNQ使用10G Ethernet Subsystem万兆网光通信
一,10G Ethernet Subsystem IP原理和硬件定义uiudp_stack是一个“黑盒子”负责处理 ARP 以及 UDP IP 通信协议,上层协议是用户实际收发的有效数据部分,“10G Ethernet Subsystem IP"核负责处理以太网数据通过GTX高速串行接口传输。SFP 屏蔽笼插入千兆 SFP 转 RJ45 电口或者光模块,SFP 信号定义如下图:二,10G Ethernet Subsystem IP 配置1,Ethernet Standa...
2021-11-19 00:32:13
6884
3

原创 复旦微ZYNQ EMIO控制PL LED
1,复旦微ZYNQ FPGA开发工具是Procise,ARM开发工具是IAR;2,它与xilinx ZYNQ不同的是,xilinx移植的是两个ARM CONTEX A9或者高端UTRASCALE 移植的是ARM CONTEX A53,复旦微移植的是四个ARM CONTEX A7;3,xilinx里面PL和PS共用下载器,复旦微PS要单独引出EMIO或者MIO接PS JTAG,且PS JTAG的复位信号接到ps_rst或gpio引脚单独复位;器件选择 fmql,package选择fcbga900
2021-11-18 23:57:25
6839
3

原创 ZYNQ axi uart16550 IP核扩展485接口使用
UART16550除了拥有AXI UART Lite的全部功能外,还提供1.5bit和2bit停止位,在可配置波特率的基础上还可以使用外部时钟供给串口接收模块,经测试发现,其波特率可以达到linux中tty设备定义的最大波特率,也就是4.5Mbps。5,将启动文件复制到SD卡,打开PC端的串口调试助手,查看/dev下的文件,可以看到系统中多了ttyS0~ttyS15,本次系统中可以使用的是ttyS2~ttyS11, 因为在aliases节点下ARM端的两个串口已经占用了serial0和serial1。
2020-09-22 00:28:05
18724
16

原创 ZYNQ PL通过EMIO ETHE1外接PHY由GMII转RGMII
1,设置EMIO方式引出ETHE12,从GMII过度到RGMIIGMII:发送 gmii_tx_clk gmii_tx_d[7:0] gmii_tx_en gmii_tx_er接收 gmii_rx_clk gmii_rx_d[7:0] gmii_rx_dv gmii_rx_erRGMII:发送 tx_clk tx_d[3:0] tx_ctrl接收 rx_clk rx_d[3:0] rx_ctrl首先数据总线从时钟单边沿采样8bit转变为了双边沿采样4bit,从88E1
2020-07-29 11:10:59
18150
26

原创 ZYNQ PS-PL数据交互方式总结
一,中断二,IO方式:MIO EMIO GPIO三,BRAM或FIFO或EMIF(1)通过BRAM实现PL/PS之间交互PS 的配置如下图所示。使能 M_AXI_GP0 口,将 FCLK_CLK0 设为 100MHz,使能 PL 至 PS 的中断。AXI BRAM Controller IP 核连接 PS 的 M_AXI_GP0 口和 BRAM,完成 AXI 接口至 BRAM 接口的转换。添加BRAM,将BRAM设置为双口RAM,将PORTA与AXI B...
2020-06-29 18:09:57
17789
4

原创 嵌入式块设备内核驱动
释放磁盘扇区缓存。明确:linux系统分用户空间(用户态)和内核空间(内核态)分配一个gendisk结构体,队列request_queue_t,设置gendisk 结构体的成员注册 gendisk 结构体。用户空间的软件在运行的时候,CPU的工作模式为USER模式,这些软件在运行时,处于用户空间;运行用户空间的软件不能直接访问硬件外设的物理地址 如果要访问硬件外设,必须首先将硬件外设的物理地址映射到用户空间的虚拟地址上用户空间的软件不能直接访问内核空间的代码,地址和数据,用户空间和内核空间的访问必须通过
2020-06-22 23:38:31
1129

原创 ZYNQ 网络通信的四种实现方案
一,ZYNQ MIO以RGMII 接口连接外部PHY芯片实现LWIP网络通信。二,ZYNQ PS 的 ENET0/ENET1 通过 EMIO 的方式扩展至 PL,在 PL 中通过 RGMII 接口连接扩展子卡实现 LWIP 网络通信。在PL中搭建了1个AXI 1G/2.5G Ethernet Subsystem以及1个AXI Direct Memory Access IP 核。这两个 IP核均通过AXI 总线经S_AXI_HP0 口与PS 连接,PS 通过AXI 总线对其进行配置和控..
2020-06-22 11:34:29
17096
11

原创 powerPC4080制作启动文件和SSD读写测试
一,powerPC制作文件系统:1, 准备工作sudo mkdir /local/tftpboot/comx_p4080/ -pcd 4080/sudo cp ./opt/* /opt/ -rfcp COMX_P4080_SRC_V100R00 ~/ -rf(然后原来位置的文件夹就没有用了,或者看成剪切过去的)2,向文件系统中添加文件cd ~/COMX_P4080_...
2020-04-06 14:56:00
2096

原创 linux内核中断机制及中断驱动
1, 计算机为什么有中断机制? 由于外设的处理速度远远慢于CPU的处理速度 为了保证CPU和外设的数据通信正确,一般呢首先可能考虑使用轮询机制(轮询就是死等),如果轮询的时间过程长,会大大降低CPU的利用率(CPU不能干其他的事情,只能等待当前这个硬件)此时还可以考虑使用中断机制,当CPU发现设备没有准备就绪, CPU干其他的事情(比如做一个算法)一旦外设准备好了,外设会给CPU发...
2020-03-28 19:58:47
1394

原创 线扫激光算法原理
一:线扫激光算法原理激光器发出的激光束经准直聚焦后垂直入射到物体表面上,表面的散射光由接收透镜成像于探测器的阵列上。光敏面于接收透镜的光轴垂直。如图:当被测物体表面移动x,反应到光敏面上像点位移为x’。a为接收透镜到物体的距离(物距),b为接收后主面到成像面中心的距离(一般取焦距f),θ为激光束光轴与接收透镜之间的夹角。D为激光光束轴到透镜中心的距离。接收透镜的焦距为f,其余的参数如下图:...
2020-03-12 00:17:07
15310
9

原创 ZYNQ petalinux系统启动文件固化到FLASH
首先明确:petalinux启动文件从FLASH启动系统,也就是将启动文件放入FLASH中。1,vivado配置:2,导入硬件后配置petalinux source /opt/Xilinx/Vivado/2017.4/settings64.sh source /opt/pkg/petalinux/settings.sh petalinux-create --type...
2020-03-10 23:54:53
8017
4

原创 ZYNQ使用AXI_Ethernet编译系统扩展多网口
1,使用内核版本4.9:linux-xlnx-xilinx-v2017.4(1)petalinux-create --type project --template zynq --name lwip 进入lwip文件夹执行:petalinux-config --get-hw-description your_wapper.hdf ,导入硬件。...
2020-03-10 00:33:18
11697
5
原创 verilog格雷码转换电路
年发明的,最初用于通信。格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。使用格雷码的最高位作为二进制的最高位,二进制次高位产生过程是使用二进制的高位和次高位格雷码相异或得到,其他位的值与次高位产生过程类似。二进制的最高位作为格雷码的最高位,次高位的格雷码为二进制的高位和次高位相异或得到,其他位与次高位类似。个bit发生跳变,注意,这种情况只适用于二进制依次累加的时候,如果二进制变化没有任何规律,那么格雷码也可能发生多 bit。
2025-03-07 11:59:50
44
原创 使用Modelsim手动仿真
3,在“Project Name”栏中填写工程名,这里的命名方式,建议大家最好根据仿真的文件来进行命名,时间久了,当我们记不得这个仿真工程是用来仿真什么的时候,我们看到这个工程名,就能够知道它是用来做什么的了。前面的几个放大镜模样的工具是放大、缩小和全局显示功能,鼠标放到图标上会显示出它们的快捷键,后边的黄色图标是用来在波形图上添加用来标志的黄色竖线,紧跟着的是将添加的黄色竖线对齐到信号的下降沿和上升沿。这时,仿真的对象为HDL代码,可以比较直观的观察波形的变化,在设计的最初阶段发现问题,节省大量的精力。
2025-03-07 11:41:29
136
原创 HMC7043和HMC7044芯片配置使用
HMC7044时钟抖动衰减器可在数据转换器系统中产生源同步且可调的样本和帧对齐(SYSREF)时钟,使JESD204B系统设计得以简化。第一个PLL将一个低噪声、本地压控时钟振荡器(VCXO)锁定至噪声相对较高的参考,而第二个PLL将VCXO信号倍频至VCO频率,仅增加非常小的噪声。对于蜂窝基础设施JESD204B时钟产生、无线基础设施、数据转换器时钟、微波基带卡和其它高速通信应用,HMC7044架构可提供出色的频率产生性能,相位噪声和积分抖动均很低。(4),寄存器地址参数控制配置。
2025-03-04 16:00:04
561
原创 Vivado常用的时序约束方法
因此,模块内部的延迟可以小很多。这些命令包含了对时钟的约束create_clock和对I/O的约束set_input_delay /set_output_delay,以及一些时序例外set_false_path。如果我们在两个时钟间的至少一个路径上使用了set_max_delay,那么就不能在相同的时钟之间使用set_clock_groups约束,而且set_false_path约束仅用于两个时钟之间的其它路径上。如图所示,没有约束PLL输出时钟,但是最后的时序分析报告中仍然有显示PLL输出时钟的频率。
2025-03-04 15:49:38
151
原创 Vivado时序分析设计
一般我们设置为几百M时钟情况下,如果代码写的非常复杂,也有可能出现时序不满足,这种情况我们就需要做时序优化了,时序优化的方式有很多种,比如在长的路径中插入一些寄存器,简化逻辑运算,还可以把相关的逻辑约束在一个区域中等等。,说明时序是满足的,分数是负的,说明时序是不满足的,负分越大,说明时序越差,时序负分过大会导致功能可能出问题,所以我们的时序优化的效果可以参考负分的变化。是更细致的时序路径,每个路径的延迟都有具体的数值,分析时序特别方便,此处可以看出Vivado软件非常强大和人性化。clkwiz.xdc。
2025-03-04 15:33:47
29
原创 Quartus TimeQuest时序设计
在开始全编译之前,需要将SDC 文件添加到工程中。在QuartusII软件的Assignments菜单栏中选“Settings”,然后在左侧Category一栏选中“Files”,在右侧通过浏览来选择filtref.sdc,点击“Add”将其添加到工程中,然后先后点击下方的“Apply”、“OK”。在GUI 中输入set_false_path后,所有生成的报告面板上都标有“Out of Date”,这表明报告面板不包含反映TimeQuestTiming Analyzer 中当前状态的约束的结果。
2025-03-04 04:00:00
302
原创 verilog reg和wire和assign语法
要是出现不能给input赋值,那么就reg产生一个输出,与它进行封装连接,直接操作reg就可以了;在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。assign 相当于一条连线,将表达式右边的电路直接通过 wire(线)连接到左边,左边信号必须是 wire 型(output和 inout属 wire型)。如:wire clk;reg 关键词,寄存器。
2025-03-04 02:00:00
89
原创 FPGA时序约束的几种方法
时钟约束是最基本的一个约束,因为FPGA工具是不知道你要跑多高的频率的,你必要要告诉工具你要跑的时钟频率。时钟约束也就是经常看到的Fmax,因为Fmax是针对“最差劲路径”,也就是说,如果该“最差劲路径”得到好成绩,那些不是最差劲的路径的成绩当然比“最差劲路径”好。好的时序是设计出来的,不是约束出来的。好的约束必须以好的设计为前提。不过,通过正确的约束也可以检查设计的优劣,通过时序分析报告可以检查出设计上时序考虑不周的地方,从而加以修改。应该说,设计是约束的根本,约束是设计的保证,二者是相辅相成的关系。
2025-03-03 14:32:42
395
原创 时序分析和约束
下图完整的展示了 4 种时序路径,下图主要包括三个芯片器件,分别是Device A,FPGA Device 和Device B,这三个芯片可能位于一个电路板上面,也可以位于不同的电路板上面,但是三个芯片都是使用的同一个时钟,即图中的Board Clock。端口到端口的路径(dinb 到 dinb 绿色),这个部分包括1个延迟,即Data Path Delay(FPGA 内部的组合逻辑和数据走线延迟)。从 device A 的时钟到 FPGA 的第一级寄存器的输入端口,这个部分包括3个延迟,分别是Tco(
2025-03-03 00:15:00
150
原创 FPGA如何处理浮点运算
hls浮点协处理:在应用中如果出现需要进行大量浮点或其它类型数据运算的情况,此时占用大量CPU时间,如果将这类算法放到FPGA,CPU只需要发起请求和读取结果,将缩短时间。这里的hls ip模块由CPU指定float类型数据存放地址和数据长度,求求它们的平均值。计算完成后通过中断方式通知CPU。FPGA开发遇到碰到浮点数处理,使用浮点数运算IP(Floating-point),这个IP为AXI接口,输入和输出都是IEEE 754格式,就是计算机表示浮点数的格式。
2025-02-25 16:44:24
286
原创 vivado修改下载器下载速率
第一种方法可以不用修改下载速度,直接先从vivado中将bit流下载进FPGA或者在sdk里program fpga。第二种方法可以更改设置,在sdk项目右右键Debug as选择Debug Configurations,最后一项System Debugger把program fpga勾选上,这样在启动时就会先把比特流加载进去。原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。第三种办法是从vivado中降低下载器速度,比如从。
2025-02-22 16:46:57
278
原创 仿真器当做串口使用
把仿真器当成串口来用,按图片来设置,和串口打印的效果一样的。然后run as 或者 debug as 把程序运行起来。这时候就能看见串口打印。
2025-02-22 16:28:46
29
原创 FPGA器件时序模型
虽然连接两个相邻Cell的连线不被看作Net,但这个连线还是有其物理意义的,即等价于FPGA器件中的一段布线逻辑,会引入一定的延迟。时序分析工具会依据仿真需求,使用不同的PVT组合,用于STA分析,因为实际的ASIC/FPGA芯片也存在不同的PVT组合,每种组合的时序模型是不一样的,因此STA需要分析各种情况下的组合。(2) Data paths:从输入Port到寄存器Cell的数据输入pin ,或从寄存器Cell的数据输出 pin 到另一个寄存器Cell的数据输入pin。对应已经分配的器件引脚。
2025-02-22 16:16:08
43
原创 lattice hdl实现spi接口
定义硬件SPI接口的管脚。配置SPI时钟和模式。编写SPI主机或从机的控制逻辑。顶层:spi_slave_top.v。
2025-02-22 15:41:12
215
原创 TCL编译生成IP核或block design工程
对tcl来说,它要处理的数据只有一种字符串。(3)打开hdl-2018_r1\projects\adv7511\zed\adv7511_zed.sdk\hdmi\src目录,把下载好的测试程序文件Xilinx\zedboard\no-OS-master\no-OS-master\adv7511\zed目录下的所有文件拷贝过来。语句运行的时候首先分组(分组有三种方法:空格,双引号和花括号),然后替换($的作用是变量引导符,在字符串中如果要替换某个变量,可能还需要用{}来界定变量的起始和终点),最后运行。
2025-02-22 15:32:23
40
原创 FPGA开发synthesis和implementatin作用
逻辑分析仪(需要引出大量的测试引脚)是FPGA设计主要调试工具,主流的FPGA芯片生产商都提供了内嵌的在线逻辑分析仪(Xilinx ISE中的ChipScope,Xilinx vivado中的ILA,Altera QuartusII中SignalTapII以及SignalProb)来解决上述矛盾,实用价值很高,这些在线逻辑分析仪只需要占用芯片少量的逻辑资源。大部分的流程步骤还是需要我们循规蹈矩的去做,因为这些步骤的输入是上一个步骤的结果,输出是下一个步骤的输入的关系。布局的过程就是将门级网表中的每一个门“
2025-02-22 15:20:11
127
原创 FPGA aurora_8b10b光通信使用
从 s_axi_tx_tvalid 到 m_axi_rx_tvalid 的默认四字节帧设计的最小延迟在功能仿真中大约为 41 个 user_clk 周期。Aurora 8B/10B IP 协议提供了替代方法执行单向通道初始化,使 GTP,GTX 和 GTH 收发器在没有反向通道的情况下使用,降低由于未使用的全双工资源而造成的成本。从 s_axi_tx_tvalid 到 m_axi_rx_tvalid 的两字节成帧设计的最小延迟在默认核心配置的。所需的随机空闲字符,并监视所有通道逻辑模块的错误。
2025-02-22 08:00:00
27
原创 DDS信号发生器产生载波FFT变换
SCALE_SCH:放缩倍数,只有在选择放缩定点时有效,占比特数:基四和流水线结构下为2×ceil(NFFT/2) 基二和简化基二结构下为2×NFFT 每两个比特表示突发型一级或流水线型两级(排序从最后到最先)的放缩倍数(00 01 10 11),注意当基四结构下点数不是4的整数倍时,最后一级只占一比特,即00 01。AXI4-Stream协议中的握手信号s_axis_config_tready和s_axis_config_tvalid,配置信息s_axis_config_tdata信号。
2025-02-22 00:15:00
38
原创 ZYNQ RapidIO IP核协议与使用
一,RapidIO各个子核和接口的基本功能视图 RapidIO主要应用于嵌入式系统内部互连,支持芯片到芯片、板到板间的通讯,可作为嵌入式设备的背板(Backplane)连接。RapidIO核把三个子核封装在一起,它提供了一个高层次,低维护的接口。逻辑层分成几个模块来控制并解析发送和接收数据包,逻辑层有三个接口:用户接口(User Interface) (包括能发起和接收包的端口),传输接口(Transport Interface)和配置接口(Configuration Fabric Interface)。R
2025-02-21 16:59:11
362
原创 JTAG烧写固化程序步骤
比如输入:petalinux-package --boot --fpga system.bit --u-boot --add boot.scr --offset 0xfc0000 --kernel --force 打包内核,设置偏移。petalinux-package --boot --fsbl --fpga --u-boot --kernel --force ,打包内核,默认偏移。勾选对应位置 点击OK。生成完整的启动文件,包含上面所有组件的启动镜像生成BOOT.BIN,适合vivado烧写。
2025-02-21 07:00:00
133
原创 MMCM/PLL例化和使用
打开IP核的例化模板,在“Source”窗口中的“IP Sources”选项卡中,依次用鼠标单击展开“IP”“clk_wiz_0”-“Instantitation Template”,我们可以看到“clk_wiz.veo”文件,它是由IP核自动生成的只读的verilog例化模板文件,双击打开它,在例化时钟 IP 核模块的时钟,直接从这里拷贝。PLL 对时钟网络进系统级的时钟管理和偏移控制, 具有时钟倍频、分频、相位偏移和可编程占空比的功能。“Port Renaming”选项卡主要是对一些控制信号的重命名。
2025-02-21 00:30:00
36
原创 Verilog状态机
不同于一段式状态机的是, 它需要定义两个状态, 现态和次态,然后通过现态和次态的转换来实现时序逻辑。三段式:在两个always模块描述方法基础上,使用三个always模块,一个always模块采用同步时序描述状态转移,一个always采用组合逻辑判断状态转移条件,描述状态转移规律,另一个 always模块描述状态输出(可以用组合电路输出,也可以时序电路输出)。摩尔状态机的模型如下图所示,对比米勒状态机的模型可以发现,其区别在于米勒状态机的输出由当前状态和输入条件决定的,而摩尔状态机的输出只取决于当前状态。
2025-02-20 03:00:00
36
原创 always和assign语法区别
在always不带时钟时,逻辑功能和assign完全一致,都是只产生组合逻辑。比较简单的组合逻辑推荐使用assign语句,比较复杂的组合逻辑推荐使用 always语句。在always不带时钟时,逻辑功能和assign完全一致,虽然产生的信号定义还是reg类型,但是该语句产生的还是组合逻辑。always带时钟信号时,这个逻辑语句才能产生真正的寄存器。二,带时钟的always和不带时钟的always 区别。always语句可以带时钟, 也可以不带时钟。assign 语句使用时不能带时钟。
2025-02-20 00:15:00
292
原创 verilog基础知识
Verilog推出已经有20年了,拥有广泛的设计群体,成熟的资源,且Verilog容易掌握,只要有C语言的编程基础,通过比较短的时间,经过一些实际的操作,可以在1个月左右掌握这种语言。C语言是软件语言,编译下载到CPU后是软件指令,而不会根据你的代码生成相应的硬件电路,CPU处理软件指令需要取址、译码、执行, 是串行执行的。关系运算符主要是用来做一些条件判断用的,在进行关系运算符时,如果声明的关系是假的,则返回值是0,如果声明的关系是真的,则返回值是1;逻辑 0:表示低电平,也就是对应我们电路的 GND;
2025-02-19 10:51:01
534
原创 petalinux高版本设置自动登录和开机自启动配置
首先进入/myapp-init/files/目录下,创建myapp-init.service文件vim myapp-init.service。编辑 project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb文件。创建并编辑/recipes-apps/myapp-init/files/myapp-init.service文件。编辑/recipes-apps/myapp-init/files/myapp-init文件。进来就是root权限。
2025-02-19 10:48:37
479
原创 linux检测U盘,网络是否连接
在带界面的嵌入式系统仪器中,设备基本支持网口,对于网络的拔插需要做检测并实时显示更新图标等。之前试过qt自带的类,使用信号槽的方式监测网线的拔插,后来发现无效,未深究原因,后来就想着使用如下函数监测是否插入网线,并使用定时器不断定时监测更新(这样操作可能消耗一些cpu)。
2024-12-27 12:29:19
167
原创 xilinx开发过程中常用的ip核配置
uiudp_stack这个协议栈,我的phy协商的是100M,协议栈能正常工作吗?100m, rgmii不能工作,协议栈能正常工作。一,XILINX的FIFO,不同带宽输入输出,输出时,默认是先输出高位,再输出低位。答:在写入的时候,切换下位置就行了。四,PS的以太网用emio经过gmii转rgmii后Txclk变成了2.5Mhz,而用mio输出则是125Mhz。能不能用很低的频率让它工作呢?五,uiudp_stack这个协议栈能使用MDIO吗?K7的DDR可以跑到800M,用户逻辑可以跑到200M。
2024-11-05 22:47:06
129
线程加锁程序,pthread-mutex-t
2022-10-18
基于udp协议的通信模型udpServer.c和udpClient.c
2022-10-18
阻塞IO驱动代码和makefile
2022-10-16
AsynchronousIO,异步IO驱动代码和makefile
2022-10-16
非阻塞IO驱动和makefile
2022-10-16
PL-PS的中断驱动程序,带makefile
2022-10-16
vivado(2014+2016+2017+2018+2019+2020都能使用) SRIO licence
2022-10-16
ZYNQ AD9361的裸机SDK配置代码
2022-10-15
QPSK调制解调代码MATLAB仿真
2022-10-15
BPSK调制解调MATLAB代码
2022-10-15
16QAM 是正交移幅键控调制
2022-10-15
单载波频域均衡(SC-FDE) 的设计
2022-10-15
2PSK调制解调原理,MATLAB代码
2022-10-15
2FSK调制解调实验,MATLAB代码
2022-10-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人