zoukankan      html  css  js  c++  java
  • Quartus prime16.0 组合逻辑always块中敏感向量表不全

    前言

    组合逻辑always块中向量敏感表不全导致的警告。

    流程

    1.对于如下代码块:

     1 always @(nstate /*or master_din or master_dout_reg*/) begin
     2     //initial;
     3     master_din_reg = 0;
     4     master_dout = 0;
     5     cs = 1'b0;
     6     wr_done = 1'b0;
     7     rd_done = 1'b0;
     8     sck_en = 1'b0;
     9     case (nstate)
    10         IDEL: begin
    11             cs = 1'b1;
    12             wr_done = 1'b0;
    13             rd_done = 1'b0;
    14         end 
    15         LOAD: begin
    16             cs = 1'b0;
    17             master_din_reg = master_din;
    18         end
    19         SEND: begin
    20             sck_en = 1'b1;
    21         end
    22         FINISH: begin
    23             cs = 1'b1;
    24             wr_done = 1'b1;
    25             rd_done = 1'b1;
    26             sck_en = 1'b0;
    27             master_dout = master_dout_reg;
    28         end
    29         default: begin
    30             master_din_reg = 0;
    31             master_dout = 0;
    32             cs = 1'b0;
    33             wr_done = 1'b0;
    34             rd_done = 1'b0;
    35             sck_en = 1'b0;
    36         end
    37     endcase //case
    38 end

    对于master_din和变量master_dout_reg,两者在组合always块中使用读取,但没有在敏感向量表中,将会导致如下错误:

    Warning (10235): Verilog HDL Always Construct warning at spi_ms.v(149): variable "master_din" is read inside the Always Construct but isn't in the Always Construct's Event Control

    Warning (10235): Verilog HDL Always Construct warning at spi_ms.v(159): variable "master_dout_reg" is read inside the Always Construct but isn't in the Always Construct's Event Control

    2.解决方法是补全敏感向量表,避免产生不必要的锁存器:

     1 always @(nstate or master_din or master_dout_reg) begin
     2     //initial;
     3     master_din_reg = 0;
     4     master_dout = 0;
     5     cs = 1'b0;
     6     wr_done = 1'b0;
     7     rd_done = 1'b0;
     8     sck_en = 1'b0;
     9     case (nstate)
    10         IDEL: begin
    11             cs = 1'b1;
    12             wr_done = 1'b0;
    13             rd_done = 1'b0;
    14         end 
    15         LOAD: begin
    16             cs = 1'b0;
    17             master_din_reg = master_din;
    18         end
    19         SEND: begin
    20             sck_en = 1'b1;
    21         end
    22         FINISH: begin
    23             cs = 1'b1;
    24             wr_done = 1'b1;
    25             rd_done = 1'b1;
    26             sck_en = 1'b0;
    27             master_dout = master_dout_reg;
    28         end
    29         default: begin
    30             master_din_reg = 0;
    31             master_dout = 0;
    32             cs = 1'b0;
    33             wr_done = 1'b0;
    34             rd_done = 1'b0;
    35             sck_en = 1'b0;
    36         end
    37     endcase //case
    38 end

    3.更懒的方式为直接:always @(*)

    解决一切问题。

    以上。

  • 相关阅读:
    spring boot指定外部配置的坑
    beego 批量删除问题
    spark 安装
    HttpServletRequest 获取cookie
    k8s 代码生成
    k8s 各种示例
    mysql-operator
    k8s Docker私有仓库认证
    Failed to introspect annotated methods on class 异常
    P6272 没有人的算术
  • 原文地址:https://www.cnblogs.com/kingstacker/p/7479016.html
Copyright © 2011-2022 走看看