累加器verilog语言编程问题

刚刚接触FPGA,编程方面也不是很擅长。今天做了一个累加器的verilog编程,仿真波形图一直出错,想请大神指教一下错误的原因,十分感谢!我要实现的累加器功能是:连续输入... 刚刚接触FPGA,编程方面也不是很擅长。今天做了一个累加器的verilog编程,仿真波形图一直出错,想请大神指教一下错误的原因,十分感谢!
我要实现的累加器功能是:连续输入几百个gary_value,每满15个gary_value输出一个累加结果,同时累加器清零。我写的代码如下:
module accumulator (clk, rst_n,a_en,gary_value,accumulation);
input clk, rst_n;
input a_en; //累加启动使能,高有效
input [7:0] gary_value;
output [15:0] accumulation;
reg [15:0] accum_i;
reg[5:0] accum_k;
reg [15:0] accumulation;
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
accum_k <= 0;
accum_i <= 0;
end
else if(a_en)
begin
if(accum_k==8'd16)
begin
accumulation <= accum_i;
accum_i <= 0;
accum_k <= 0;
end
else if(accum_k!=8'd16)
begin
accum_i <= accum_i + gary_value;
accum_k <= accum_k+1;
end
else
accum_k <= 0;
end
end
endmodule
展开
 我来答
czxcpp
推荐于2018-03-20 · TA获得超过150个赞
知道答主
回答量:24
采纳率:0%
帮助的人:29.7万
展开全部
两个问题:
1、accum_k==8'd16
等你发现计数器已经等于16,实际信号输出时已经又过了一个时钟周期了,相当于每逢17个数输出一次。
accum_k从0开始到14一共才是十五个,即accum_k==14时就应该输出并清零了。
2、else
accum_k <= 0;
你的使能信号是怎么定义的?使能的作用应该是:有效时正常工作;无效时什么都不做,但保持原有状态(即寄存器的值)。使能无效时对仅仅计数器清零是不对的,如果要清零,累加器也应该一起清零,这样就成了reset,并不是使能的功能。因此,这句else画蛇添足
供参考
375629943
2015-05-23 · TA获得超过334个赞
知道小有建树答主
回答量:382
采纳率:0%
帮助的人:291万
展开全部
仿真波形图出的什么错描述一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式