我是Verilog的新手。我试图在FPGA上检测ADC输入信号的峰峰值电压。在此之前,我想测试一个简单但相似的代码,该代码可以找到4位并行输入的最小值和最大值。
最初,我已将dict = {'hi':0, 'hi2':1, 'lskdjf':2}
和pk_low
指定为第一个输入,具体取决于即将发生的输入pk_high
和pk_low
应更改或保持不变。但在模拟中,我发现pk_high
值始终为0. pk_low
和pk_high
(峰峰值电压)未知(X)。
有什么问题?
pp_voltage
答案 0 :(得分:0)
您已将此编码为状态机,您应该为您的案例选择器进行连续分配。分配3位可以制作单热矢量。
您在此逻辑中有非阻塞分配 - 您需要对组合逻辑使用阻塞。
您缺少峰值高/低值的任何显式存储。也许你可以用这种风格推断出一些闩锁,但你的意思并不清楚。
定义一些由clk计时的触发器,具有非阻塞分配。在每个周期中捕获更新的结果。
请记住,verilog并行执行所有语句,您不应该考虑执行顺序。而是考虑明确捕获结果,并计算这些结果的“下一个”值。
您可以将代码视为:
你做错了(1)错了,完全错过了(3)。将代码(1)和(2)组合在一起可能是有意义的,但这取决于你想要表达函数的方式。
assign new_level = (in > level) ? in : level;