在quartus中使用verilog代码进行增量和减量

在quartus中使用verilog代码进行增量和减量,verilog,microprocessors,intel-fpga,Verilog,Microprocessors,Intel Fpga,我的项目是设计一个verilog代码,该代码在7段HEX0、HEX1、HEX2、HEX3上给出一个输出,当在电路板1上按下按钮键0时,输出必须增加1,当使用Altera board Cyclone II-EP2C35F672按下按钮键1时,输出必须减少 我实现了1乘1的增加,但当我尝试用相同的逻辑减少时,我会得到不相关的输出。能给我一个解决这个问题的方法吗 我的verilog代码是: 当灵敏度列表描述为posedge in时,模拟将无法识别[1]中的提升边缘。只有LSB将被监控。而是使用按位操作

我的项目是设计一个verilog代码,该代码在7段HEX0、HEX1、HEX2、HEX3上给出一个输出,当在电路板1上按下按钮键0时,输出必须增加1,当使用Altera board Cyclone II-EP2C35F672按下按钮键1时,输出必须减少

我实现了1乘1的增加,但当我尝试用相同的逻辑减少时,我会得到不相关的输出。能给我一个解决这个问题的方法吗

我的verilog代码是:


当灵敏度列表描述为posedge in时,模拟将无法识别[1]中的提升边缘。只有LSB将被监控。而是使用按位操作来检测按键的时间,并将其用作时钟信号

wire gen_clk = |in; // bitwise OR
always @(posedge gen_clk) begin
  if (in[0]) tmp <= tmp + 1'b1;
  else if (in[1) tmp <= tmp - 1'b1;
end

wire gen_clk = &in; // bitwise AND
always @(posedge gen_clk) begin
  if (in[0]) tmp <= tmp + 1'b1;
  else if (in[1) tmp <= tmp - 1'b1;
end

你所说的无关输出是什么意思?
wire gen_clk = |in; // bitwise OR
always @(posedge gen_clk) begin
  if (in[0]) tmp <= tmp + 1'b1;
  else if (in[1) tmp <= tmp - 1'b1;
end

wire gen_clk = &in; // bitwise AND
always @(posedge gen_clk) begin
  if (in[0]) tmp <= tmp + 1'b1;
  else if (in[1) tmp <= tmp - 1'b1;
end
input [3:0] in;
output [6:0] out;
reg [6:0] out; // out needs to be a reg

always @* begin
  case(in)
    4'h0 : out = ZERO;
    4'h1 : out = ONE;
    // ...
    4'hE : out = FOURTEEN;
    4'hF : out = FIFTEEN;
    default: out = BLANK;
  endcase
end