一旦我进入程序块#1,我想要一个标志,我想在另一个程序块中将它重置为零。当然我得到一个错误,说该标志是由太多的驱动程序驱动的。我怎样才能克服这个问题?
块1,对sw敏感(FPGA板开关):
always @ (sw)
flag =1;
begin
case (sw)
8'bxxxxxx01: x2= 13'd1249;
8'bxxxxxx10: x2= 13'd2499;
8'bxxxxxx11: x2= 13'd3749;
endcase
end
第2块,对CLK敏感:
always @ (posedge CLK)
begin
if (counter2 == x2)
begin
counter2 <=0;
flag=0;
end
else
counter2 <= counter2 +1;
end
假设所有初始化都已完成。
答案 0 :(得分:0)
一种方法是设置和重置标志以及监听这些标志的FSM。
using Microsoft.EntityFrameworkCore;
但请注意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)
,即带有自动敏感列表。这表示组合的硬件块,所有输出应基于输入(或触发器)。
我希望这清楚表明:
always @(*)
不代表硬件,也不可合成。 always @ (sw)
flag =1;
基于触发模拟器而不是基于输入的值。