2018/08/29更新:Verilog HDL语言设计规范中讲到:一个reg变量只能在一个always语句中赋值,下面的问题就违反了这个原则。

更多规范见我的另一篇博文:Verilog HDL 使用规范(一)

用状态机描述转移图的方式,去设计一个模为5的计数器。出现了一系列的问题,一度让我崩溃。最终找到了问题的来源,且看问题以及排错过程。

问题如题目,我的代码为:

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    22:12:23 08/03/2018
// Design Name:
// Module Name:    counter5
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module counter5(clk,rst, cnt, co);input clk;
input rst;
output[2:0] cnt;
output co;
reg co;reg[2:0] pre_state, next_state;
parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3'b011, s4 = 3'b100; always@(posedge clk or posedge rst)
beginif(rst)beginpre_state <= s0;co <= 1'b0;endelsebeginpre_state <= next_state;endendalways@(pre_state)
begincase(pre_state)s0:beginnext_state = s1;co = 1'b0;ends1:beginnext_state = s2;co = 1'b0;ends2:beginnext_state = s3;co = 1'b0;ends3:beginnext_state = s4;co = 1'b0;ends4:beginnext_state = s0;co = 1'b1;enddefault:beginnext_state = s0;co = 1'b0;endendcaseendassign cnt = pre_state;endmodule

此代码在Modelsim中进行功能仿真完全没问题,仿真图如下:

然后,我就在ISE中进行综合,然后总会综合失败,且报错如下:

Line 32: Signal co in unit counter5 is connected to following multiple drivers:
Driver 0: output signal co of instance pre_state[2]_GND_1_o_Mux_2 (pre_state[2]_GND_1_o_Mux_2).
Driver 1: output signal co of instance Latch (co).
Module counter5 remains a blackbox, due to errors in its contents
WARNING:HDLCompiler:1499 - "G:\ISE_file\cnt5\cnt5.v" Line 21: Empty module <counter5> remains a black box.
-->

Total memory usage is 204416 kilobytes

Number of errors   :    1 (   0 filtered)
Number of warnings :    1 (   0 filtered)
Number of infos    :    0 (   0 filtered)

Process "Synthesize - XST" failed

红色部分是我最终找到问题的关键,它的意思是我的co出问题了。那我们看我们代码中的co。

在如下部分always中出现了一次:

always@(posedge clk or posedge rst)
begin
    if(rst)
    begin
        pre_state <= s0;
        co <= 1'b0;
    end
    else
    begin
    
        pre_state <= next_state;
    end

end

在下面always中又出现各种赋值:

always@(pre_state)
begin
    case(pre_state)
    s0:
    begin
        next_state = s1;
        co = 1'b0;
    end
    s1:
    begin
        next_state = s2;
        co = 1'b0;
    end
    s2:
    begin
        next_state = s3;
        co = 1'b0;
    end
    s3:
    begin
        next_state = s4;
        co = 1'b0;
    end
    s4:
    begin
        next_state = s0;
        co = 1'b1;
    end
    default:
    begin
        next_state = s0;
        co = 1'b0;
    end
    endcase
    
end

这个co的赋值在下面一个always中是必须的,由于这是我在不同状态下的输出,因此这个不能动,那么我就注释掉上面的一个always中的co,那个赋值不要也行,赋值在下面一个always块中也能完成,因此问题可能出现在这个地方,注释掉了之后,奇迹出现了综合通过。

贴出最终代码:

`timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date:    22:12:23 08/03/2018
// Design Name:
// Module Name:    counter5
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//
module counter5(clk,rst, cnt, co);input clk;
input rst;
output[2:0] cnt;
output co;
reg co;reg[2:0] pre_state, next_state;
parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3'b011, s4 = 3'b100; always@(posedge clk or posedge rst)
beginif(rst)beginpre_state <= s0;endelsebeginpre_state <= next_state;endendalways@(pre_state)
begincase(pre_state)s0:beginnext_state = s1;co = 1'b0;ends1:beginnext_state = s2;co = 1'b0;ends2:beginnext_state = s3;co = 1'b0;ends3:beginnext_state = s4;co = 1'b0;ends4:beginnext_state = s0;co = 1'b1;enddefault:beginnext_state = s0;co = 1'b0;endendcaseendassign cnt = pre_state;endmodule

Modelsim中仿真同样没问题,ISE中综合也能通过了。综合出来的RTL原理图为:

虽然分析如此,但是这个分析的过程远比这个复杂的多,由于没遇到过这种情况,让我几乎崩溃。还好最终解决了这个问题。

后来,貌似也搜到了网上其他同学类似的问题,地址如下:

verilog程序,ISE 10.1环境下,检查语法和仿真均可,综合出错“ this signal is connected to multiple drivers.”

这位同学的意思是:

此类错误系将某同一个reg变量在多个个always块中进行了赋值操作,此类程序是不可综合的,因此须修改程序。

切记,对于同一个reg型变量只能在一个always块中对其值进行修改,当然在其它块中可以引用其值!

总结的真不错,很感谢哎!

Modelsim下进行功能仿真没问题,可是在ISE综合报错,如何解决?相关推荐

  1. 使用Jupyter notebook,为什么按下ctrl+enter后,没有输出,也没有报错,而是一直出现“*”呢?

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/Sir_viter/article/de ...

  2. ubuntu下安装caffe时,在python中import caffe报错。

    @[TOC]ubuntu下安装caffe时,在python中import caffe报错. 编译完caffe无报错后,按照~/caffe/python/requirement.txt中的要求安装好所有 ...

  3. windows10下,from skimage import morphology 报错的解决办法

    windows10下,from skimage import morphology 报错的解决办法 报错原因 没有安装numpy+mkl库 解决方法 卸载skimage pip uninstall s ...

  4. SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错

    SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...

  5. 【若依(ruoyi)】解决同一Tomcat下两个/多个若依(ruoyi)项目部署报错

    前言 若依(ruoyi): v4.3 问题 同一Tomcat下部署两个/多个若依(ruoyi)项目会报错. 分析 若依(ruoyi)使用了druid,druid又使用了MBean. MBean要求,在 ...

  6. Qt6.2.2下使用QCustomPlot 2.1报错的解决方法

    Qt6.2.2下使用QCustomPlot 2.1报错的解决方法 报错一堆如下: 解决办法: 报错一堆如下: 主要是说QCP的,表达式使用非法命名空间等等 解决办法: 解决办法并不是很复杂. 首先是删 ...

  7. Python3.5 win10环境下导入kera/tensorflow报错的解决方法

    这篇文章主要介绍了Python3.5 win10环境下导入keras/tensorflow报错的解决方法,较为详细的分析了Python3.5在win10环境下导入keras/tensorflow提示错 ...

  8. Ubuntu 20.04下使用IDEA配置tomcat10,及servlet导包后javax.servelet一直报错的解决方法

    Ubuntu 20.04下使用IDEA配置tomcat10,servlet导包后javax.servelet一直报错的解决方法 ​ 前期有关tomcat的安装就不多详谈,网上教程一大把,就不多赘述了. ...

  9. modelsim新建工程进行功能仿真

    下文通过单独在modelsim中新建工程的方式来进行功能仿真. 打开altera-modelsim软件,界面如下图所示.红框里是各种仿真用到的库,这里由于用的是altera-modelsim,所以al ...

最新文章

  1. Linux下Tomcat重新启动
  2. UINavgationController中覆写preferredStatusBarStyle方法不执行的问题
  3. ExtJS 中自定义类
  4. 为了搞清楚CDN的原理,我头都秃了...
  5. JBPM4.4总结-嵌入自己的用户体系(集成自定义用户表)
  6. php分割文本读入数组,PHP fgets按行读取字符串和explode分割字符串为数组
  7. Total Commander通过CTRL+B调用git-base.exe
  8. iZotope Trash 2 for Mac(失真效果音频插件)
  9. listary文件查找程序下载和使用
  10. Java(实验四)Java标准类库-将一个字符串中的小写字母变成大写字母,并将大写字母变成小写字母
  11. 115、闪点、燃点、自然点的概念
  12. python如何导出csv文件_python pandas如何输出csv文件
  13. vmware虚拟机镜像制作成QCOW2
  14. Matlab实现图像简单的几何校正
  15. 手把手教你如何批量修改视频尺寸
  16. Windons10安装RDKit
  17. HEIF 和 HEVC 研究
  18. 想要30一朵花,这样做
  19. 读书笔记:《敏捷估计与规划》
  20. 关于向S3服务器上传中文名称文件失败的处理办法

热门文章

  1. gdb 不能显示变量_linux下gdb调试常用命令汇总
  2. mysql存储过程不常用_Python--day46--mysql存储过程(不常用)(包含防sql注入)
  3. php调用selenium,从php调用python selenium
  4. java raw_GitHub - Braw115/JavaWEB: JavaWEB学习之中的一些Demo
  5. android筛选cookie,服务器无法从Android手机识别Cookie
  6. 第十六届智能车竞赛总决赛线上比赛赛道设计
  7. 选频放大电路对于150kHz导航信号进行放大检波
  8. 2020年信号与系统课程批改工作处理程序
  9. python虚拟cpu性能_如何使用python找出CPU数量
  10. 估计一些物品的质量_新版人教版二年级数学下册《克和千克》教案