我需要设计一个在输入(无限输入)处接受 n 个数字并计算这些数字的平均值作为输出的电路。输入的数字只能是 <0,15> 的值。我需要用 VHDL 实现这个电路,但我找不到合适的算法,因为我需要它来设计逻辑模式。我知道我肯定需要一个 4 位加法器和一些寄存器来存储这些值。我试图使用移动平均原理来理解这个问题,但它根本不起作用。
问问题
917 次
2 回答
1
对于输入n+1
,使用 value x
,平均值将等于(average*n+x)/(n+1)
--> ... = average + (next - average)/(n+1)
。从这个观察可以得出一个简单的算法:
- 将所有寄存器初始化为0
- 获取下一个输入并将其存储在临时寄存器中
- 将计数寄存器增加 1
- 从临时寄存器中减去以前的平均值
- 将临时寄存器除以计数
- 将温度添加到平均值
- 转到第 2 步
于 2012-11-17T19:13:20.733 回答
1
让我们看看,您需要作为输入端口:reset、input[3:0]、clock;输出:average[3:0] 和内部寄存器 accumulator[a:0] 和 count[c:0]。我现在不记得我的 VHDL 和 Verilog 的语法了,但是......
每当您获得输入时,您需要将其添加到累加器中,将计数加 1,然后将平均值设置为累加器除以计数。复位时将累加器和计数设置为零。如果您知道递增值的最大数量是 countmax,那么累加器需要足够大以容纳 countmax*15,并且 count 必须有足够的位来保存 countmax。这也将为您提供分隔线的大小。如果 countmax 未知,那么您需要添加溢出输出并在累加器溢出时设置它并在复位时取消设置。
希望有帮助。
于 2012-11-17T19:48:37.697 回答