bdf中连一根线,Total Logic Elements突然增加很多
时间:10-02
整理:3721RD
点击:
module getValue1(input clk,
input [7:0]datinB,
input ntrig,
input rdclk,
input [2:0] type1,
input type_en,
input req,
output reg [7:0] datout,
output reg [11:0]rdaddr,
output reg busy,
output reg RDY=0,
output reg [11:0] wraddr
);
reg [2:0] TYPE=4;
reg ntrig_next,busy_next,req_next,startWr; //用于判断边沿,start标识边沿后持续时间段(标识一帧)
reg [2:0] startRd;
reg [7:0] datinB_next; //datinA_next,用于判断过零点
reg [15:0] zeroB[50:0]; //起/始像素点(过零点 pixel)
reg [7:0] averB[25:0];//
reg [7:0] memB[4095:0];
reg [7:0]index_Bz,index_Bs ;//过零点 pixel 数组下标
reg [7:0] index_Bv;//过零点 pixel 数组下标
reg [15:0]index_Bm;//非零像素数组下标
reg startBz;//非零区段标识
reg [7:0] widthB;//
reg [31:0] sumB;//sumA,
reg [15:0]len_memB,len_Rd,len_zeroB;//
reg [7:0] len_averB;//
always @(posedge clk)
begin
//下降沿触发延时,延时一帧处理
ntrig_next 0)) //起始点
begin
startBz 0)&&(datinB==0))//终了点
begin
startBz 0)&&((wraddr-zeroB[index_Bs]) 2)&&(widthB 0)&&(widthB 0)
begin
memB[index_Bm]=datinB;//自memA[2]开始存数据,[0:1]用于存长度
index_Bm =3647))
begin
startWr 0)//
begin
datout >1][15:8];
if(rdaddr[0]==1) datout >1][7:0];
end
3'h5://读取平均值数组B
datout =len_Rd)&&(rdaddr!=0))//if(rdaddr>=len_Rd)//
begin
startRd<=0;
RDY<=0;
rdaddr<=0;
len_Rd<=0;
end
end
endmodule
主要占用资源的是以上模块,加上后Total Logic Elements由10%直接增加到94%,芯片型号是cyclone 4 E系列。
图中,如果不把typeA[2..0]连接到getvalue1,Total Logic Elements只用了10%,连接上后,Total Logic Elements直接飙到了94%,请问是哪里出了问题,还是getvalue1模块的问题,getvalue1中的代码有什么优化的方法可以减少Total Logic Elements的使用。
input [7:0]datinB,
input ntrig,
input rdclk,
input [2:0] type1,
input type_en,
input req,
output reg [7:0] datout,
output reg [11:0]rdaddr,
output reg busy,
output reg RDY=0,
output reg [11:0] wraddr
);
reg [2:0] TYPE=4;
reg ntrig_next,busy_next,req_next,startWr; //用于判断边沿,start标识边沿后持续时间段(标识一帧)
reg [2:0] startRd;
reg [7:0] datinB_next; //datinA_next,用于判断过零点
reg [15:0] zeroB[50:0]; //起/始像素点(过零点 pixel)
reg [7:0] averB[25:0];//
reg [7:0] memB[4095:0];
reg [7:0]index_Bz,index_Bs ;//过零点 pixel 数组下标
reg [7:0] index_Bv;//过零点 pixel 数组下标
reg [15:0]index_Bm;//非零像素数组下标
reg startBz;//非零区段标识
reg [7:0] widthB;//
reg [31:0] sumB;//sumA,
reg [15:0]len_memB,len_Rd,len_zeroB;//
reg [7:0] len_averB;//
always @(posedge clk)
begin
//下降沿触发延时,延时一帧处理
ntrig_next 0)) //起始点
begin
startBz 0)&&(datinB==0))//终了点
begin
startBz 0)&&((wraddr-zeroB[index_Bs]) 2)&&(widthB 0)&&(widthB 0)
begin
memB[index_Bm]=datinB;//自memA[2]开始存数据,[0:1]用于存长度
index_Bm =3647))
begin
startWr 0)//
begin
datout >1][15:8];
if(rdaddr[0]==1) datout >1][7:0];
end
3'h5://读取平均值数组B
datout =len_Rd)&&(rdaddr!=0))//if(rdaddr>=len_Rd)//
begin
startRd<=0;
RDY<=0;
rdaddr<=0;
len_Rd<=0;
end
end
endmodule
主要占用资源的是以上模块,加上后Total Logic Elements由10%直接增加到94%,芯片型号是cyclone 4 E系列。
图中,如果不把typeA[2..0]连接到getvalue1,Total Logic Elements只用了10%,连接上后,Total Logic Elements直接飙到了94%,请问是哪里出了问题,还是getvalue1模块的问题,getvalue1中的代码有什么优化的方法可以减少Total Logic Elements的使用。
模块连线与资源使用情况在附件图中。
小编,你好!我也遇到了类似的问题,不知道你解决了吗,想问一下为什么。我邮箱sdxuliming@126.com.谢谢啊,有问题多交流!
typeA是不是就是代码里的type? 然后代码里clk和rdclk分别是多少M?如果是高频的时钟频率你的代码有异步时钟域之间的信号交互情况,例如len_zeroB,这样很容易引入不稳定状态;但是不是会造成资源消耗增加就不好说了,
程序我没有细看,我猜想你是不是之前的程序很多倍综合了,加了一根线后才是正常的?我之前遇到过,找到的原因是这个