返回verilog中重置时的初始语句

返回verilog中重置时的初始语句,verilog,Verilog,我正在学习Verilog,我想知道,如果重置,是否有返回初始语句的方法?类似于下面的伪代码: initial begin do initial stuff end always @(posedge clock) begin if(reset) go back to initial else do stuff end end 如果可能的话,键入的次数会少很多。我能想到的一种方法是使用ROM,并在重置时再次使用存储的值 您可以使用

我正在学习Verilog,我想知道,如果重置,是否有返回初始语句的方法?类似于下面的伪代码:

initial begin
    do initial stuff
end

always @(posedge clock) begin
    if(reset)
        go back to initial
    else 
        do stuff
    end
end

如果可能的话,键入的次数会少很多。

我能想到的一种方法是使用ROM,并在重置时再次使用存储的值

您可以使用任务:

task init_stuff;
    begin
       /* do initial stuff */
    end
endtask

initial begin
    init_stuff;
end

always @(posedge clock) begin
    if(reset) begin
        init_stuff;
    end else begin
        /* do stuff */
    end
end

然而,对于可合成代码,您应该非常小心使用“initial”。根据您的目标体系结构,它只能用于初始化ROM(ASIC)或可能创建具有非常敏感的上电复位行为和其他奇怪特性(FPGA)的电路。

您是在寻找可合成的东西,还是仅用于一般建模?您好,dave_59。是的,它必须是可合成的。你能不能补充一下,为什么你只想重设首字母。嗨,@Morgan。这只是一种好奇,因为很多时候,我的初始状态等于重置状态,然后我认为如果我可以返回初始状态,而不是在重置过程中重复大量代码,那么可以节省一些输入。@wdinize,我发现有一个或另一个更常见,以前从未见过两者同时使用,虽然两者都在FPGA上并没有什么错
initial
适用于FPGA初始状态,ASIC上使用异步复位,连接到上电复位电路。好的,我知道了。我试试这个。我需要的是初始化一些寄存器的值,如果请求重置,则返回该值。我所做的是键入与初始值完全相同的重置块,然后我认为必须有一些命令返回初始值。