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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3821|回复: 9

[求助] 写了一个直方图均衡化的程序,但是不能综合,不知道是哪里出了问题,请大神指点

[复制链接]
发表于 2016-7-5 19:01:41 | 显示全部楼层 |阅读模式

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

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

x
module hist(clk,rst,im_input,im_output);
input clk;
input rst;
input [7:0] im_input;
output [7:0] im_output;

reg [7:0] im_output;
reg [14:0] hist_cnt [0:255];    //灰度计数,存入RAM
reg [14:0] hist_acc [0:255];   //灰度累加
reg [7:0] mem [0:16383];   //  存储像素值
reg [7:0] reshape[0:255];  //重新定义的灰度
reg[24:0] acul_reg;
reg [7:0] out_reg;
reg hist_cnt_en,hist_acc_en,cal_en,cal_over;
reg [14:0] i;
reg [8:0] j;
reg [8:0] k;
reg [14:0] l;
integer index;
parameter rate=10'b11_1111_1011;


always @(posedge clk or negedge rst)

begin

if(!rst)

begin

for(index=0; index<9'd256; index=index+1)

begin

hist_cnt[index]<=0;

hist_acc[index]<=0;

end

end

end






always @ (posedge clk or negedge rst)

begin

if(!rst)

begin

i<=0;

j<=1;

k<=0;

l<=0;

hist_cnt_en<=1;

hist_acc_en<=0;

cal_en<=0;

cal_over<=0;

end

else if(hist_cnt_en==1)

begin

mem[i]<=im_input;

hist_cnt[im_input]<=hist_cnt[im_input]+1;

i<=i+1;

if(i==16384)

begin

hist_cnt_en<=0;

hist_acc_en<=1;

cal_en<=0;

cal_over<=0;

hist_acc[0]<=hist_cnt[0];

end

end

else if(hist_acc_en<=1)

begin

hist_acc[j]<=hist_acc[j-1]+hist_cnt[j];

j<=j+1;

if(j==256)

begin

hist_cnt_en<=0;

hist_acc_en<=0;

cal_en<=1;

cal_over<=0;

end

end

else if(cal_en==1)

begin

acul_reg<=hist_acc[k]*rate;

reshape[k]<=acul_reg[23:16];

k<=k+1;

if(k==256)

begin

hist_cnt_en<=0;

hist_acc_en<=0;

cal_en<=0;

cal_over<=1;

end

end



else if(cal_over==1)

begin

out_reg<=reshape[mem[l]];

im_output<=out_reg;

l<=l+1;

   if(l==16384)

begin

hist_cnt_en<=1;

hist_acc_en<=0;

cal_en<=0;

cal_over<=0;

end

end

end




endmodule




综合时出现问题:Map:116 - The design is empty.  No processing will be done.
ERROR:Map:52 - Problem encountered processing RPMs.

感觉不知道是哪里出了问题
发表于 2016-7-6 13:51:05 | 显示全部楼层
这个写法是典型的软件思维,要理解可综合的verilog是描述语言,描述的是硬件模块的功能和连接关系,在写之前的时候就要知道电路的样子,而不是写完后让工具看看能不能综合。
发表于 2016-7-6 14:04:36 | 显示全部楼层
out_reg<=reshape[mem[l]]; 这样的语句,需要多少MUX或者比较器才能实现,考虑过吗?
发表于 2016-7-6 14:04:37 | 显示全部楼层
典型软件工程师的写法啊,呵呵。
不能在不同的进程中对同一变量赋值,数组的序号不能为变量。。。
发表于 2016-7-14 20:54:44 | 显示全部楼层
for循环要用计数器来实现  不能用软件思维串行方式来描述硬件
发表于 2016-7-15 15:24:04 | 显示全部楼层
多多学习别人的代码怎么写的,再开始RTL吧,不然写出来的都是坑
发表于 2016-7-15 15:27:54 | 显示全部楼层
软件工程师其实可以试试C转Verilog,cadence和mentor都有这样的工具,比自己学习Verilog RTL要靠谱
发表于 2016-10-4 10:07:01 | 显示全部楼层
可以用ip核啊,不然太浪费资源,而且for循环是不可综合的语句
发表于 2021-2-14 12:31:23 | 显示全部楼层


huster 发表于 2016-7-6 14:04
典型软件工程师的写法啊,呵呵。
不能在不同的进程中对同一变量赋值,数组的序号不能为变量。。。 ...


請問 不能這樣用嗎?
reshape[mem[l]];

我寫這種 QUALTUS 可以綜合
不能這樣寫
那要怎樣寫?

不是固定值
要列舉所有的嗎?
发表于 2021-4-9 11:35:46 | 显示全部楼层
reg [14:0] hist_cnt [0:255];    //灰度计数,存入RAM
reg [14:0] hist_acc [0:255];   //灰度累加
reg [7:0] mem [0:16383];   //  存储像素值
reg [7:0] reshape[0:255];  //重新定义的灰度

这种写法FPGA资源会被你占用完的,而且综合工具会很费劲的往下走,同意楼上几位说的,用ram实现你的变量定义。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 20:34 , Processed in 0.036181 second(s), 9 queries , Gzip On, Redis On.

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