【问题标题】:verilog Syntax error(HDLCompiler:806)verilog 语法错误(HDLCompiler:806)
【发布时间】:2015-08-18 18:17:15
【问题描述】:

我是 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_arbiter.v”第 252 行:“posedge”附近的语法错误。
错误:HDLCompiler:806 -“K:/final project/codes/v2/input_arbiter.v”第 258 行:“negedge”附近的语法错误。
ERROR:HDLCompiler:598 - "K:/final project/codes/v2/input_arbiter.v" Line 46: Module 由于先前的错误而被忽略。

【问题讨论】:

    标签: verilog


    【解决方案1】:

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

    always @(posedge clk)
    

    always @(negedge clk)
    

    always @(*) 用于描述组合逻辑或逻辑门。您要实现的是顺序逻辑。

    你也应该知道(请参考this话题)

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

    【讨论】:

    • 请注意,您还可以在 initial 和其他块中使用 posedge/negedge 测试台代码(例如 initial begin ... @(posedge clk); a <= 1'b1; ... 之类的东西)
    • 感谢您的回答。正如您所说,我总是让两个挡住一个用于负边缘,另一个用于正边缘。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多