【发布时间】:2018-05-21 16:18:40
【问题描述】:
我是 Verilog 的新手。我正在尝试检测 FPGA 上 ADC 的输入信号的峰峰值电压。在此之前,我想测试一个简单但相似的代码,它可以找到一组 4 位并行输入的最小值和最大值。
最初我将pk_low 和pk_high 指定为第一个输入,这取决于即将到来的输入pk_low 和pk_high 应该改变还是保持不变。但在模拟中我看到pk_low 的值始终为0。pk_high 和pp_voltage(峰峰值电压)是未知的(X)。
有什么问题?
module peak_voltage (clk, parallel_in, pk_high, pk_low, pp_voltage);
input clk;
input wire [3:0] parallel_in;
output reg [3:0] pk_high;
output reg [3:0] pk_low;
output wire [3:0] pp_voltage;
reg state;
parameter st0 = 'd0;
parameter st1 = 'd1;
parameter st2 = 'd2;
initial begin
state = st0;
pk_high <= parallel_in;
pk_low <= parallel_in;
end
always @ (posedge clk) begin
if (parallel_in > pk_high)begin
state = st1;
end else if (parallel_in < pk_low) begin
state = st2;
end else begin
state = st0;
end
end
always @(*) begin
case (state)
st0: begin
pk_low <= pk_low;
pk_high <= pk_high;
end
st1: begin
pk_low <= pk_low;
pk_high <= parallel_in;
end
st2: begin
pk_low <= parallel_in;
pk_high <= pk_high;
end
endcase
end
assign pp_voltage = pk_high - pk_low;
endmodule
【问题讨论】:
-
错误太多了,建议你看看其他一些Verilog代码。尤其是如何使用时钟、阻塞与非阻塞分配、复位。还要始终添加您的测试台。见stackoverflow.com/help/mcve
-
对不起。我从来没有使用过测试台。我正在使用 Quartus 软件中的功能仿真进行仿真。我的第一个总是阻塞的分配应该是非阻塞的吗?
标签: verilog adc analog-digital-converter