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

时间:2015-10-11 10:28:22

标签: verilog

一旦我进入程序块#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

假设所有初始化都已完成。

1 个答案:

答案 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; 基于触发模拟器而不是基于输入的值。