【CPLD Verilog】WARNING - IO buffer missing for top level port

2023-11-09 03:20

本文主要是介绍【CPLD Verilog】WARNING - IO buffer missing for top level port,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在编写的一个监控风扇板的TACH信号的程序中

module FanTachMonitor (input sys_clk
,input auxgood
,input [31:0] fan_count_num // fan_count_num * 20ns = fan_time
,input fan_tach
,output reg [15:0] fan_rps 
);

综合之后报了一组warning

WARNING - IO buffer missing for top level port i_CPLD_FAN1_TACH0...logic will be discarded.

WARNING - IO buffer missing for top level port i_CPLD_FAN1_TACH1...logic will be discarded.

WARNING - IO buffer missing for top level port i_CPLD_FAN2_TACH0...logic will be discarded.

WARNING - IO buffer missing for top level port i_CPLD_FAN2_TACH1...logic will be discarded.

WARNING - IO buffer missing for top level port i_CPLD_FAN3_TACH0...logic will be discarded.

WARNING - IO buffer missing for top level port i_CPLD_FAN3_TACH1...logic will be discarded

从网上搜了一下这个warning,发现了一个案例是说这个warning是综合器在综合的时候将部分net优化掉了。通过RTL发现相关的net根本没有连到任何模块,实际上整个FanTachMonitor都没有被综合!

相应的检查FanTachMonitor的输出端口,发现本应输出给RAM模块的信号,在RAM中只是接了一个0的常数寄存器。

回到程序中,检查发现在顶层模块存在这样的一组语句:

wire [15:0] w_CPLD_FAN1_RPS0=16'b0; //mean round per second
wire [15:0] w_CPLD_FAN1_RPS1=16'b0;
wire [15:0] w_CPLD_FAN2_RPS0=16'b0;
wire [15:0] w_CPLD_FAN2_RPS1=16'b0;
wire [15:0] w_CPLD_FAN3_RPS0=16'b0;
wire [15:0] w_CPLD_FAN3_RPS1=16'b0;

猜测是否是这里将wire型的变量的“赋初始值”的动作,导致综合器在综合的时候认为这里的wire型变量和常数寄存器相连,从而综合器在优化时认为,FanTachMonitor这个模块无法输出任何东西(输出的wire锁死为常数),因此将整个FanTachMonitor给优化掉了。

将上面的代码中的赋值动作去掉后,RTL正确生成的该部分的电路,并且warning也消除了。

总结:

(1)wire型变量别乱赋初始值;

(2)综合器有时候会优化掉一些模块,但是这种情况会被认为是warning,而不是error,有可能出错。

这篇关于【CPLD Verilog】WARNING - IO buffer missing for top level port的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/373779

相关文章

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

JavaEE-文件操作与IO

目录 1,两种路径 二,两种文件 三,文件的操作/File类: 1)文件系统操作 File类 2)文件内容操作(读文件,写文件) (1)打开文件 (2)关闭文件 (3)读文件/InputStream (4)写文件/OutputStream (5)读文件/reader (6)写文件/writer (7)Scanner 四,练习: 1,两种路径 1)绝对路径

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

Java 文件读写最好是用buffer对于大文件可以加快速度

参考例子: FileReader fileReader = new FileReader(filename);BufferedReader bufferedReader = new BufferedReader(fileReader);List<String> lines = new ArrayList<String>();String line = null;while ((line =

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO: 数据写到缓存,再刷写到磁盘上

数字电路专题:verilog 阻塞赋值和非阻塞赋值

verilog 阻塞赋值 和 非阻塞赋值 “=”阻塞赋值, ”<=”非阻塞赋值。阻塞赋值为执行完一条赋值语句,再执行下一条,可理解为顺序执行,而且赋值是立即执行; 非阻塞赋值可理解为并行执行,不考虑顺序,在 always 块语句执行完成后,才进行赋值。 如下面的阻塞赋值: //代码如下:module top(din,a,b,c,clk);input din;input clk;out

MiniCPM-V: A GPT-4V Level MLLM on Your Phone

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 研究背景和动机 现有的MLLM通常需要大量的参数和计算资源,限制了其在实际应用中的范围。大部分MLLM需要部署在高性能云服务器上,这种高成本和高能耗的特点,阻碍了其在移动设备、离线和隐私保护场景中的应用。 文章主要贡献: 提出了MiniCPM-V系列模型,能在移动端设备上部署的MLLM。 性能优越: