在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6789|回复: 19

[活动] Xilinx 7系列FPGA使用之CLB探索【再续】

[复制链接]
发表于 2012-6-18 18:50:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近有幸与Xilinx的FAE交流了一次,收益颇多,其中讲到了Xilinx FPGA的内部结构,进一步加深了我对FPGA的认识。在Xilinx 7系列FPGA使用之CLB探索和(续)Xilinx 7系列FPGA使用之CLB探索中学习了CLB结构,竟然忽略了一个重要结构:多路复用器(multiplexer),在一个Slice中包含有三个多路复用器:F7MUXA、F7MUXB和F8MUX。其中F7MUXA组合LUT A和LUT B成为7输入LUT,F7MUXB组合LUT C和LUT D成为7输入LUT,而F8MUX组合1个Slice中的4个LUT成为8输入LUT。因此通过F7MUXA、F7MUXB和F8MUX的搭配,1个Slice可以实现4:1、8:1和16:1多路复用器,如图1、2、3所示。
Snap1.jpg
图1 4:1 Multiplexer
Snap2.jpg
图2 8:1 Multiplexer
Snap3.jpg
图3 16:1 Multiplexer
        在FPGA设计中需要多路选择时,可充分考虑此结构,比如地址译码电路,1个Slice最大能充当16:1的MUX,当超过16路选择时该如何处理呢?下面以实例来分析一下:
        首先来看一下16:1的地址译码,程序如下,如图4所示为综合结果



  1. module mux16_1(
  2.     input clk,
  3.     input rst,
  4.     input [3:0] addr,
  5.     input [15:0] din,
  6.     output do
  7.     );
  8. reg dout;
  9. always@(posedge clk)
  10.         if(rst)
  11.                 dout<=1'b0;
  12.         else
  13.                 case(addr)
  14.                 4'b0000: dout<=din[0];
  15.                 4'b0001: dout<=din[1];
  16.                 4'b0010: dout<=din[2];
  17.                 4'b0011: dout<=din[3];
  18.                 4'b0100: dout<=din[4];
  19.                 4'b0101: dout<=din[5];
  20.                 4'b0110: dout<=din[6];
  21.                 4'b0111: dout<=din[7];
  22.                 4'b1000: dout<=din[8];
  23.                 4'b1001: dout<=din[9];
  24.                 4'b1010: dout<=din[10];
  25.                 4'b1011: dout<=din[11];
  26.                 4'b1100: dout<=din[12];
  27.                 4'b1101: dout<=din[13];
  28.                 4'b1110: dout<=din[14];
  29.                 4'b1111: dout<=din[15];
  30.                 endcase
  31.                
  32. assign do=dout;
  33. endmodule


复制代码
Snap4.jpg
图4
        与期望的相同,16:1 多路复用器可以通过4个LUT、2个F7MUX和1个F8MUX组合得到。
        如果需要实现大于16:1的多路复用器该如何实现呢?试一下32:1,看综合器得到什么结果,程序如下,综合结果如图5所示。



  1. module mux32_1(
  2.     input clk,
  3.     input rst,
  4.     input [4:0] addr,
  5.     input [31:0] din,
  6.     output do
  7.     );

  8. reg dout;
  9. always@(posedge clk)
  10.         if(rst)
  11.                 dout<=1'b0;
  12.         else
  13.                 case(addr)
  14.                 5'b00000: dout<=din[0];
  15.                 5'b00001: dout<=din[1];
  16.                 5'b00010: dout<=din[2];
  17.                 5'b00011: dout<=din[3];
  18.                 5'b00100: dout<=din[4];
  19.                 5'b00101: dout<=din[5];
  20.                 5'b00110: dout<=din[6];
  21.                 5'b00111: dout<=din[7];
  22.                 5'b01000: dout<=din[8];
  23.                 5'b01001: dout<=din[9];
  24.                 5'b01010: dout<=din[10];
  25.                 5'b01011: dout<=din[11];
  26.                 5'b01100: dout<=din[12];
  27.                 5'b01101: dout<=din[13];
  28.                 5'b01110: dout<=din[14];
  29.                 5'b01111: dout<=din[15];
  30.                 5'b10000: dout<=din[16];
  31.                 5'b10001: dout<=din[17];
  32.                 5'b10010: dout<=din[18];
  33.                 5'b10011: dout<=din[19];
  34.                 5'b10100: dout<=din[20];
  35.                 5'b10101: dout<=din[21];
  36.                 5'b10110: dout<=din[22];
  37.                 5'b10111: dout<=din[23];
  38.                 5'b11000: dout<=din[24];
  39.                 5'b11001: dout<=din[25];
  40.                 5'b11010: dout<=din[26];
  41.                 5'b11011: dout<=din[27];
  42.                 5'b11100: dout<=din[28];
  43.                 5'b11101: dout<=din[29];
  44.                 5'b11110: dout<=din[30];
  45.                 5'b11111: dout<=din[31];
  46.                 endcase
  47.                
  48. assign do=dout;
  49. endmodule


复制代码
Snap5.jpg
图5
        实现32:1多路复用器使用了3个Slice,是4:1(Slice 1、Slice 2)和8:1(Slice 3)多路复用器的级联,综合器自动分析多路复用器达到了最优化的组合。
Snap6.jpg
图6
        如图6所示为32:1多路复用器数据路径的延时报告,其中LUT6和F7MUX的延时分别为0.049ns、0.192ns,LUT6与F7MUX之间的走线延时为0ns,相比于红框中的0.548ns忽略不计了,因为红框中的Net Delay是Slice外部的走线延时,LUT6与F7MUX之间的走线在Slice内部。因此,利用F7MUX、F8MUX实现的多路复用器缩短了逻辑延时,有利于时序收敛。
发表于 2012-7-6 12:04:08 | 显示全部楼层
做過好多年的FPGA設計,主要集中在算法和實現,從來沒有在CLB級糾纏過太久。之是知道些基本的概念,設計的時候基本用不到。也許會遇到Timing不能Close的設計,需要深入研究這個。多謝分享。
发表于 2012-7-21 20:14:19 | 显示全部楼层
excellent, great
发表于 2012-7-26 22:36:50 | 显示全部楼层
多谢楼主啊 学校了
发表于 2012-7-28 14:57:58 | 显示全部楼层
不错,可以用大的选择器了
发表于 2012-8-5 20:12:02 | 显示全部楼层
看看看!!!!!
发表于 2012-8-13 12:52:54 | 显示全部楼层
我想要学习一下。
发表于 2012-8-16 21:31:35 | 显示全部楼层
学习中
发表于 2012-8-17 20:33:38 | 显示全部楼层
good good good
发表于 2012-8-19 17:39:13 | 显示全部楼层
器件更新得好快,只用过V6,芯片的结构很重要,优化过后的设计性能比简单实现好很多,也许这也是高级工程师跟初级工程师的一个区别吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 08:54 , Processed in 0.030950 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表