“为什么我在”附近出现语法错误;否则";在verilog中的断言?

“为什么我在”附近出现语法错误;否则";在verilog中的断言?,verilog,assert,hdl,Verilog,Assert,Hdl,我正在尝试运行一个测试台,它是为一个名为ODIN的神经形态芯片编写的。 在Xilinx ISE中输入此代码。我犯了一些毫无意义的错误。以下是代码的一部分: $display("----- Starting verification of programmed SNN parameters"); assert(snn_0.spi_slave_0.SPI_GATE_ACTIVITY == 1'b1) else $fatal(0, "SPI_GATE_ACTIV

我正在尝试运行一个测试台,它是为一个名为ODIN的神经形态芯片编写的。 在Xilinx ISE中输入此代码。我犯了一些毫无意义的错误。以下是代码的一部分:

$display("----- Starting verification of programmed SNN parameters");
    assert(snn_0.spi_slave_0.SPI_GATE_ACTIVITY ==  1'b1) else $fatal(0, "SPI_GATE_ACTIVITY parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_OPEN_LOOP              == `SPI_OPEN_LOOP             ) else $fatal(0, "SPI_OPEN_LOOP parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_SYN_SIGN               == `SPI_SYN_SIGN              ) else $fatal(0, "SPI_SYN_SIGN parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_BURST_TIMEREF          == `SPI_BURST_TIMEREF         ) else $fatal(0, "SPI_BURST_TIMEREF parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_OUT_AER_MONITOR_EN     == `SPI_OUT_AER_MONITOR_EN    ) else $fatal(0, "SPI_OUT_AER_MONITOR_EN parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_AER_SRC_CTRL_nNEUR     == `SPI_AER_SRC_CTRL_nNEUR    ) else $fatal(0, "SPI_AER_SRC_CTRL_nNEUR parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_MONITOR_NEUR_ADDR      == `SPI_MONITOR_NEUR_ADDR     ) else $fatal(0, "SPI_MONITOR_NEUR_ADDR parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_MONITOR_SYN_ADDR       == `SPI_MONITOR_SYN_ADDR      ) else $fatal(0, "SPI_MONITOR_SYN_ADDR parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_UPDATE_UNMAPPED_SYN    == `SPI_UPDATE_UNMAPPED_SYN   ) else $fatal(0, "SPI_UPDATE_UNMAPPED_SYN parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_PROPAGATE_UNMAPPED_SYN == `SPI_PROPAGATE_UNMAPPED_SYN) else $fatal(0, "SPI_PROPAGATE_UNMAPPED_SYN parameter not correct.");
    assert(snn_0.spi_slave_0.SPI_SDSP_ON_SYN_STIM       == `SPI_SDSP_ON_SYN_STIM      ) else $fatal(0, "SPI_SDSP_ON_SYN_STIM parameter not correct.");
我在每行中都会得到以下错误:

“else”附近的语法错误


在我们使用verilog v2k进行模拟的简单示例中,您可以使用$display打印消息:

always @* begin
   $display("----- Starting verification of programmed SNN parameters");
   if(snn_0.spi_slave_0.SPI_GATE_ACTIVITY !=  1'b1) 
      $display("fatal: SPI_GATE_ACTIVITY parameter not correct.");
   ...
end

总之,Xilinx ISE不支持SystemVerilog,所以我们不能使用断言。
要运行这个测试台,我必须使用Xilinx Vivado。另一种方法是在verilog中实现一些与断言等价的函数。查看这些答案,是否需要切换以告诉工具使用sva语法?我不理解您的评论某些工具需要用户在命令行上明确添加类似于
-sv
的内容,以告诉工具设计代码中有systemverilog。我不熟悉Xilinx ISE。Xilinx ISE不支持系统verilog语言。。使用Vivado工具进行您的模拟我不能使用Vivado,有没有办法以适当的方式更改语法?您的意思是“else$fatal(0,“SPI_开环参数不正确”);”行可替换为:“$display(“fatal:SPI_GATE_活动参数不正确”);?”???他们做同样的事情?断言打印一条关于失败的消息。在本例中,$dislpay也是如此。根据实现的不同,断言可能提供有关失败表达式和断言位置的更多信息。您可以使用“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。这就是
始终
块的工作方式。