FPGA
文章平均质量分 62
bendandawugui
日供一卒,功不唐捐!
展开
-
波特率和数据传输速率的关系
转载:https://www.cnblogs.com/fcchen/p/13067751.html波特率和数据的传输速率有关系,但是波特率并不是数据传输速率,数据传输速率是比特率。比特率是对信号传输速率的一种度量,通常以“波特”(baud)为单位。波特率有时候会同比特率混淆,实际上后者是对信息传输速率(传信率)的度量。波特率可以被理解为单位时间内传输码元符号的个数(传符号率),通过不同的调制方法可以在一个码元上承载多个比特信息。波特率一般指的是调制解调器的通信速度即线路状态更改的次数。 只有每个转载 2021-06-30 11:22:12 · 18279 阅读 · 0 评论 -
说一个不起眼的小知识点----时钟相位
outclk1:10Mhzoutclk2:10Mhz(+90°)波形如下图所示outclk1:10Mhzoutclk2:10Mhz(-90°)波形如下图中所示转载 2021-06-27 16:27:10 · 2185 阅读 · 0 评论 -
DDR3 MIG
https://blog.csdn.net/qq_40807206/article/details/109856959转载 2020-12-18 22:31:16 · 212 阅读 · 1 评论 -
DDR读写测试需要注意的两个点
第一个注意的点:命令和地址是一样的处理的,是对齐绑定在一起的,都属于地址系统,而不和数据系统绑定在一起。如上图中所示红圈标记的为3种不同情况下的数据系统。第二个注意的点:地址的算法:举个例子,比如4G的笔记本内存条,双RANK (几个RANK就是几面贴颗粒,双RANK就是两面都贴DDR颗粒(DDR芯片))每一面贴8个颗粒(DDR芯片)就是每一面8个bank,bank就是颗粒,ddr芯片。这种地址怎么计算?column的宽度是10bitrow的宽度是15bitban原创 2020-12-13 15:30:46 · 4440 阅读 · 2 评论 -
XILINX IO资源 介绍
Input Delay Reasource (IDELAY):先来说说IDELAYCTRL资源:借鉴了这位博主对它的描述:(https://blog.csdn.net/haoxingheng/article/details/50320145)在电压、温度等因素变化时,可能会影响到系统的时序,此时IDELAYCTRL模块就可以连续补偿时钟域内所有个体的delay taps (IDELAY/ODELAY)。如果使用了IOB上的IDELAY或ODELAY资源,那么就必须使用IDELAYCTRL资源。请原创 2020-12-06 23:20:37 · 993 阅读 · 2 评论 -
verilog 中关于负数的理解
首先要说的是,二进制中关于一个负数,它的补码应该是本身按位取反加1就可以得到,这个公式学过数字电路的人都知道,但是为什么按位取反加1就可以得到这个负数的补码?可能很多人都不知道。那么,我们就来搞清楚它!要先入为主的引出一个概念,补码是什么?补码:在二进制中为了保证两个相反数相加=0,提出来了一个补码的概念。 eg:(-1)+(1)=0;用二进制怎么表示这个等式呢? (1001)+(0001)= 0 ,嗯?怎么好像不对啊? 加起来不等于0啊...原创 2020-12-03 00:22:29 · 10772 阅读 · 0 评论 -
浅谈AXI总线
这篇博客在写之前借鉴了网上各位大佬对AXI总线的理解和总结,在此表示感谢。集合了博客,知乎以及书上对AXI总线的介绍。做以下记录用于自己日后复习和更好的理解。1:协议简介 Xilinx fpga 从Virtex-6系列开始,内部IP都支持AXI4总线协议,AXI高级可扩展接口(Advanced eXtensible Interface, AXI)是一种总线协议,该协议是ARM公司提出的高级微控制器总线结构 AMBA(Advanced Microcontroller Bus Archtie...原创 2020-11-22 23:16:14 · 6394 阅读 · 2 评论 -
verilog中使用 include预编译指令
一个较大的fpga工程,在开发的过程中模块标准化的使用往往会大大提高开发效率,因此在代码中比如参数化一些数据位宽和根据需求不同选择性的使用模块时,使用inlude预编译指令来调用一个全局定义的文件就可以实现对参数的统一定义。下面就解释一下关于使用include指令时,对于文件间调用时相对路径的理解。eg:假设工程结构如下:project目录testproject(QuartusII 工程文件夹) ----> comm // 要include的文件存放的目录,文件为par...原创 2020-08-30 18:06:02 · 1555 阅读 · 0 评论 -
verilog +:,-:的理解
转载:https://blog.csdn.net/SLAM_masterFei/article/details/104896258一般而言对于类似多位输出赋值,一般而言是这样的:wire a [MSB:LSB];assign a=b[MSB:LSB];这里的MSB 和LSB 都需要是常数而不能是变量,那么现实中很有可能需要对变量来进行操作,比如多路选择器等等,那么就可以用到 -:和+:操作符了,具体用法如下:module top_module( input [1023:0]转载 2020-08-14 16:32:03 · 1354 阅读 · 0 评论 -
常用的verilog系统函数 $feof, fscanf,$fopen,$readmemb,$readmemh,$fdisplay,$display,$fclose,函数的使用
转载:https://blog.csdn.net/winson_cys/article/details/100175964?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-taskVerilog编写testbench时,系统函数比较常用的一般为displ...原创 2020-03-19 11:37:04 · 8974 阅读 · 3 评论 -
简单testbench以及模拟图像代码
常见的循环语句的格式如下:initial块在testbench中的使用:forever必须写在initial块中always语句在testbench中的应用:生成周期为20的时钟testbench中仿真数据的生成需要说明的是一个程序模块可以有多个initial块和always块,每个innitai块和always块在仿真一开始立即同时执行,initial语...原创 2020-03-01 21:34:43 · 962 阅读 · 0 评论 -
verilog 生成块 generate - endgenerate
生成语句能够动态的生成verilog代码,这一声明语句方便了参数化模块的生成,当对矢量的多个位进行重复操作时,或者进行多个模块的实例引用的重复操作时,或者根据参数的定义来确定程序中是否应该包含某段verilog代码的时候,就能用到generate语句。 关键字:generate --endgenerate在verilog中有三种创建生成语句的方法: 1:循环...原创 2020-02-16 22:11:35 · 4391 阅读 · 0 评论 -
写给自己的2021
不以物喜不以己悲生活不会突变,你要做的只是耐心和积累。人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。你的时间有限,做喜欢的事情会令人愉悦,所以跟随自己的本心。...原创 2020-01-17 09:29:33 · 351 阅读 · 1 评论 -
quartus [IP-Core] altlvds_tx & altlvds_rx
1. 概述 Alter公司的QuartusII软件提供了LVDS发送和接收的IP核供我们使用,其在本质上可以理解为并行-串行数据的转换器。其在官方文档(见附件)上也这样说过。其中的应用场景有告诉AD/DA的数据传输等。 那在此我们就针对这一IP核进行了解、熟悉和测试。首先我们来对差分发送端进行学习。2. altlvds_tx 图2.1所示为一个简单的差分发...转载 2019-12-20 13:53:47 · 3685 阅读 · 2 评论 -
【转载】verilog:generate使用总结
转载自http://www.cnblogs.com/nanoty/archive/2012/11/13/2768933.htmlAbtract generate语句允许细化时间(Elaboration-time)的选取或者某些语句的重复。这些语句可以包括模块实例引用的语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。细化时间是指仿真开始前的一个阶段,此时所...转载 2019-12-06 12:44:44 · 1720 阅读 · 0 评论 -
Verilog——if语句的优先级问题
综合软件:Quartus II 一、有优先级的if语句if..else if.. else if … …else..语句中是有优先级的,第一个if具有最高优先级,最后一个else优先级最低。Quartus综合出的RTL图认为,最高优先级的电路靠近电路的输出,输入到输出的延时较短;最低优先级的电路远离输出端,输入到输出的延时较长。module single_if_late(A, C, C...转载 2018-07-27 21:54:20 · 14440 阅读 · 0 评论 -
边缘检测算法中利用板上按键对阈值实现动态控制
整个控制部分分为两个模块,按键消抖模块和阈值调节模块,下面先贴出来按键消抖模块的代码:接下来贴出阈值调整模块的代码:完成。原创 2018-07-31 22:54:15 · 1088 阅读 · 0 评论 -
FIR滤波原理及verilog设计
FIR(Finite Impulse Response)Filter:有限冲激响应滤波器,又称为非递归线性滤波器。FIR滤波器的冲击响应是一个值为滤波器抽头系数的采样序列,其脉冲响应由有限个采样值构成。长度(抽头数)为N+1、阶数为N的FIR系统的转移函数。FIR滤波器是如何滤波的?信号通过一个FIR滤波器其实就是信号与FIR滤波器的系数进行卷积(即移位相乘再累加)的过程。但是很多书上...原创 2018-08-28 17:17:33 · 15484 阅读 · 11 评论 -
UART串口通讯
先简单说说串口通信(UART),我做的这个实验只针对RS232标准,在fpga与上位机给出的rs232口之间通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。我们只关心RS232_TX和RS232_RX两个信号,RS232_TX是数据发送端口,RS232-RX是数据接受端口,简单的串口帧格式如图所示。帧格式为:1bit起始位,8bit数...原创 2018-08-24 23:18:48 · 14138 阅读 · 1 评论 -
同步串行与异步串行通信
转载:https://blog.csdn.net/u012160319/article/details/43486995串行通信是微机接口的一个重要组成部分,有着极其广泛的应用。随着微机特别是单片机的发展,其应用已从单机逐渐转向多机或联网,而多机应用的关键又在微机通信。微机通信有串行和并行两种通信方式,并行通信可以提高数据交换速度而串行通信可以节省系统资源,降低系统成本。串行通信又分为同步串行...转载 2018-09-14 14:38:46 · 34402 阅读 · 0 评论 -
更博,VIVADO 2017.3 setup debug 在线逻辑仿真
verilog debug 时,VIVADO(我使用的版本是2017.3)调用ILA核的方式有两种,这里介绍其中一种比较简单的方式,在要抓的信号前面加上标记。第一步:标记出来需要抓的信号这里重点说明一下,网络上绝大多数(几乎所有)的资料包括博客都是用(*mark_debug=''ture''*) 来标记要抓的信号,但是随着vivado版本的更新,这种标记语言已经不行了,正确的标记方式是(...原创 2018-12-08 10:49:16 · 3875 阅读 · 2 评论 -
高速双边沿数据转换单边沿数据输出
在处理常规速率双边沿数据时,一般的处理方法直接将数据的随路时钟倍频。但是如果数据的随路时钟已经很高的时候就不适合这么做了,下面是一种将双沿数据重新排序的方法。记录下来一方面自己学习,另一方面供网友参考。I_SER_CLK是双沿数据的随路时钟,I_SER_SYN是串行数据,temp_syn数据输出,testbench代码如下:...原创 2018-12-21 21:21:17 · 1858 阅读 · 6 评论 -
verilog generate—for语句用法
这篇博客转载自:https://wenku.baidu.com/view/b7d08952be23482fb4da4c15.html需要注意三点:① generate-for语句必须用genvar关键字定义for的索引变量;② for的内容必须用begin…end块包起来,哪怕只有一句;③ begin…end块必须起个名字;例如:一个参数化的gray-code to bina...转载 2018-12-24 15:00:13 · 11306 阅读 · 1 评论 -
vivado 编译&仿真 bug 集合(持续更新)
在CMV8000和ov7725这两个项目的工作过程中,遇到了各种各样的大小问题,有的出现在编译的时候,有的出现在debug的时候,有的出现在仿真的时候,林林总总,大致的总结一下,以后再遇到类似的问题可以少走弯路。我使用的软件环境是vivado 2017.3。1:使用vivado自带的仿真工具,仿真的时候出现只要一添加子模块里面的信号到波形窗口,波形窗口就卡死,等一会儿才稍微能动...原创 2019-01-17 15:32:25 · 7579 阅读 · 0 评论 -
quartus II 安装激活以及联合 modlsim仿真步骤整理
#首先安装Quartus Prime Standard和/或Pro 15.1软件:安装教程自行百度详细讲破解:# 第一步: 用Quartus_Prime_Standard_Pro_15.1_破解器.exe破解C:\altera\15.1\quartus\bin64下(Pro版路径很类似)的gcl_afcq.dll文件(运行Quartus_Prime_Standard_Pro_15.1...原创 2019-07-28 16:20:09 · 3751 阅读 · 0 评论 -
verilog中if与case语句不完整产生锁存器的问题
一、锁存器 锁存器是一种在组合电路系统中,对输入信号电平敏感的单元,用来存储信息。一个锁存器可以存储1bit的信息,通常,锁存器会多个一起出现,如4位锁存器,8位锁存器。 锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。...转载 2018-07-31 18:52:53 · 2532 阅读 · 1 评论 -
FPGA视频图像处理前——视频数据的捕获(产生shift_ram时钟使能信号)
fpga驱动sensor正常输出视频流数据,我们需要对图像数据进行处理,但是一般不会直接捕捉来自sensor的图像数据,而是要缓冲一下之后,待图像数据稳定以后再进行操作,这里的缓冲我们应该如何进行?crazybingo的方法是这样的,代码中加上我的理解和注释,方便学习回忆。...原创 2018-07-22 21:03:31 · 2424 阅读 · 0 评论 -
同步时序电路与异步时序电路,
同步时序电路与异步时序电路的区别:简而言之: 同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。 异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。 在这里我用D触发器来很明显的体现出同步和异步的区别。先...原创 2018-03-18 17:34:19 · 16317 阅读 · 0 评论 -
UART通信原理,以及它和RS232和COM口的关系
串口通信是电子工程师面对的最基本的问题,但是往往大家对UART,RS232, COM口这三者的关系理解的不是很透彻,百度他们的区别,网上各种网友自己本身一知半解,更不敢看做出的解答。于是下决心一定要搞清楚他们的关系。抽象的解释固然听起来高大上,但是往往出自已经对该问题有了比较深刻的理解的人之口。对于初学者,看到那些抽象的解释往往解决不了心中的疑惑。 在学习借鉴了好几篇博客和微...原创 2018-04-23 20:16:16 · 1418 阅读 · 0 评论 -
verilog中的可综合与不可综合
关于verilog可综合与不可综合,CSDN的博客大都借鉴了博主initialwei的关于可综合与不可综合的理解。博客链接:http://www.eefocus.com/initial_wei/blog/12-10/287444_c623b.html1)所有综合工具都支持的结构:always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,in...转载 2018-04-19 15:35:04 · 14892 阅读 · 0 评论 -
跨时钟域处理——专用握手信号
所谓握手,即通信双方使用了专用控制信号进行状态指示,这个控制信号既有发送域给接受域的也有接收域给控制域的,有别于单向控制信号方式。 使用握手协议方式处理跨时钟域数据传输时,只需要对双方的握手信号(req 和 ack)分别使用脉冲检测方法进行同步,在具体实现中,假设req ,ack, data,总线在初始化时都处于无效状态,发送域先把数据放入总线,随后发送有效的req信号给接收域...原创 2018-03-31 11:32:17 · 12289 阅读 · 0 评论 -
FPGA重要的设计思想——乒乓操作
乒乓操作是一个主要用于数据流控制的处理技巧,典型的乒乓操作如图所示: 外部输入数据流通过“输入数据选择控制”模块送入两个数据缓冲区中,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(Dual RAM),SRAM,SDRAM,FIFO等。 在第1个缓冲周期,将输入的数据流缓存到“数据缓冲1”模块,在第2个缓冲周期,“输入数据选择控制”模块将输入的数据流缓存到“...转载 2018-04-22 11:31:29 · 13772 阅读 · 3 评论 -
异步复位,同步释放——(异步信号亚稳态的解决办法)
在学习特权同学深入浅出玩转FPGA时,课本里面讲到,同步复位和异步复位都有其弊端。异步复位的弊端: 异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无 效)的话,可能会导致触发器输出的亚稳态。这里不得不说的是...原创 2018-04-05 16:29:34 · 11393 阅读 · 0 评论 -
verilog——序列检测器设计
首先要明白的是:序列检测器的作用就是将一个指定的序列从一个数字码流中提取出来,这篇博客要检测的是一个‘11001101’序列。程序中的data_in数据流输入,当状态为st7的时候认为检测到了‘11001101’序列。输出为1,否则为0。序列检测采用三段式状态机设计,三段式状态机将时序逻辑和组合逻辑分开,把状态和输出单独列开,方便检查和维护。序列检测代码: ...原创 2018-04-11 22:47:26 · 16329 阅读 · 5 评论 -
verilog-状态机设计
一,状态机的基本概念: 硬件设计讲究并行设计的思想,虽然用verilog描述的电路大都是并行实现的,但是对于实际的工程应用,往往需要让硬件来实现一些具有一定顺序的工作,这就要用到状态机的思想,什么是状态机呢?简单的说,就是通过不同的状态迁移来完成一些特定的顺序逻辑,硬件的并行性决定了用verilog描述的硬件实现都是并行执行的,那么如果希望分多个事件完成一个任务,怎么办?也许可以用多个...原创 2018-04-03 17:40:47 · 5284 阅读 · 1 评论 -
用 verilog 实现接受 1,2,5 分钱的卖报机,每份报纸 5 分钱。
下面我们用verilog实现一个自动贩卖机的程序,贩卖机能接收1,2,5分钱的投币(每个时钟的上升沿采样一次,即投币一次),din[2:0]: (din[0]:1 分钱,din[1]:2 分钱,din[2]:5 分钱),贩卖机设找零:dout[1:0],其中dout[1]=1表示找零1分钱,dout[0]表示输出一份报纸。手绘状态图:...原创 2018-04-15 22:22:36 · 3164 阅读 · 3 评论 -
TESTBENCH中关于变量的定义
在编写testbench时,关于变量的定义常犯的错误就是将一个定义好的全局变量应用到了两个不同的alwaya模块中,如下面exmp1所示,那么由于这两个always块独立并行的工作机制,很可能会导致意想不到的后果。exmp1:实际上,在verilog中(编写testbench)时 如果在begin end 之间定义了always的块名,那么可以如examp2一样申明变量,这样两个always...原创 2018-04-03 09:11:57 · 1676 阅读 · 0 评论 -
跨时钟域分析——单比特信号同步
处理跨时钟域的数据有单bit和多bit之分,而打两拍的方式常见于处理单bit数据的跨时钟域问题。打两拍本质就是定义两级寄存器对数据进行延拍。流程如下图所示:两级寄存器的原理:两级寄存是一级寄存的平方,两级并不能完全消除亚稳态危害,但是提高了可靠性减少其发生概率。总的来讲,就是一级概率很大,三级改善不大。信号同步的要求: 为了使同步工作能正常进行,从某个时钟域传来的信号应先通过原时钟域上的一个...原创 2018-04-09 23:00:20 · 7527 阅读 · 0 评论 -
查找表的原理与结构 什么是竞争与冒险现象?怎样判断?如何消除?
查找表的原理与结构: 查找表(look-up-table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有 4位地址线的16x1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查...原创 2018-04-09 20:45:49 · 4379 阅读 · 0 评论 -
常用的编译预处理命令
在verilog预言中,为了和一般的语句相区别,这些预处理命令以符号"`"开头(位于主键盘左上角,注意这个符号不同于单引号‘)这些预处理命令的有效作用范围为定义命令之后到本文件结束或到其他命令替代该命令之处,verilog HDL提供了很多预编译命令: `accelerate, `autoexpand_vectornets, `celldefine, `default_nettype, `defi...原创 2018-04-19 17:43:17 · 2770 阅读 · 0 评论