- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 使用DDR4控制器实现多通道数据读写(八)
用两个fifo连接ddr:首先由generate_data模块产生数据,把数据存入fifo_1中,再通过wr_ddr_start(写ddr开始信号)控制ddr把fifo_1中的数据写进ddr。在将DDR4中的数据读出后写入fifo_2时,需要控制从DDR4读取的长度和地址,DDR4每次读突发最长可以读出256个数据,之前将数据写进DDR4时,前一次突发和后一次突发的地址是相连的,所以每次读突发时,初始地址必须紧跟上一次突发后读出最后一个数据的地址。读出的数据做为fifo_2的写数据。
2025-04-17 16:15:47
407
原创 LVDS系列8:Xilinx 7系可编程输入延迟(一)
INC:抽头延迟的增量减量,搭配CE使用,只有当CE为高时,INC才有效,当CE为低时INC值不起作用,其中INC=1时抽头值递增,INC=0时抽头值递减,且INC和CE都与时钟C同步,且当CE保持高,每个C的时钟周期,根据INC的值设置,抽头值会在下一个时钟C的上升沿开始进行抽头值的递增递减操作;IDELAYE2原语的可编程延迟抽头会执行环绕操作,原语的延迟抽头值为0~31共32个数,环绕是指当抽头值当前到达边界,如0或31,在0时如果递减,抽头值将变为31,在31时如果递增,抽头值将变为0;
2025-04-16 10:05:44
819
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第八讲)
这一期我们来讲解GUI_guider中消息框的基本使用以及相关函数,消息框(Message Box)是一个用于显示消息、警告、通知或提示信息的常见 GUI 元素。ui->screen_2_msgbox_1 = lv_msgbox_create(ui->screen_2, “提示”, “账号或密码不得为空!//声明lv_style_t类型变量。//声明lv_style_t类型变量。//声明lv_style_t类型变量。//设置消息框的位置以及大小。//用于设置标题文本字母间隔。//用于设置标题文本透明度。
2025-04-15 15:01:49
583
原创 使用DDR4控制器实现多通道数据读写(七)
DDR4写模块根据ddr4_test模块发来的写开始信号,写数据数量,初始地址,首先通过写地址通道发送写数据的初始地址、写数据数量、和控制参数,wstrb信号作为写数据的掩码。在DDR4读模块中,根据ddr4_test模块发出的读开始信号,在读地址通道中发送读起始地址、读长度和控制信号,给DDR4发起读请求,根据读数据通道读出数据,rd_data作为读数据,rd_en作为读数据有效信号发送给ddr4_test模块。如图所示,读起始地址为0,读出16个数据,读出的第一个数据中,每个DW值为0x10。
2025-04-11 09:34:33
863
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第七讲)
默认是第一种键盘模式,当需要切换模式,进入到ta_event_cb函数修改模式,下面代码以数字模式举例子lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);在该界面中可以设置键盘文字的大小和文本类型,最下方判断键盘是否支持中文输入(中文输入,当汉字库不够大时,用户点击中文输入会少很多字)。//当LV_USE_KEYBOARD为1时启用虚拟键盘,LV_USE_ZH_KEYBOARD为1时支持中文输入。随后在系统设置界面中点击项目选项,选择显示键盘。
2025-04-10 13:50:08
985
原创 LVDS系列7:Xilinx Ultrascale系ODDRE1原语
Clk上升沿(C_inter上升沿)采集din1和din2,din1在上升沿采集后立刻输出到dout,din2在上升沿采集后寄存到clk下降沿(C_inter下降沿)再输出到dout;Clk下降沿(C_inter上升沿)采集din1和din2,din1在下降沿采集后立刻输出到dout,din2在下降沿采集后寄存到clk上升沿(C_inter下降沿)再输出到dout;SR:异步置位复位端口,高有效,在正常工作前,输出Q将保持4个时钟周期的复位值;参数IS_C_INVERTED:反转输入时钟C,置1有效;
2025-04-09 09:19:51
713
原创 使用DDR4控制器实现多通道数据读写(六)
在图1中,T3-T4时刻,从设备接收第一个数据,T5-T6时刻,从设备接收第二个数据,T7-T8时刻,从设备接收第三个数据,T8-T9时刻,从设备接收低四个数据。主设备在传输第4个数据时,WLAST为高,表示第四个数据为本次写突发的最后一个数据。本章节讲述了DDR4的AXI读写时序,并通过仿真验证了DDR4的读写功能,本次仿真输入的有效数据为全部字节有效,后续会为大家演示数据掩码的作用,和突发类型的作用,主要验证FIXED、INTR、WRAP模式下的突发机制的不同,并详细介绍 WRAP模式的地址边界。
2025-04-03 11:03:10
531
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第六讲)
这一期来讲文本框控件的基本使用以及注意事项,首先文本区域是由一个Label与光标组合而成,用于文本输入。第六行指的是是否开启换行模式,新建文本框默认是开启换行模式,当文本框内容超出一行显示时,将在文本框的下方与右方出现滚动条。这里我们选择12号宋体,边框为黑色,字间距为2,内边距分别为距离顶部4,右侧4,左侧4,最后是关于阴影的设置保持不变即可。第三行最大长度指的是文本框输入最长为多少,当超过这个长度用户输入的内容将不在文本框内显示。第一行文本指的是在文本框中显示的文本,由用户进行输入。
2025-04-02 10:22:54
907
原创 LVDS系列4:Xilinx 7系ODDR原语
由于从上面截取的官方文档的时序波形图中可以看出,正确的数据输入应该是din1和din2每个clk时钟周期保持不变,但是如此按时序图提供的输入方式的话这两种模式下,输出格式都是一致的,那么我们就无法看到这两种模式有何区别了,所以这里将输入改为半个周期变换一次,所以我们就可以看出,上图两个模式下,输入信号其实是完全一致的,但是输出的dout信号却大不相同;每个时钟周期内,Q输出两个数据,上升沿输出D1,下降沿输出D2,两个模式下输出数据格式相同;每个时钟周期内,Q输出两个数据,上升沿输出D1,下降沿输出D2;
2025-04-01 17:51:49
619
原创 使用DDR4控制器实现多通道数据读写(五)
在写地址传输完成后,才能传输数据,主设备发起需要传输的数据,并置WVALID为高,当从设备准备好接收数据时,会拉高WREADY,当WVALID和WREADY同时为高时,表示数据成功传输了一个数据,在主机发送最后一个数据时,需要将WVALID和WLAST同时拉高,表示本次传输为本次突发的最后一个数据,当WVALID、WREADY和WLAST同时为高时,表示本次写突发结束。写数据通道(W):主设备----->从设备(WDATA,WVALID,WREADY,WLAST等)
2025-03-28 09:21:03
653
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第五讲)
点击clicked信号右上角的if按键,在弹出的弹窗中点击加号,在if右侧的条件栏填写“flag_btn。在触发事件中选择需要做出回应的对象,这里我们点击led_1控件,点击确认。• lv_led_set_brightness: 设置 LED 的亮度。• lv_led_get_brightness: 获取 LED 的亮度。• lv_led_set_color: 设置 LED 的颜色。• lv_led_get_color: 获取 LED 的颜色。• lv_led_set_style: 设置 LED 的样式。
2025-03-27 10:27:42
513
原创 LVDS系列5:Xilinx Ultrascale系IDDRE1原语
C)=C=C_inter,此时C_inter和CB_inter同相,那么原语功能就会失效,此时C_inter和CB_inter的上升沿都在C的上升沿,C的下降沿处没有上升沿的采集时钟,没有双沿的采样时钟就无法触发DDR的双沿采集功能,原语无法工作,且有可能造成亚稳态时序违例等影响系统稳定的错误;sclk,CB_inter=clk_b=sclk,符合C_inter和CB_inter互补情况,此时仿真图中clk和C_inter反相,clk_b和CB_inter同相,
2025-03-25 14:37:05
592
原创 使用DDR4控制器实现多通道数据读写(四)
在创建完DDR4的仿真模型后,我们为了实现异步时钟的读写,板卡中在PL端提供了一组差分时钟,可以用它通过vivado中的Clock Wizard IP核生成多个时钟,在这里生成两个输出时钟,分别作为用户的读写时钟,这样就可以用异步时钟来读写ddr4数据。在基本配置中可以使用时钟输入(clk_in),时钟输出(clk_out),复位(reset),时钟锁(locked)等信号来完成Clock Wizard IP核的基本配置,其中locked用来指示输出的时钟是否稳定,当locked有效后方可使用输出时钟。
2025-03-19 15:15:31
567
原创 LVDS系列4:Xilinx 7系IDDR原语
注意:在使用置位S和复位R端口时,两者不能同时置1有效,否则可能会导致输出状态不确定,还会有出现亚稳态时序风险导致系统异常,且两个端口同时控制还增加了逻辑复杂度,所以推荐在使用时优先R复位端口,将S置位端口置0,减少逻辑复杂度的同时避免出错,置位端口置1有效时,Q1、Q2将强制输出1;Q1在第一个时钟周期上升沿采样的数据D0A在第一个时钟周期的上升沿采样后直接输出,Q2在第一个时钟周期下降沿采样的数据D1A在第二个时钟周期的上升沿采样才输出,第一个时钟周期时Q2保持不关心的无效值;
2025-03-18 15:16:12
784
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第三讲)
在样式列表中第一行是关于按键模块的状态设置,我们只设置初始状态即可,下一栏是背景颜色和透明度的设置,再下面是字体的设置,我们选择16号字体与宋体格式,文字对齐方式为居中,最下面俩栏是美化方面的设置,我们可以根据边框背景颜色以及粗细自己自定义,也可点击更多预设样式选择官方提供的三种样式修改使用。就这样关于一个按键的设计就完成了,然后点击右上角的运行,在运行中点击c语言运行,开发者可以在该平台初步看到项目实现的样式与功能。//设置标签的宽度为按钮百分比。//设置标签文本换行方式。//创建按键上的标签。
2025-03-14 09:15:41
560
原创 LVDS系列3:Xilinx的IOBUFDS原语
前述的IBUFDS原语只能接收外部差分信号,此时连接管脚为input管脚,OBUFDS只能向外部输出差分信号,此时连接管脚为output管脚,但差分信号还有可能出现IO类型,也就是inout管脚,一对差分信号,可以输入,也可以输出,此时使用IBUFDS和OBUFDS就不能解决问题,需要使用到IOBUFDS原语;此时T=1,输出缓存启用,可以看到在原语的图中,IO、IOB到O的路径没有受到T端口开关的影响,此时O的输出来自IO、IOB,而IO、IOB的值此时来自于I,所以O值与I值相同。
2025-03-11 17:29:38
1369
1
原创 使用DDR4控制器实现多通道数据读写(二)
说明:ddr4 ip 接口的awlock、awcache、awprot、awqos、arlock、arcache、arprot、arqos信号在工程中没有特别要求,可以设置为0。核心模块在PL侧搭载了4片镁光(Micron)的DDR4内存,单片内存大小为1GB,数据接口16bit。在上一章我们已经把DDR4的IP核配置好了,这一章来描述一下DDR4 IP核的例化接口,以及接口的作用。awqos(arqos):服务质量(4bits),该信号用于优先级声明信号,值越高代表优先级越高。DDR4 IP核接口列表。
2025-03-05 15:53:05
317
原创 LVDS系列2:Xilinx的OBUFDS原语
前面一讲说到差分信号用于信号传输输入到FPGA内部处理时,需要使用IBUFDS原语将外部的差分信号变为单端使用,而如果FPGA想要输出差分信号,那么就需要将内部的单端信号转为差分信号输出,这个操作需要使用到OBUFDS原语去实现。参数SLEW:控制输出信号的压摆率(Slew Rate),控制输出信号电压从逻辑0(1)变到逻辑1(0)的速度,影响信号边沿的陡峭程度;在第1个黄线处,data输入0,dout_p输出0,dout_n输出1,输出正确;可以看到,输出的正端与输入相同,输出的负端与输入相反;
2025-03-04 17:34:40
695
原创 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程《第一讲》
为了配合ui界面的开发,我推荐使用NXP GUI-Guider软件,该软件是由恩智浦官方提供的,对于新手开发界面非常友好,支持中英文的切换以及屏幕选择的大小,该软件支持Python和C语言两种,相对于SquareLine来说对白嫖党非常友好。其内部提供了30多种内置的小工具,例如按钮、标签、滑块、图表、键盘、表格等。(2)多功能:提供了超过40种控件,例如按钮、滑块、列表、图表等,以及多种主题、动画、字体、图像等元素。显示设置中用户可以修改量程,波形的显示模式,每个通道的颜色以及采集模式与采集数据的长度。
2025-02-28 10:46:59
259
原创 使用DDR4控制器实现多通道数据读写
这种高带宽对于大量的数据的应用非常重要。对于Controller/PHY Mode 的选择,我们使用Controller + PHY模式,Xilinx UltraScale/UltraScale+等高端FPGA通常包含硬核PHY,选择Controller + PHY模式可直接利用硬核,降低功耗和延迟,并且此模式的开发更易上手。在Basic页面下,首先勾选上AXI4 Interface选项,我们选用的内存接口速度为2133MHz的ddr4芯片,由于双沿触发,频率为1066MHz,那么周期应为938ps。
2025-02-26 16:50:49
597
原创 LVDS系列1:Xilinx的IBUFDS原语
如下图所示,LVDS使用一对相位相反的差分信号传输数据,通过两者电压差来判断逻辑值,在发送端单端转差分,在接收端差分转单端。差分信号用于信号传输,但是在FPGA内部数据处理时,需要将差分信号变为单端使用,所以就需要将外来的差分信号转为单端,可以使用IBUFDS原语实现,将内部的单端信号转为差分信号输出,可以使用OBUFDS原语实现。上图中,左侧的输入管脚I和IB从FPGA焊盘输入的外部信号,其中I为差分信号的正端P端,IB为差分信号的负端P端;
2025-02-26 09:57:06
1020
原创 手把手从零设计PCIE驱动和DMA引擎专题课
各位同学,大家好久不见!相信大家已经看到我们发布的关于PCIE内容的公开课程了,在很多同学的催更下,我们将于本月28号周六晚20:00在B站对PCIE付费课程进行发布,对我们的课程感兴趣的同学可以来到我们的直播间进行交流沟通,期待本周六晚20:00和大家见面https://live.bilibili.com/23601432。
2024-09-27 14:34:12
192
原创 OFDM编码效率3/4的实现
在802.11a协议中对于OFDM的速率实现有着明确的规定。我们根据协议中的流程来对编码效率为3/4的情况进行实现。编码效率是如何得到的呢?数据在通信的过程中要在待发送的数据中插入一些监督码元用于在接收端对数据进行检错和纠错处理。监督码元信息的添加通过编码来实现,当在数据中额外加入了监督码元之后,发送的数据中就不仅仅只包含有需要发送的信息了,这样我们待发送数据的比特数量与编码处理之后数据比特数量相比,就计算出对应的编码效率了。已知用64qam的调制方式实现54mbps的发送速率要求时,要保证编码效率
2022-01-07 17:21:42
1076
原创 FPGA:硬件加速金融行情解码
1.前言高频交易,硬件加速,这两个词,不管是金融领域从业人员,还是FPGA开发从业人员,对于这两个词应该都不会太陌生。对于金融行业从业人员来说,高频交易,是用来指代从开仓到平仓只有很短的时间间隔,主要目的是通过市场短暂的价格波动进行获利的交易行为,这种交易行为,对时间十分敏感,这种交易从以前的人工进行操作,交易的时间量级大概是分钟(min)乃至秒(s)级;到后来使用繁杂的计算机程序进行操作,定义一个复杂的模型,编写软件代码让计算自行机判断买入卖出,交易的时间量级大概到了毫秒(ms)级;而到了近年来十分火
2022-01-07 17:14:07
1508
原创 FPGA面试真题解析(4)
11、属于组合逻辑电路的是( )。(硬件逻辑实习岗)A 全加器 B 移位寄存器 C 计数器 D 触发器 12、在下列逻辑电路中,不是组合逻辑电路的是( )。(硬件逻辑实习岗)A 编码器 B D触发器 C 加法器 D 译码器解析:11、12题属于同一种类型的题目,主要考察对基本时序逻辑电路和基本组合逻辑电路的了解。首先我们先来看下如何用Verilog硬件描述语言来实现它们,并通过RTL视图以及波形图来看看他们的结构,来确定是组合逻辑电路还是时序逻辑电路。全加器的Verilog代码:我们
2021-08-16 10:12:56
796
1
原创 FPGA面试真题解析(3)
9、寄存器的Tsu(建立时间)是如何定义的( )。(硬件逻辑实习岗)A 在时钟沿到来之后数据保持稳定的时间 B 在时钟沿带来前后数据都需要保持稳定的时间 C 在整个时钟周期数据保持稳定的时间D 在时钟沿到来之前数据保持稳定的时间解析:考察数字电路中对时序分析基本概念的认识本题是个概念性的问题,常常在时序分析中提到。建立时间(Set Up Time,简写为Tsu或Ts):是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间。建立时间的门限(为了和建立时间区别开,所以简写为T_setu
2021-08-16 09:51:42
533
原创 FPGA面试真题解析(2)
5、下面哪种不是组合逻辑电路功能描述方法( )。(硬件逻辑实习岗)A. 真值表 B.布尔方程 C. 状态机 D. 逻辑框图解析:考察数字电路中对组合逻辑电路的认识A选项真值表是使用于逻辑中的一类数学用表,用来计算逻辑表示式在每种论证(即每种逻辑变量取值的组合)上的值。其特点就是输入和输出之间的关系能够一一对应,无任何延时特性,在表达组合逻辑电路关系时非常直观。下面为全加器的真值表:B选项布尔方程(Boolean equation)是一类特殊方程,指布尔代数B上含有未知元的等式f(X)=g
2021-08-12 10:12:07
1481
原创 FPGA面试真题解析
FPGA面试真题解析1、1、 十进制46.25对应的二进制表达式为( )。(硬件逻辑实习岗)A 101110.11 B 101101.01 C 101110.1 D 101110.01解析:这个问题看上去很简单,那是因为我们平时可以打开电脑上的计算器,然后用程序员功能立刻就能出结果,但是笔试的时候我们并不能使用这种“作弊“的功能,所以还是要会手算。可能很多同学数电是大一大二时学习的,很久没有接触过这么基础的问题了,那就让我们一起来回忆下吧。首先这个题
2021-08-10 10:03:43
2728
1
原创 第五讲spi通过SPI接口模拟主机读写从机寄存
Vivado版本:2019.2 Modelsim版本:Modelsim SE-64 10.7实验内容:通过SPI接口模拟主机读写从机寄存器,从机SPI时序图在下方给出。SPI:是Serial Peripheral Interface的缩写,既串行外设接口,是一种4线高速全双工同步的通信总线。通常由一个主模块和一个从模块或多个从模块组成,主模块选择一个从模块进行同步通信,从而完成数据传输。单向传输时,3根线也可以。其工作方式为主从方式,双向通信至少需要4根线,分别是CS——Chip Select,片
2021-07-19 15:31:43
4493
2
原创 双fifo流水线实现3x1024数组数据按列相加
Vivado版本:2019.2 MATLAB Modelsim版本:Modelsim SE-64 10.7实验内容:双fifo流水线实现3x1024数组数据按列相加FIFO,First Input First Output,既先入先出,也是一种存储器。本质上还是RAM,外面加了一层地址管理,这样使得FIFO没有地址线,使得使用起来非常方便。缺点是只能顺序写入和顺序读出,不能随机访问。如果数据把FIFO写满了,数据就不能继续写入,原来的数据也不会被覆盖;读取数据也只能读取一遍,读空后继续进
2021-06-04 15:46:56
954
原创 RAM的coe文件与简单DDS实现
Vivado版本:2019.2 MATLAB Modelsim版本:Modelsim SE-64 10.7实验内容:通过MATLAB生成一个COE文件,文件内容为一个周期的正弦波与余弦波,长度为1024,振幅为1023,数据类型为10进制。通过控制地址偏移实现一个简单的DDS,在modelsim中仿真完成。存储器的初始化可以使用默认数据或者通过内存文件(.coe)来完成,还可以两者搭配使用。通过COE文件可以定义单独内存位置的初始内容,而默认数据会直接定义所有位置的内存,两者搭配使用也就
2021-05-21 15:18:26
2462
原创 Vivado联合Modelsim软件安装和仿真库编译
Vivado联合Modelsim软件安装和仿真库编译Vivado hls工具与Vitis统一软件平台的出现和发展,突破了以往使用FPGA进行设计时,使用语言HDL语言进行设计实现的瓶颈,在xilinx FPGA上构建数字系统时,首先使用c/c++/systemc语言进行建模, 然后通过HLS工具将c/c++/system c模型描述直接转换为RTL级的HDL描述,因此大大提高了FPGA设计效率,加速FPGA在高性能信号处理领域的应用与推广。Modelsim 工具可以进行RTL的建模仿真可以配合Vivad
2021-05-08 14:46:26
1515
1
原创 FPGA开发中RAM的使用方法以及细节技巧
Vivado联合Modelsim软件安装和仿真库编译Vivado版本:2019.2 Modelsim版本:Modelsim SE-64 10.7说到 FPGA ,不得不提的是存储器,当我们做相关项目时,经常会遇到存储数据的问题,数据量过大时,我们可以将其存储在 FPGA 芯片的外设存储器上,比如 sdram、ddr sdram、ddr3 sdram等,然而访问外设存储器相对比较麻烦,因此当数据量较小时,我们可以直接使用 FPGA 芯片内部自带的 ram 的 IP 核。Ram是random acces
2021-05-08 14:26:44
7528
原创 第十一讲、FPGA开发中xilinx vivado 平台时序分析系列课程-边沿对齐input delay ddr双沿采样时序约束与收敛
我们在使用一些以太网PHY和FPGA接口是RGMII接口是DDR双沿结构,还有ADC芯片也也是DDR双沿采样接口,以及CMOS视频传感器也有很多DDR双沿源同步接口。我们这里以IMX222视频传感器的的DDR为例约束input ddr 接口如何进行约束和时序分析以及收敛源同步边缘对齐fpga输入直接模式(输入端不加PLL)这是IMX222手册中DDR接口的时钟和数据的边缘对齐的源同步时序参数,此参数供我们后边时序约束使用。这是基本的input delay 的时序基本模型,其实也是两级
2021-02-26 20:16:45
2865
1
原创 ZYNQ 7000的硬件SPI控制器配置为三线制SPI
使用zynq去做一些AD/DA的操作时候有些只支持三线制的SPI那么我们如何使用PS端的控制器EMIO到PL端实现3线制呢?以上是SPI0的接口信号,我们可以把PL侧的三线制的SDIO信号(inout)通过一个IOBUF原语进行转换出in 和out的信号。其中EN可以使用一个gpio的EMIO的来控制,或者直接使用MOSI_T信号控制即可(这个需要验证一下,理论是可以的,transmit时刻输出,否则三态,三态时刻就可以把输入的信号传递给Miso了)。IOBUF spi_wire( .I(.
2021-02-23 21:05:13
2564
1
原创 FPGA RTL开发中使用到的VSCode编辑插件安装讲解
实验概况安装VScode软件及各个支持库,完成对Verilog代码自动补全和语法错误检查。实验目的熟悉软件安装方法,为开发做好充足准备软件VScode、以及各个插件硬件电脑目录第一讲、VScode编辑器软件安装11.软件基本介绍:22.VSCode软件安装22.1VSCode软件安装22.2VScode编辑器设置中文环境53.插件安装83.1verilog 语法高亮和自动例化功能83.2iverilog语法检查功能133.3生成testbe
2021-02-22 20:57:27
2227
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人