我需要设计一个在输入端接受n个数字的电路(无限输入)并计算这些数字的平均值作为输出。输入的数字只能是<0,15>的值。 我需要用VHDL实现这个电路,但我找不到合适的算法,因为我需要它来设计逻辑模式。我知道我肯定需要一个4位加法器和一些寄存器来存储值。我试图用移动平均原理来理解这个问题,但它根本不起作用。
答案 0 :(得分:1)
对于输入n+1
,值x
,平均值将等于(average*n+x)/(n+1)
- &gt; ...... = average + (next - average)/(n+1)
。
根据这一观察结果,可以推导出一种简单的算法:
答案 1 :(得分:1)
让我们看看,你需要输入端口:reset,input [3:0],clock;输出:平均值[3:0]和内部寄存器累加器[a:0]和计数[c:0]。 我不记得我的VHDL和Verilog的语法,但是......
无论何时获得输入,都需要将其添加到累加器,将计数递增1,然后将平均值设置为累加器除以计数。 复位时,设置累加器并计数为零。 如果你知道递增的最大值是countmax,那么累加器需要足够大到孔countmax * 15并且count必须有足够的位来保持countmax。 这也将为您提供分隔符的大小。 如果countmax未知,那么你需要添加一个溢出输出,并在累加器溢出时设置它,并在复位时取消设置。
希望有所帮助。