FPGA设计
文章平均质量分 61
主要总结分享FPGA的点点滴滴
第二层皮-合肥
知识在于积累,分享也是总结。
曾在合肥科大讯飞、国科天迅、新华三集团就任硬件及FPGA工程师。主要分享数十年来的学习及工作经验。
展开
-
PCIE链路信息
Devcap:该字段2:0主要存放 max_payload_size support.该字段主要放置设备支持的max_payload_size support参数的大小。在PCIe设备中,max_payload_size_support 和max_payload_size不一定相同,前一个是设备所能支持的最大值,后一个是两者协商的结果。PCIe有很多寄存器,也有很多控制,包括链路状态信息,上一节我们讲到了PCie的链路训练,这节文章将继续学习PCIe相关知识。文章从实际案例出发,逐渐学习更深的知识。原创 2023-08-05 20:01:40 · 383 阅读 · 0 评论 -
PCIe总线的链路训练
LTSSM是链路训练里面一个比较重要的状态机。在进行总线链路训练时,将使用LTSSM状态机。总共由11个状态组成,如下图PCie链路的初始化过程较为复杂,Pcie总线进行链路训练时,将初始化Pcie设备的物理层,发送接收模块和相关的链路状态信息,当链路训练成功结束后,PCIe链路两端的设备可以进行通讯。链路训练主要由硬件逻辑完成,而无需系统软件的参与。此外当PCie设备从低功耗状态返回到正常工作模式时,或者PCie出现错误时,也需要进行重新连接。原创 2023-07-17 18:36:14 · 1234 阅读 · 1 评论 -
verilog always的用法
always语句块从仿真0时刻开始执行其中的行为语句;最后一条执行完成后,再开始执行其中的第一条语句,如此往复循环,直到整个仿真结束。因此,always语句块常用于对数字电路中一组反复执行的活动进行建模。always和 always@(*) 的区别有@时,是每次执行语句时,必须满足括号内的条件才能继续执行语句,否则不执行。always@(敏感事件列表) 用于描述时序逻辑;敏感事件(上升沿 posedge、下降沿 negedge);或电平。Always@(a)原创 2023-07-09 19:52:53 · 5444 阅读 · 3 评论 -
Verilog parameter的用法
parameter”是Verilog HDL中的一个关键字,代表着参数型常量,即用parameter来定义一个标识符代表一个常量,这样可以提高程序的可读性与可维护性。原创 2023-07-06 20:45:29 · 4472 阅读 · 4 评论 -
嵌入式开发之 JESD204B
JESD204B链路的确定性延迟定义为串行数据从发送器(ADC或源端FPGA)的并行帧数据输入传播至接收器(DAC或接收端FPGA)并行去帧数据输出所需的时间。该时间通常以分辨率为帧时钟周期或以器件时钟进行测量。JESD204B的确定性延迟规格没有考虑到ADC模拟前端内核或DAC后端模拟内核的情况。它只基于输入和输出JESD204B数字帧的数据。不仅两个有源器件在这种延迟计算中作为函数使用,与两个器件接口的空间信号路由也将作为函数参与计算。原创 2023-04-27 10:43:11 · 714 阅读 · 0 评论 -
Latch和Register区别?行为描述中Latch如何产生?
latch是电平触发,reg是边沿触发。时序设计中尽量使用reg触发。行为描述中,如果对应所有可能输入条件,有的输入没有对应明确的输出,系统会综合出latch。always@(posedge clk or negedge rst_n)begin //case语句没有default。always@( a or b) //缺少else语句。原创 2023-04-27 09:08:59 · 758 阅读 · 0 评论 -
跨时钟域处理-多bit
握手指的是两个设备之间通信的一种方式,用来通信的信号就是握手信号。可以看到因为有握手控制,可以确保数据的正确传输,不会丢失。跨时钟域的握手设计就是利用握手控制这种优势,从而避免因为跨时钟域引起的数据传输错误。设备1看到设备2的ready为1,它知道设备2已经接收好数据了,将valid置0同时撤销数据,准备下一次发送。设备1将valid信号置1,告诉设备2,数据准备就绪了,请查收;1:可以采用保持寄存器加握手信号的方法(多数据,控制,地址);设备2空闲了,将ready信号置1接收设备1的数据;原创 2023-04-26 14:56:36 · 372 阅读 · 0 评论 -
FPGA基础代码复用
总的来说,使用generate确实对代码的整体结构,以及调试提供了很大的方便,各位可以在编写代码的过程中多多使用。parameter 参数名=表达式;或者 localparam 参数名=表达式;(2) for里面的内嵌语句,必须写在begin_end里面;(1) 必须使用genvar定义一个正整数变量;(3) begin_end需要定义名字。函数内部语句只能写组合逻辑。原创 2023-04-20 14:04:48 · 593 阅读 · 0 评论 -
FPGA基础循环语句
while循环的每次迭代之前都会判断指定条件是否满足,如果为真,就执行条件内的循环代码块;注意注意,for循环在正式FPGA设计中部分情况下可综合,其余几个循环语句均不可综合,主要用于testbench。verilog的循环语句主要有:for循环、while循环、foever循环和repeat循环。本文主要介绍verilog常用的循环语句,循环语句的用途,主要是可以多次执行相同的代码或逻辑。创建一个从 0 到 3 的integer型变量,然后在循环的每次迭代中打印这个变量的值。说明: 循环执行条件。原创 2023-04-20 13:54:36 · 2256 阅读 · 0 评论 -
FPGA基本语法
每个模块的内容都是嵌在module和endmodule两个语句之间,一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能。memory型定义:reg [n-1:0] 存储器名[m-1:0];localparam 参数名1=表达式,参数名2=表达式, …parameter 参数名1=表达式,参数名2=表达式, …reg型定义为:reg [n-1:0] 数据名1,数据名2,…1) 算术运算符(+,-,×,/,%)3) 关系运算符(>,=,原创 2023-04-20 13:47:44 · 1847 阅读 · 0 评论 -
FPGA开发之HDMI Transmitter接口设计
如下图,由三组TMDS通道和一组TMDS clock通道组成,TMDS clock的运行频率是video信号的pixel频率,在每个cycle,每个TMDS data通道发送10bit数据。协议起源于DVI协议,并在许多方面与DVI协议相同,包括物理TMDS链路、活动视频编码算法和控制令牌定义。HDMI通过传输辅助数据(InfoFrames)和音频,承载了比DVI多得多的数据视频消隐期间的数据。首先大致分为三部分:编码,并转串,时钟生成。原创 2023-04-13 19:05:35 · 829 阅读 · 0 评论 -
FPGA时序分析
一个典型的时序模型由发起寄存器,组合逻辑,和捕获寄存器三部分组成,从而形成源时钟路径,数据路径,目的时钟路径。发起沿河捕获沿:说到发起沿,就是提到捕获沿,通常两者查一个时钟周期,同时捕获沿也是下一个发起沿。时钟到达时间:这里的时钟指的是捕获寄存器的时钟,扔以发起沿作为基准点,时钟到达时间的计算式为。建立时间的数据需求时间:对于建立时间而言,其数据需求时间的计算式为。保持时间的数据需求时间:对于保持时间而言,其数据需求时间的计算。数据到达时间:以发起沿为时间基准点,数据到达时间的计算式为。原创 2023-04-09 19:49:16 · 197 阅读 · 0 评论