请教一个spartan-6 LUT利用的问题
请各位大侠帮忙分析解答。
我把之前的在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了
