VHDL

基于FPGA的高精度同步时钟系统设计

作者:谌普江,龚光华 1.清华大学 工程物理系,北京100084;2.清华大学 粒子技术与辐射成像教育部重点实验室;3.清华大学 飞思卡尔培训中心

摘要: 介绍了精密时钟同步协议(PTP)的原理。本文精简了该协议,设计并实现了一种低成本、高精度的时钟同步系统方案。该方案中,本地时钟单元、时钟协议模块、发送缓冲、接收缓冲以及系统打时标等功能都在FPGA中实现。经过测试,该方案能够实现ns级同步精度。该方案成本低,并且易于扩展,非常适合局域网络时钟同步的应用领域。

在很多大型物理实验和工业应用中,时钟同步技术都扮演着举足轻重的作用。比如在中国四川锦屏暗物质探测实验中,需要为多个独立探测装置提供相应的时间信息,这些探测器包括中心探测器(HpGe)、液氩反符合探测器、实验室外部宇宙线反符合探测器[1]。又比如在大亚湾中微子实验中,需要为三个实验厅的子探测器提供同步时钟和时间戳,也需要为未来的长基线中微子振荡实验提供同步时钟和时间戳[2]。

Xilinx 更新了三项语言课程:“采用 Verilog 进行设计”、“采用 SystemVerilog 进行验证” 和 “采用 VHDL 进行设计”。这些全面的课程详尽地介绍了各语言。重点是编写可靠的可综合代码,以及足够的仿真代码以编写可行的测试平台。本课程通过将精辟的演讲与实验相结合来加强对主要概念的理解。了解更多 » 

VHDL数据类型的转换

在VHDL程序中,不同类型的对象不能代入,因此要进行类型转换.类型转换的方法有:

(1)类型标记法.用类型名称来实现关系密切的标量类型之间的转换.
例如: VARIABLE x:INTEGER;
VARIABLE y:REAL;
使用类型标记(即类型名)实现类型转换时,可采用赋值语句:
x :=INTEGER(y); y :=REAL(x).

(2)类型函数法.
VHDL程序包中提供了多种转换函数,使得某些类型的数据之间可以相互转换,以实现正确的赋值操作.常用的类型转换函数有:
★CONV_INTEGER ( ):将STD_LOGIC_VECTOR类型转换成
INTEGER类型.
★CONV_STD_LOGIC_VECTOR( ):将INTEGER类型,UNSIGNED
类型或 SIGNED类型转换成STD_LOGIC_VECTOR类型.
★TO_BIT ( ): 将STD_LOGIC类型转换成BIT类型.
★TO_BIT_VECTOR( ):将STD_LOGIC_VECTOR类型转换
BIT_VECTOR 类型.
★TO_STD_LOGIC( ): 将BIT类型转换成STD_LOGIC类型.
★TO_STD_LOGIC_VECTOR( ): 将BIT_VECTOR类型转换成
STD_LOGIC_VECTOR类型.

VHDL中的BUFFER的使用

VHDL中BUFFER与INOUT有什么区别呢?首先INOUT完全是双向的,也就是

INOUT:=IN+OUT,对INOUT属性的PIN既可以写出也可以读入,他有2个寄存器,如

...

port(a:inout std_logic);

...

signal ccc,ddd:bit

process(clk)

begin

...

a<=ccc;此时端口a为CCC的值

...

ddd<=a;读入端口a此时的信号

BUFFER: 一般比较少用,它实际上输出的功能与out一样,他只有1个寄存器,而此时读入的却是上次从该口输出的值,比如:

port(a:buffer std_logic);

...

signal ccc,ddd:bit

process(clk)

begin

...

a<=ccc;此时端口a为CCC的值

...

ddd<=a;读入到ddd的值其实等于ccc的值。(如果中间没有给a赋新值的话)。

摘要: 为改变采用CPU 控制矩阵键盘导致CPU 资源利用下降及引脚不足的现状,介绍了一种基于FPGA 的矩阵键盘控制器的开发。在ISE13.4 开发环境下,采用VHDL 硬件语言开发了一种能有效防止机械式矩阵键盘按键抖动带来的数据错误; 实现矩阵键盘的自动扫描、编码、存储、输出等功能; 并将输入的数据依次在8 个7 段数码管上进行显示的矩阵键盘控制器。将所设计的VHDL 控制器配置到开发的硬件电路系统上,验证了各项功能设计的正确性。

在便携式电子设备中有着广泛应用的矩阵键盘,一般利用单片机对其进行扫描控制,大大降低了单片机处理其它信息的能力,造成资源的浪费。利用FPGA 强大的逻辑处理能力及丰富的引脚,本文设计了基于FPGA 的矩阵键盘控制器,主要包括矩阵键盘抗抖动模块、扫描模块、译码模块、存储模块以及数码管显示模块,同时将矩阵键盘输入的数据通过7 段数码管进行显示。

UART在FPGA上的设计与实现

摘 要:在基于FPGA芯片的工程实践中,经常需要FPGA与上位机或其他处理器进行通信,为此设计了用于短距离通信的UART接口模块。该模块的程序采用VHDL语言编写,模块的核心发送和接收子模块均采用有限状态机设计,详述了各子模块的设计思路和方法,给出了它们的仿真时序图。综合实现后,将程序下载到FPGA芯片中,运行正确无误。又经长时间发送和接收测试,运行稳定可靠。相对参数固定的设计,该UART的波特率、数据位宽、停止位宽、校验位使能及校验模式选择均可以在线设置,为FPGA与其他设备的通信提供了一种可靠途径,具备较强的实用价值。

基于FPGA 的内置并行CRC 校验的UART

摘要:基于串行异步收发器(UART)的通信中经常用到循环冗余校验(CRC),常见的CRC校验电路多为串行校验, 校验所需时钟周期较多, 基于查找表或输入矩阵转换的并行算法,需要存储余数表,占用大量的硬件资源。该文利用输入和校验多项式的逻辑关系,成功地将基于字节的并行CRC校验算法运用于UART控制器中,在Xilinx公司的可编程门阵列(FPGA)芯片上验证通过,可实现连续多个字节校验。校验一个bit需要1/8时钟周期,降低了校验所需时钟频率,提高了通信的效率,保证了通信的可靠性。

基于FPGA的内置并行CRC校验的UART

摘要:基于串行异步收发器(UART)的通信中经常用到循环冗余校验(CRC),常见的CRC校验电路多为串行校验, 校验所需时钟周期较多, 基于查找表或输入矩阵转换的并行算法,需要存储余数表,占用大量的硬件资源。该文利用输入和校验多项式的逻辑关系,成功地将基于字节的并行CRC校验算法运用于UART控制器中,在Xilinx公司的可编程门阵列(FPGA)芯片上验证通过,可实现连续多个字节校验。校验一个bit需要1/8时钟周期,降低了校验所需时钟频率,提高了通信的效率,保证了通信的可靠性。

UART 广泛应用于工业通信控制领域。在通信过程中经常需要在数据末尾加入CRC 校验码,保证数据传输的可靠性。CRC 校验码是一种有效但很简单的编码技术, 由于其检出概率高和易于硬件实现,在移动通信、计算机、USB 等领域得到了广泛应用,传统的硬件实现方式是采用串行移位的方式对接收到的每个bit 依次进行校验,校验每个bit 需要8 个时钟周期。CRC 校验的并行算法有查找表法和基于查找表法而导出的一些方法,但这些方法均需要存储长度较大的CRC 余数表,其性能较低。直接利用输入字节数据和多项式的逻辑关系, 推导出CRC 的逻辑表达式,方法直接、简洁[2]。将并行字节CRC 校验机制引入到基于UART 的数据通信中,实现了基于字节的CRC 并行校验, 校验每个bit 需要1/8 时钟周期。目前此方案已成功运用于采集和监控系统中。

VHDL中变量(Variable)和信号(Signal)的区别

信号(signal) 变量(variable)
赋值: <= : =

定义: 在结构体中 在进程中

适用范围: 全局 某个进程中

延迟: 有 无

赋值: 在进程结束时 立即赋值

注意几点:

1、变量是在进程结束的时候赋值,所以你在进程中多次赋值只取最后一次

2、因为fpga是个process并行处理,所以一个变量只能在一个进程中赋值,否则会出错。

VHDL语言中buffer与inout的区别(转载)

INOUT为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。也可以从此端口读入数据,即输入。

BUFFER为缓冲端口,功能与INOUT类似,区别在于当需要读入数据时,只允许内部回读内部产生的输出信号,即反馈。举个例子,设计一个计数器的时候可以将输出的计数信号定义为BUFFER,这样回读输出信号可以做下一计数值的初始值,要是定义为inout先前的值就被覆盖了!

buffer属于双向端口,既允许读数据,也允许写数据。但规定该端口只有一个源,不允许多重驱动,不与其它实体的输出端口、双向端口相连。它的驱动源可以是其它实体的缓冲端口,也可以是设计实体的内部信号源。它可以用于反馈,在实体内部建立一个可读的缓冲端口。

就是说buffer 仅仅是一个数据缓存器,不能用于IO输出!

同步内容