Verilog峰值检测

时间:2018-05-19 21:40:35

标签: verilog adc analog-digital-converter

我是Verilog的新手。我试图在FPGA上检测ADC输入信号的峰峰值电压。在此之前,我想测试一个简单但相似的代码,该代码可以找到4位并行输入的最小值和最大值。

最初,我已将dict = {'hi':0, 'hi2':1, 'lskdjf':2} pk_low指定为第一个输入,具体取决于即将发生的输入pk_highpk_low应更改或保持不变。但在模拟中,我发现pk_high值始终为0. pk_lowpk_high(峰峰值电压)未知(X)。

有什么问题?

pp_voltage

1 个答案:

答案 0 :(得分:0)

您已将此编码为状态机,您应该为您的案例选择器进行连续分配。分配3位可以制作单热矢量。

您在此逻辑中有非阻塞分配 - 您需要对组合逻辑使用阻塞。

您缺少峰值高/低值的任何显式存储。也许你可以用这种风格推断出一些闩锁,但你的意思并不清楚。

定义一些由clk计时的触发器,具有非阻塞分配。在每个周期中捕获更新的结果。

请记住,verilog并行执行所有语句,您不应该考虑执行顺序。而是考虑明确捕获结果,并计算这些结果的“下一个”值。

您可以将代码视为:

  1. 检查高或低的更新
  2. 计算新值
  3. 捕获新值
  4. 你做错了(1)错了,完全错过了(3)。将代码(1)和(2)组合在一起可能是有意义的,但这取决于你想要表达函数的方式。

    assign new_level = (in > level) ? in : level;