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