Menu Close

Xilinx原语及使用方法

原语,其英文名字为Primitive,是Xilinx针对其器件特征开发的一系列常用模块的名字,用户可以将其看成Xilinx公司为用户提供的库函数,类似于C++中的“cout”等关键字,是芯片中的基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT,D触发器,RAM等,相当于软件中的机器语言。在实现过程中的翻译步骤时,要将所有的设计单元都转译为目标器件中的基本元件,否则就是不可实现的。原语在设计中可以直接例化使用,是最直接的代码输入方式,其和HDL语言的关系,类似于汇编语言和C语言的关系。

1. 如何Vivado环境下找到原语

以时钟原语例化为例进行介绍,由于原语与器件有关,因此在使用原语时,应清楚知道工程开发所需要的器件家族(Device family),本文所采用的器件为ARTIX 7 系列。

  • 打开Vivado工程(或新建工程),打开文本编辑器(Text Editor),在文本编辑器上方的工具栏中有灯泡状的工具(language template),如图1所示

%title插图%num

图1  language template工具

  • 点击language template 工具,打开的界面如图2所示,在图2中选择对应的语言,这里选择Verilog

%title插图%num

图2  选择需要的原语

原语中总共有5个类别,分别为Verilog,VHDL,System Verilog,XDC以及Debug 。开发者根据不同的需求选择自己需要的类别。

  • 找到Device primitive instantiation(器件原语例化)并展开
  • 选择Artix7并展开
  • 选择clock components并展开
  • 选择Clock Buffers并展开,可以看到与时钟相关的各种缓冲器的原语,可以复制使用,也可用来学习。

Xilinx公司提供的原语,涵盖了FPGA开发的常用领域,但只有相应配置的硬件才能执行相应的原语,并不是所有的原语都可以在任何一款芯片上运行。在Verilog中使用原语非常简单,将其作为模块名直接例化即可。

Xilinx公司的原语按照功能分为10类,包括:计算组件、I/O端口组件、寄存器和锁存器、时钟组件、处理器组件、移位寄存器、配置和检测组件、RAM/ROM组件、Slice/CLB组件以及G比特收发器组件。下面对几个常用时钟组件进行简单介绍,其余组件的使用方法是类似的。

1.全局时钟缓冲器BUFG
BUFG是具有高扇出的全局时钟缓冲器,一般由综合器自动推断并使用。全局时钟是具有高扇出驱动能力的缓冲器,可以将信号连到时钟抖动可以忽略不计的全局时钟网络,BUFG组件还可应用于典型的高扇出信号和网络,如复位信号和时钟使能信号。如果要对全局时钟实现PLL或DCM等时钟管理,则需要手动例化该缓冲器。其例化的代码模板如下所示:

// BUFG: 全局时钟缓存(Global Clock Buffer),只能以内部信号驱动
BUFG BUFG_inst (
.O(O), //时钟缓存输出信号
.I(I) // /时钟缓存输入信号
);

2. 差分输入缓冲IBUFDS

IBFUDS可以在I/O components选项中找到。IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。

/ /IBUFDS: 差分输入缓冲器(Differential Input Buffer)
IBUFDS #(
.DIFF_TERM(“FALSE”),
.IOSTANDARD(“DEFAULT”)
// 指定输入端口的电平标准,如果不确定,可设为DEFAULT
) IBUFDS_inst (
.O(O), // 时钟缓冲输出
.I(I), // 差分时钟的正端输入,需要和顶层模块的端口直接连接
.IB(IB) // 差分时钟的负端输入,需要和顶层模块的端口直接连接
);

3. OBUFDS原语
OBUFDS将标准单端信号转换成差分信号,输出端口需要直接对应到顶层模块的输出信号,和IBUFDS为一对互逆操作。

// OBUFDS: 差分输出缓冲器(Differential Output Buffer)
OBUFDS #(
.IOSTANDARD(“DEFAULT”)// 指名输出端口的电平标准
) OBUFDS_inst (
.O(O), // 差分正端输出,直接连接到顶层模块端口
.OB(OB), // 差分负端输出,直接连接到顶层模块端口
.I(I) // 缓冲器输入
);

还有许多简单以用的原语,在设计时非常实用,如接口类DDR register, 语言模板类generate for等,在后续的知识点中会有更详细的介绍。

Posted in FPGA, FPGA, FPGA, 元器件, 文章, 资料区

发表评论

相关链接