当前位置:   article > 正文

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

ibuf

概述:

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

学习内容

1. 输入缓冲原语 IBUF

2. 输出缓冲原语 OBUF

3. 查找表原语    LUT

1. IBUF,OBUF原语简介

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

代码

  1. IBUF b_IBUF (
  2. .I(b),
  3. .O(b_IBUF_3)
  4. );
  5. OBUF c_OBUF (
  6. .I(c_OBUF_7),
  7. .O(c)
  8. );

结构图

 

2. LUT查找表简介

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

  1. LUT2 #(
  2. .INIT ( 4'hE ))
  3. c11 (
  4. .I0(a_IBUF_1),
  5. .I1(b_IBUF_3),
  6. .O(c1_OBUF_6)
  7. );

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

真值表

RTL结构图

技术原理图

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

c代码

  1. module primitive1(
  2. input a,b,
  3. output c,c1
  4. );
  5. assign c = a&b;
  6. assign c1 = a|b;
  7. endmodule

原语代码

  1. module primitive1 (
  2. a, b, c, c1
  3. );
  4. input a;
  5. input b;
  6. output c;
  7. output c1;
  8. wire a_IBUF_1;
  9. wire b_IBUF_3;
  10. wire c1_OBUF_6;
  11. wire c_OBUF_7;
  12. LUT2 #(
  13. .INIT ( 4'hE ))
  14. c11 (
  15. .I0(a_IBUF_1),
  16. .I1(b_IBUF_3),
  17. .O(c1_OBUF_6)
  18. );
  19. LUT2 #(
  20. .INIT ( 4'h8 ))
  21. c1_2 (
  22. .I0(a_IBUF_1),
  23. .I1(b_IBUF_3),
  24. .O(c_OBUF_7)
  25. );
  26. IBUF a_IBUF (
  27. .I(a),
  28. .O(a_IBUF_1)
  29. );
  30. IBUF b_IBUF (
  31. .I(b),
  32. .O(b_IBUF_3)
  33. );
  34. OBUF c_OBUF (
  35. .I(c_OBUF_7),
  36. .O(c)
  37. );
  38. OBUF c1_OBUF (
  39. .I(c1_OBUF_6),
  40. .O(c1)
  41. );
  42. endmodule

RTL结构图

技术原理图

3. 总结

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/676494
推荐阅读
相关标签
  

闽ICP备14008679号