verilog高级语法-原语-ibuf-obuf-LUT

概述:

原语直接操作FPGA的资源,对FPGA的结构更加清晰,使用原语之前需要对FPGA的资源进行了解,本节为初识原语

学习内容

1. 输入缓冲原语 IBUF

2. 输出缓冲原语 OBUF

3. 查找表原语    LUT

1. IBUF,OBUF原语简介

输入输出端口必须添加缓冲后才能进入FPGA内部逻辑,用于与外部隔离。功能就是起到缓冲隔离的作用。

代码

  IBUF   b_IBUF (
    .I(b),
    .O(b_IBUF_3)
  );
  OBUF   c_OBUF (
    .I(c_OBUF_7),
    .O(c)
  );

结构图

 

2. LUT查找表简介

代码 一个 c1=a|b逻辑功能的查找表代码如下

  LUT2 #(
    .INIT ( 4'hE ))
  c11 (
    .I0(a_IBUF_1),
    .I1(b_IBUF_3),
    .O(c1_OBUF_6)
  );

端口简介,LUT2也就是有2个输入地址线,分别对应组合逻辑的两个输入a,b。o为输出端口,也就的是得到的结果c1。具体功能就通过设计.INIT(4'hX)的值来决定,具体的功能看真值表的输出值,直接填上去。原理就是输入地址线的最小项的权重组成的数值。a|b的针织表如下图,也就是4'b1110≡4'hE。所以.INIT (4‘hE)就是这么来的

真值表

RTL结构图

技术原理图

3. verilog c代码与原语代码比较

c代码

module primitive1(
	input a,b,
	output c,c1
    );
assign c = a&b;
assign c1 = a|b;

endmodule

原语代码


module primitive1 (
  a, b, c, c1
);
  input a;
  input b;
  output c;
  output c1;
  wire a_IBUF_1;
  wire b_IBUF_3;
  wire c1_OBUF_6;
  wire c_OBUF_7;
  LUT2 #(
    .INIT ( 4'hE ))
  c11 (
    .I0(a_IBUF_1),
    .I1(b_IBUF_3),
    .O(c1_OBUF_6)
  );
  LUT2 #(
    .INIT ( 4'h8 ))
  c1_2 (
    .I0(a_IBUF_1),
    .I1(b_IBUF_3),
    .O(c_OBUF_7)
  );
  IBUF   a_IBUF (
    .I(a),
    .O(a_IBUF_1)
  );
  IBUF   b_IBUF (
    .I(b),
    .O(b_IBUF_3)
  );
  OBUF   c_OBUF (
    .I(c_OBUF_7),
    .O(c)
  );
  OBUF   c1_OBUF (
    .I(c1_OBUF_6),
    .O(c1)
  );
endmodule

RTL结构图

技术原理图

3. 总结

1. ibuf,obuf是端口缓冲,所有与外部相连接的端口都需要添加,用于电气隔离

2. FPGA使用LUT查找表实现组合逻辑,具体的功能可以通过设置.INIT中的值来实现,设置的值就是真值表的输出结果。

3. 原语是直接对FPGA电路结构进行操作和连接,设计开发效率比较低,但是他可以更好的利用底层资源进行设计,可以获得更加灵活的设计。

相关推荐

  1. Verilog基本语法概述

    2023-12-16 08:28:03       63 阅读
  2. FPGA | Verilog基础语法

    2023-12-16 08:28:03       68 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-16 08:28:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-16 08:28:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-16 08:28:03       87 阅读
  4. Python语言-面向对象

    2023-12-16 08:28:03       96 阅读

热门阅读

  1. ARM JTAG 调试原理

    2023-12-16 08:28:03       61 阅读
  2. 分布式文件存储系统minio了解下

    2023-12-16 08:28:03       62 阅读
  3. C 语言中,结构体「.」与「->」的区别

    2023-12-16 08:28:03       59 阅读
  4. react函数组件中Hooks和ahooks的区别

    2023-12-16 08:28:03       73 阅读
  5. 管道C语言(蓝桥杯题库,暴力解决)

    2023-12-16 08:28:03       60 阅读
  6. android项目实战之数据绑定的数据更新

    2023-12-16 08:28:03       58 阅读
  7. 智能网联汽车场景数据图像标注要求及方法

    2023-12-16 08:28:03       53 阅读
  8. he server selected protocol version TLS10 is not accepted问题

    2023-12-16 08:28:03       56 阅读
  9. Windows 10/11 免费安装HEVC/H.265视频扩展

    2023-12-16 08:28:03       222 阅读
  10. 大语言模型--数据

    2023-12-16 08:28:03       61 阅读
  11. MySQL 是什么?

    2023-12-16 08:28:03       58 阅读