我目前正在研究一个verilog项目,这个部分给我带来了一些问题。
module adjust_voltage(
input up,
input down,
input CLK,
input max,
input min,
output reg [11:0] TEMP_DATA_A = 12'h7FF,
output reg [11:0] TEMP_DATA_B = 12'h000
);
wire up_pulse;
wire down_pulse;
debounce db1(up, CLK, up_pulse);
debounce db2(down, CLK, down_pulse);
wire voltage_pulse;
assign voltage_pulse = up_pulse^down_pulse;
wire voltage_pulse;
assign voltage_pulse = up_pulse^down_pulse;
always @ (posedge voltage_pulse) begin
if(max == 1 && min == 0) begin
if(TEMP_DATA_A >= 12'hF83)
TEMP_DATA_A = up_pulse ? 12'hFFF : TEMP_DATA_A - 12'h07C;
else if(TEMP_DATA_A <= 12'h07C)
TEMP_DATA_A = up_pulse ? TEMP_DATA_A + 12'h07C : 12'h000;
else
TEMP_DATA_A = up_pulse ? TEMP_DATA_A + 12'h07C : TEMP_DATA_A - 12'h07C;
if(TEMP_DATA_A < TEMP_DATA_B)
TEMP_DATA_A = TEMP_DATA_B;
end
end
end module
代码对我来说太长了,而且我不太确定如何为verilog制作一个最低限度可行的代码,因为我刚开始学习它而事先抱歉。
基本上在这个模块中,up_pulse和down_pulse是来自我的按钮的去抖动输入。 'max'和'min'是我的2个开关。每当我的最大开关打开并且最小开关打开时,我希望能够使用向上和向下按钮来改变我的TEMP_DATA_A。按下向上时,我想将值增加124.当按下向下时,我想将值减小124.但是,我不希望变量超过12'hFFF或低于12'h000。另外,我不希望TEMP_DATA_A的值低于TEMP_DATA_B(也可以更改但不显示)。
我面临的问题是,当我在我的FPGA上执行此操作时,按下向上按钮时增量为768然后如果再次按下则增量为256,再次按下则增加768并增加再次按下时为256(2047 [初始] - > 2815 - > 3071 - > 3839 - > 4095 [最大])。但是,当我按下向下按钮时它会正常工作,减少124。 有人可以帮我这个吗?谢谢!