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 @(*)

    解决一切问题。

    以上。

  • 相关阅读:
    python的input获取用户输入
    pyinstaller打包成功的.exe,本机运行正常,在别的电脑上运行报错Failed to execute script ...
    Shell应用:批量将文件编码由gbk转utf8
    不伤眼睛的文字背景色 豆沙绿RGB值为(199,237,204)
    javascript禁用backspace回退,shift+backspace前进,F5等刷新页面功能
    crontab实行shell乱码问题解决
    linux C 函数大全 .
    Web服务器:shell字符串处理
    Linux C编程一站式学习 .
    crontab中date的用法
  • 原文地址:https://www.cnblogs.com/kingstacker/p/7479016.html
Copyright © 2011-2022 走看看