verilog语法错误(HDLCompiler:806)

verilog语法错误(HDLCompiler:806),verilog,Verilog,我是Verilog的新手,不断地遇到这些编译错误。我用谷歌搜索了错误,但没有得到答案。这是我的代码和错误 always @(*) begin //seed=32'habcd123cd;//assigning seed if(posedge axi_clk & first[0]) begin load_seed=1'b1; end if(load_seed) begin first[1]=1'b1;

我是Verilog的新手,不断地遇到这些编译错误。我用谷歌搜索了错误,但没有得到答案。这是我的代码和错误

always @(*) begin
     //seed=32'habcd123cd;//assigning seed
     if(posedge axi_clk & first[0]) begin
          load_seed=1'b1;
     end

     if(load_seed) begin
          first[1]=1'b1;
     end

     if(negedge axi_clk & first[1]) begin
          load_seed=1'b0;
          first=2'b00;
     end
 end
我的错误

错误:HDLCompiler:806-“K:/final project/codes/v2/input\u arbiter.v”第252行:“posedge”附近的语法错误。
错误:HDLCompiler:806-“K:/final project/codes/v2/input\u arbiter.v”第258行:“negedge”附近的语法错误。
错误:HDLCompiler:598-“K:/final project/codes/v2/input\u arbiter.v”第46行:由于以前的错误,模块被忽略


您以错误的方式使用了
posedge
/
negedge
。这些关键字应在始终块的敏感度列表中使用,例如:

always @(posedge clk)

始终@(*)
用于描述组合逻辑或逻辑门。你想要达到的是顺序逻辑

您还应该知道(请参阅主题)

当您在边缘敏感始终块中分配寄存器时,您定义的是触发器。FPGA没有可以在时钟两侧触发的触发器这就是为什么您需要两个单独的always块,每个时钟边缘一个,然后找到一种方法来组合这两个块的输出而不产生故障


请注意,您也可以在
initial
中使用posedge/negedge,并在测试台代码中使用其他块(如
initial begin…@(posedge clk));谢谢您的回答。正如您所说,我制作了两个始终块,一个用于负边缘,另一个用于正边缘,效果很好。
always @(negedge clk)