微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一个spartan-6 LUT利用的问题

请教一个spartan-6 LUT利用的问题

时间:10-02 整理:3721RD 点击:

请各位大侠帮忙分析解答。

    我把之前的在spartan-3a上实现的代码,放到spartan-6上综合后发现,所占的LUT比在spartan-3a上用的还多。本来spartan-6是6输入查找表应该用的少才对,感觉两块片子的架构不一样。经过分析发现问题出现在一段代码上,mcu通过总线对fpga内部寄存器操作,就是通过地址区分不同的寄存器,对各种寄存器进行赋值。这个操作两种器件所利用的LUT的数目区别很大。

下面的程序是我做了个近似的例子,根据地址对两个寄存器赋值。结果资源利用情况spartan-3a只用了9个LUT,spartan-6却用了36个LUT。如下图所示。请大家帮忙分析下,代码上需要做些什么改进。

module test(

output[15:0]      do1,                                                                       

output[15:0]      do2,                              

output[15:0]      addr_lock,

input[15:0]       di,

input clk,

input rst,

input ale,

inout[15:0]     data,

input wr,

input rd

);

reg        rd1;

reg        wr1;

reg[15:0]       do_int;

reg[15:0]       di_reg;

reg[15:0]       do_reg1;

reg[15:0]       do_reg2;

wire[15:0]      addr;

reg[15:0]       data_out;

assign  addr = (ale) ? data :addr;

assign  data = (~rd )? data_out : 16'hzzzz;

assign  addr_lock = addr;

always@(posedge clk or negedge rst)

  if(~rst) begin

    rd1<= 1'b1;

    wr1<= 1'b1;

   end

  else begin

    rd1<= rd;

    wr1<= wr;

   end  

always@(posedge clk or negedge rst)

  if(~rst) begin

     do_reg1 <= 'd0;

            do_reg2 <= 'd0;

           end

  else

    if(rd1&&~rd)

     case(addr)

     16'd1:  do_reg1 <= data;

     16'd2:  do_reg2 <= data;

     endcase

assign do1 = do_reg1;

assign do2 = do_reg2;

endmodule  





问题急需解决,请高手指教



    FPGA的单元是LUT,LUT组成SLICE,各款器件的SLICE由几个LUT组成可能不一样,你的仿真结果正确吗,如果正确就没什么问题了

复位用高电平同步复位试一下,spartan-3我是不清楚,不过spartan-6推荐高电平同步复位,如果低电平复位,需要另外的lut来将rst取反,占用额外的lut。

看看UserGuide吧,我记得这两个结构是有区别的

S6加强了对速度的优化,把选项改成面积优化就只有4个lut了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top