如何在verilog中控制两个不同程序块中的标志?

如何在verilog中控制两个不同程序块中的标志?,verilog,Verilog,我想在进入程序块#1后升起一个标志,并在另一个程序块中将其重置为零。当然,我会得到一个错误,说标志是由太多的驱动程序驱动的。我怎样才能克服这个问题 块1,对sw(FPGA板开关)敏感: 区块2,对CLK敏感: always @ (posedge CLK) begin if (counter2 == x2) begin counter2 <=0; flag=0; end el

我想在进入程序块#1后升起一个标志,并在另一个程序块中将其重置为零。当然,我会得到一个错误,说标志是由太多的驱动程序驱动的。我怎样才能克服这个问题

块1,对sw(FPGA板开关)敏感:

区块2,对CLK敏感:

always @ (posedge CLK)

        begin

        if (counter2 == x2)
        begin
        counter2 <=0;
        flag=0;
        end

        else
        counter2 <= counter2 +1;

        end
始终@(posedge CLK)
开始
如果(计数器2==x2)
开始

计数器2一种方法是设置和重置标志,以及监听这些标志的FSM

localparam S_RESET = 2'b0;
localparam S_SET   = 1'b1;
reg state;

always @(posedge clk) begin
  case ({flag_set, flag_reset})
    2'b00 : state <= state;
    2'b01 : state <= S_RESET;
    2'b10 : state <= S_SET;
    2'b11 : state <= S_SET; //Choose priority
  endcase
end

不代表硬件,将不可合成<代码>标志
基于触发模拟器,而不是基于输入的值。

NB:如果您的案例陈述中有“不在乎”,则应使用
casez
localparam S_RESET = 2'b0;
localparam S_SET   = 1'b1;
reg state;

always @(posedge clk) begin
  case ({flag_set, flag_reset})
    2'b00 : state <= state;
    2'b01 : state <= S_RESET;
    2'b10 : state <= S_SET;
    2'b11 : state <= S_SET; //Choose priority
  endcase
end
always @ (sw)
  flag =1;