算术平均值

时间:2012-11-17 18:58:44

标签: algorithm vhdl

我需要设计一个在输入端接受n个数字的电路(无限输入)并计算这些数字的平均值作为输出。输入的数字只能是<0,15>的值。 我需要用VHDL实现这个电路,但我找不到合适的算法,因为我需要它来设计逻辑模式。我知道我肯定需要一个4位加法器和一些寄存器来存储值。我试图用移动平均原理来理解这个问题,但它根本不起作用。

2 个答案:

答案 0 :(得分:1)

对于输入n+1,值x,平均值将等于(average*n+x)/(n+1) - &gt; ...... = average + (next - average)/(n+1)。 根据这一观察结果,可以推导出一种简单的算法:

  1. 将所有寄存器初始化为0
  2. 获取下一个输入并将其存储在临时寄存器
  3. 将计数寄存器增加1
  4. 从临时登记册中减去以前的平均值
  5. 按计数划分临时寄存器
  6. 将温度添加到平均值
  7. 转到第2步

答案 1 :(得分:1)

让我们看看,你需要输入端口:reset,input [3:0],clock;输出:平均值[3:0]和内部寄存器累加器[a:0]和计数[c:0]。 我不记得我的VHDL和Verilog的语法,但是......

无论何时获得输入,都需要将其添加到累加器,将计数递增1,然后将平均值设置为累加器除以计数。 复位时,设置累加器并计数为零。 如果你知道递增的最大值是countmax,那么累加器需要足够大到孔countmax * 15并且count必须有足够的位来保持countmax。 这也将为您提供分隔符的大小。 如果countmax未知,那么你需要添加一个溢出输出,并在累加器溢出时设置它,并在复位时取消设置。

希望有所帮助。