Verilog 学习第四节(从计数器到可控制线性序列机——LED实验进化六部曲)
从计数器到可控制线性序列机——LED实验进化六部曲
- 一:让LED灯按照亮0.25s,灭0.75s的状态循环亮灭
- 二:让LED灯按照亮0.25s,灭0.5s,亮0.75s,灭1s的状态循环亮灭
- 三:让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。以0.25s为一个变化周期,8个变化状态为一个循环
- 四:让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。8个变化状态为一个循环,每个变化状态的时间值可以根据不同的应用场景选择
- 五:让多个LED灯按照设置的模式各自在一个变化循环内独立亮灭变化
- 六:每隔10ms,让LED灯的一个8状态循环执行一次(每个状态的变化时间值小一点,方便测试,比如设置为10us)
一:让LED灯按照亮0.25s,灭0.75s的状态循环亮灭
源文件
module counter_led_0(input clk,input reset,output reg led);reg [25:0] cnt;parameter MCNT=50000000;always@(posedge clk or negedge reset)beginif(!reset)cnt<=0;else if(cnt==MCNT-1)cnt<=0;else cnt<=cnt+1'b1;endalways@(posedge clk or negedge reset)beginif(!reset)led<=0;else if(cnt==(MCNT/4+MCNT/2)-1)led<=1;else if(cnt==MCNT-1)led<=0;else led<=led;end
endmodule
测试文件
`timescale 1ns / 1nsmodule counter_led_0_tb();reg clk;reg reset_n;wire led;counter_led_0 counter_led_0(.clk(clk),.reset(reset_n),.led(led));defparam counter_led_0.MCNT=26'd25000;initial beginclk=0;endalways#10 clk=!clk;initial beginreset_n=0;#201;reset_n=1;#40000000;$stop;end
endmodule
仿真截图
收获:
1:用parameter定义变量的时候,对变量除以2还是很容易实现的,因为其对应的是一个常量的值,但是若是一个变量在过程中会实时变化的话直接/2是会有一些问题的~
2:需要这道题需要注意亮0.25s不代表是要在0的基础上计数到0.25s在变为1,而是在1的基础上保留的时间是0.25s,这里也是需要转过弯儿的地方~
二:让LED灯按照亮0.25s,灭0.5s,亮0.75s,灭1s的状态循环亮灭
源代码
module counter_led_1(input clk,input reset,output reg led);reg [26:0] cnt;parameter MCNT=125000000;always@(posedge clk or negedge reset)beginif(!reset)cnt<=0;else if(cnt==MCNT-1)cnt<=0;else cnt<=cnt+1'b1;endalways@(posedge clk or negedge reset)beginif(!reset)led<=1;else if(cnt==MCNT/10-1)led<=0;else if(cnt==MCNT/10+MCNT/5-1)led<=1;else if(cnt==(MCNT/10+MCNT/5)*2-1)led<=0;else if(cnt==MCNT-1)led<=1;elseled<=led;end
endmodule
仿真截图
收获
1:这里为了使亮灭计数好想,设置了复位状态时led灯为灭~
三:让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。以0.25s为一个变化周期,8个变化状态为一个循环
源代码
//该模块的功能是让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。以0.25s为一个变化周期,8个变化状态为一个循环module counter_led_2(input clk,input reset,input [7:0]ctrl,output reg led);reg [26:0] cnt;parameter MCNT=100000000;always@(posedge clk or negedge reset)beginif(!reset)cnt<=0;else if(cnt==MCNT-1)cnt<=0;else cnt<=cnt+1'b1;endalways@(posedge clk or negedge reset)beginif(!reset)led<=0;else if(cnt==MCNT/8-1)led<=ctrl[0];else if(cnt==MCNT*2/8-1)led<=ctrl[1];else if(cnt==MCNT*3/8-1)led<=ctrl[2];else if(cnt==MCNT*4/8-1)led<=ctrl[3];else if(cnt==MCNT*5/8-1)led<=ctrl[4];else if(cnt==MCNT*6/8-1)led<=ctrl[5];else if(cnt==MCNT*7/8-1)led<=ctrl[6];else if(cnt==MCNT*8/8-1)led<=ctrl[7];else led<=led;end
endmodule
测试文件
`timescale 1ns / 1nsmodule counter_led_2_tb();reg clk;reg reset_n;reg [7:0]ctrl;wire led;counter_led_2 counter_led_2(.clk(clk),.reset(reset_n),.ctrl(ctrl),.led(led));defparam counter_led_2.MCNT=100000;initial beginclk=0;endalways#10 clk=!clk;initial beginreset_n=0;ctrl=0;#201;reset_n=1;#200;ctrl=8'b1001_0001;#40000000;$stop;end
endmodule
仿真图
四:让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。8个变化状态为一个循环,每个变化状态的时间值可以根据不同的应用场景选择
思路:在原有的基础上因为时间是用户自己设定的,所以设置times变量作为输入,因为MCNT变量以往都是固定值,但是times会随时变化,所以这里就又定义了一个cnt2记到1——8,每到一个值灯就会反应出对应的亮度
源代码
//该模块的功能是让LED灯按照指定的亮灭模式亮灭,亮灭模式未知,由用户随机指定。8个变化状态为一个循环,每个变化状态的时间值可以根据不同的应用场景选择module counter_led_3(input clk,input reset,input [31:0]times,input [7:0]ctrl,output reg led);reg [31:0] cnt;always@(posedge clk or negedge reset)beginif(!reset)cnt<=0;else if(cnt==times-1)cnt<=0;else cnt<=cnt+1'b1;endreg [2:0]cnt2;always@(posedge clk or negedge reset)beginif(!reset)cnt2<=3'b0;else if(cnt==times-1)cnt2<=cnt2+1;endalways@(posedge clk or negedge reset)beginif(!reset)led<=0;else begincase(cnt2)0:led<=ctrl[0];1:led<=ctrl[1];2:led<=ctrl[2];3:led<=ctrl[3];4:led<=ctrl[4];5:led<=ctrl[5];6:led<=ctrl[6]; 7:led<=ctrl[7]; default led<=led;endcaseendend
endmodule
测试文件
`timescale 1ns / 1nsmodule counter_led_3_tb();reg clk;reg reset_n;reg [7:0]ctrl;reg [31:0]times;wire led;counter_led_3 counter_led_3(.clk(clk),.reset(reset_n),.ctrl(ctrl),.times(times),.led(led));initial beginclk=0;endalways#10 clk=!clk;initial beginreset_n=0;ctrl=0;times=0;#201;reset_n=1;#200;ctrl=8'b1001_0001;#201;times=2500;#2000001;times=25000;#400000000;$stop;end
endmodule
仿真截图
五:让多个LED灯按照设置的模式各自在一个变化循环内独立亮灭变化
答:在四的基础上增加led的位宽,以及设置多个控制信号进行赋值
module counter_led_5(Clk,Reset_n,CtrlA,CtrlB,Time,Led
);input Clk;input Reset_n;input [7:0]CtrlA;input [7:0]CtrlB;input [31:0]Time;output reg [1:0]Led;reg [31:0]counter;always@(posedge Clk or negedge Reset_n)if(!Reset_n)counter <= 0;else if(counter == Time - 1)counter <= 0;elsecounter <= counter + 1'b1;reg [2:0]counter2;always@(posedge Clk or negedge Reset_n)if(!Reset_n) counter2 <= 0; else if(counter == Time - 1)counter2 <= counter2 + 1'b1;always@(posedge Clk or negedge Reset_n)if(!Reset_n)Led <= 2'd0;else case(counter2)0:begin Led[0] <= CtrlA[0]; Led[1] <= CtrlB[0]; end1:begin Led[0] <= CtrlA[1]; Led[1] <= CtrlB[1]; end2:begin Led[0] <= CtrlA[2]; Led[1] <= CtrlB[2]; end3:begin Led[0] <= CtrlA[3]; Led[1] <= CtrlB[3]; end4:begin Led[0] <= CtrlA[4]; Led[1] <= CtrlB[4]; end5:begin Led[0] <= CtrlA[5]; Led[1] <= CtrlB[5]; end6:begin Led[0] <= CtrlA[6]; Led[1] <= CtrlB[6]; end7:begin Led[0] <= CtrlA[7]; Led[1] <= CtrlB[7]; enddefault:begin Led[0] <= Led; Led[1] <= Led[1]; endendcaseendmodule
测试文件
`timescale 1ns/1nsmodule counter_led_5_tb;reg Clk;reg Reset_n;reg [7:0]CtrlA,CtrlB;reg [31:0]Time;wire [1:0]Led;counter_led_5 counter_led_5(.Clk(Clk),.Reset_n(Reset_n),.CtrlA(CtrlA),.CtrlB(CtrlB),.Time(Time),.Led(Led));initial Clk = 1;always #10 Clk = !Clk;initial beginReset_n = 0;CtrlA = 0;CtrlB = 0;Time = 0;#201;Reset_n = 1;#2000;Time = 2500;CtrlA = 8'b1000_0110;CtrlB = 8'b1101_0010;#20000000; Time = 25000;CtrlA = 8'b1010_0110;CtrlB = 8'b1100_1010;#20000000; $stop;endendmodule
六:每隔10ms,让LED灯的一个8状态循环执行一次(每个状态的变化时间值小一点,方便测试,比如设置为10us)
最开始自己的理解是在8个循环之后间隔10ms,所以才有了以下代码的理解,但是后来才懂原来周期是10msemmm有些许思想出路
注:以下代码的逻辑思想正确,即在原有计数的基础上又加了一个整体的计数周期=8*times+10ms,但是这里的8需要对输入变量做乘法,在运算时很有可能一个周期运算不出来,就会出现一些错误,所以这里还是要谨慎的使用;(小梅哥采用的是设置en进行控制,自己没有写出来,这里看完他的代码后自行默写了一下~)
//该模块的功能是每隔10ms,让LED灯的一个8状态循环执行一次(每个状态的变化时间值小一点,方便测试,比如设置为10us)module counter_led_4(input clk,input reset,input [31:0]times,input [7:0]ctrl,output reg led);reg [31:0] cnt;reg en;//设置使能,只有在en为1的时候parameter count=5000;always@(posedge clk or negedge reset)beginif(!reset)cnt<=0;else if(cnt==times-1)cnt<=0;else cnt<=cnt+1'b1;endreg [2:0]cnt2;always@(posedge clk or negedge reset)beginif(!reset)cnt2<=3'b0;else if(cnt==times-1)cnt2<=cnt2+1;endreg [35:0] cnt3;always@(posedge clk or negedge reset)beginif(!reset)cnt3<=0;else if(cnt3==times*8-1+count)cnt3<=0;else cnt3<=cnt3+1'b1;endalways@(posedge clk or negedge reset)beginif(!reset)led<=0;else if(cnt3<=8*times-1)begincase(cnt2)0:led<=ctrl[0];1:led<=ctrl[1];2:led<=ctrl[2];3:led<=ctrl[3];4:led<=ctrl[4];5:led<=ctrl[5];6:led<=ctrl[6]; 7:led<=ctrl[7]; default led<=led;endcaseendelse if(cnt3<=8*times-1+count)beginled<=0;endend
endmodule
`timescale 1ns / 1nsmodule counter_led_4_tb();reg clk;reg reset_n;reg [7:0]ctrl;reg [31:0]times;wire led;counter_led_4 counter_led_4(.clk(clk),.reset(reset_n),.ctrl(ctrl),.times(times),.led(led));initial beginclk=0;endalways#10 clk=!clk;initial beginreset_n=0;ctrl=0;times=0;#201;reset_n=1;#200;ctrl=8'b1001_0001;#201;times=2500;#2000001;times=25000;#40000000;$stop;end
endmodule
小梅哥的官方源码
module counter_led_4(Clk,Reset_n,Ctrl,Time,Led
);input Clk;input Reset_n;input [7:0]Ctrl;input [31:0]Time;output reg Led;reg [31:0]counter;reg EN;reg [18:0]counter0;//10ms���ڶ�ʱ��always@(posedge Clk or negedge Reset_n)if(!Reset_n)counter0 <= 0;else if(counter0 == 500000 - 1)counter0 <= 0;elsecounter0 <= counter0 + 1'b1;always@(posedge Clk or negedge Reset_n)if(!Reset_n)EN <= 0;else if(counter0 == 0)EN <= 1;else if((counter2 == 7) && (counter == Time - 1))EN <= 0;always@(posedge Clk or negedge Reset_n)if(!Reset_n)counter <= 0;else if(EN)beginif(counter == Time - 1)counter <= 0;elsecounter <= counter + 1'b1;endelsecounter <= 0;reg [3:0]counter2;always@(posedge Clk or negedge Reset_n)if(!Reset_n) counter2 <= 0; else if(EN)beginif(counter == Time - 1)counter2 <= counter2 + 1'b1;endelsecounter2 <= 4'd8; always@(posedge Clk or negedge Reset_n)if(!Reset_n)Led <= 0;else case(counter2)0:Led <= Ctrl[0];1:Led <= Ctrl[1];2:Led <= Ctrl[2];3:Led <= Ctrl[3];4:Led <= Ctrl[4];5:Led <= Ctrl[5];6:Led <= Ctrl[6];7:Led <= Ctrl[7];8:Led <= 0;default:Led <= Led;endcaseendmodule
测试文件
`timescale 1ns / 1nsmodule counter_led_4_tb();reg clk;reg reset_n;reg [7:0]ctrl;reg [31:0]times;wire led;counter_led_4 counter_led_4(.Clk(clk),.Reset_n(reset_n),.Ctrl(ctrl),.Time(times),.Led(led));initial beginclk=0;endalways#10 clk=!clk;initial beginreset_n=0;ctrl=0;times=0;#201;reset_n=1;#2000;ctrl=8'b1000_0111;times=2500;#20000001;times=25000;ctrl=8'b1010_0110;#20000000;$stop;end
endmodule
仿真截图
收获:
1:锻炼了自己分析波形的能力,自己调试,最初小梅哥的代码在间隔10ms的时间里会一直保持ctrl[0]的状态,让波形看的很乱,找不到是什么时候开始算起的,于是我对counter2进行计数更改,当当前处于不计数的状态时,不为0.因为为0 的话需要在后面case循环中进行判断等于ctrl[0],于是我把不计数的状态设为不在判断范围内的8,使其为0,这样使得波形比较规律易懂
2:学会了添加模块中其他参数的方法,好开心~,这样查错就更容易了
相关文章:

Verilog 学习第四节(从计数器到可控制线性序列机——LED实验进化六部曲)
从计数器到可控制线性序列机——LED实验进化六部曲一:让LED灯按照亮0.25s,灭0.75s的状态循环亮灭二:让LED灯按照亮0.25s,灭0.5s,亮0.75s,灭1s的状态循环亮灭三:让LED灯按照指定的亮灭模式亮灭&a…...

操作SSH无密登录配置
例如小编有三台服务器需要相互访问,就需要配置三台,这三台分别是hadoop102,hadoop103 , hadoop1041.打开三个服务器,分别生成hadoop102,hadoop103 , hadoop104的公钥和私钥输入命令,然后一直回车,这时候什么…...

Websocket详细介绍
需求背景 在某个资产平台,在不了解需求的情况下,我突然接到了一个任务,让我做某个页面窗口的即时通讯,想到了用websocket技术,我从来没用过,被迫接受了这个任务,我带着浓烈的兴趣,就…...
大数据书单(100本)
大数据书单(100本) 序号 书名 作者 出版社 1 Hadoop权威指南:大数据的存储与分析(第4版)(修订版)(升级版) Tom White 清华大学出版社 2 Hive编程指南 卡普廖洛 (Edward Capriolo) / 万普勒 (Dean Wampler) / 卢森格林 (Jason Rutherglen) / 曹坤 人民邮…...
python实战应用讲解-【语法基础篇】初识Python(附示例代码)
目录 前言 Python基础 基本概念: 为什么使用Python? Python2.x与3.x版本区别...
【2023保研夏令营】网安、CS(西交、华师、科、南等)
文章目录一、基本情况二、投递和入营情况三、考核情况1. 西交软院(面试)2. 川大网安(笔试面试)3. 华东师范数据学院(机试面试)4. 人大信息学院专硕(机试面试,保密)5. 南大…...

Qt COM组件导出源文件
文章目录摘要dumpcpp.exe注册COM组件COM 组件转CPP参考关键字: Qt、 COM、 组件、 源文件、 dumpcpp摘要 由于厂家提供的库不是纯净C库,是基于COM组件开的库,在和厂家友好交流无果下,只能研究下Qt 如何调用,好在Qt 的…...

各数据库数据类型的介绍和匹配
各数据库数据类型的介绍和匹配1. Oracle的数据类型2. Mysql的数据类型3. Sql server的数据类型4. 类型匹配5. Awakening1. Oracle的数据类型 数据类型介绍 VARCHAR2 :可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749; NCHAR :根据字符集而定的固定长度字…...

Rancher 部署 MySQL
文章目录创建 pvc部署 MySQL前置条件:安装 rancher,可参考文章 docker 部署 rancher 创建 pvc MySQL 数据库是需要存储的,所以必须先准备 pvc 创建 pvc 自定义 pvc 名称选择已经新建好的 storageclass,storageclass 的创建可参考…...
Python语言零基础入门教程(二十五)
Python OS 文件/目录方法 Python语言零基础入门教程(二十四) 39、Python os.openpty() 方法 概述 os.openpty() 方法用于打开一个新的伪终端对。返回 pty 和 tty的文件描述符。 语法 openpty()方法语法格式如下: os.openpty()参数 无 返…...

蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表
目录 1.打翻的闹钟 2.智斗锅鸡 3.文件列表 1.打翻的闹钟 问题描述 冯迭伊曼晚上刷吉米多维奇刷的太勤奋了,几乎天天迟到。崔神为了让VonDieEman改掉迟到的坏毛病,给他买了个闹钟。 一天早上,老冯被闹钟吵醒,他随手将闹钟按掉丢…...
CPU扫盲-CPU与指令集
指令集架构就像是特定的CPU的设计图纸,它规定了这个CPU需要支持那些指令、寄存器有那些状态以及输入输出模型。根据指令集结构的设计,在CPU上通过硬件电路进行实现,就得到了支持该指令集的CPU。指令集就像是我们编程语言中的接口,…...

VINS-Mono/Fusion与OpenCV去畸变对比
VINS中没有直接使用opencv的去畸变函数,而是自己编写了迭代函数完成去畸变操作,主要是为了加快去畸变计算速度 本文对二者的结果精度和耗时进行了对比 VINS-Mono/Fusion与OpenCV去畸变对比1 去畸变原理2 代码实现2.1 OpenCV去畸变2.2 VINS去畸变3 二者对…...

jmx prometheus引起的一次cpu飙高
用户接入了jmx agent进行prometheus监控后,在某个时间点出现cpu飙高 排查思路: 1、top,找到java进程ID 2、top -Hp 进程ID,找到java进程下占用高CPU的线程ID 3、jstack 进程ID,找到那个高CPU的线程ID的堆栈。 4、分析堆…...
Android 虚拟 A/B 详解(六) SnapshotManager 之状态数据
本文为洛奇看世界(guyongqiangx)原创,转载请注明出处。 原文链接:https://blog.csdn.net/guyongqiangx/article/details/129094203 Android 虚拟 A/B 分区《AAndroid 虚拟 A/B 分区》系列,更新中,文章列表: Android 虚拟分区详解(一) 参考资料推荐Android 虚拟分区详解(二…...

Python快速入门系列之一:Python对象
Python对象1. 列表(list)2. 元组(tuple)3. 字典(dict)4. 集合(set)5. 字符串(string)6. BIF (Built-in Function)7. 列表、集合以及字…...

【博客626】不同类型的ARP报文作用以及ARP老化机制
不同类型的ARP报文作用以及ARP老化机制 1、ARP协议及报文 2、不同类型的ARP报文作用 3、ARP工作原理 4、ARP老化机制 5、Linux ARP老化机制 ARP状态机: 在上图中,我们看到只有arp缓存项的reachable状态对于外发包是可用的,对于stale状态的…...

nacos discovery和config
微服务和nacos版本都在2.x及之后。1、discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现。pom引入的依赖是:yml配置文件中:2、config用于获取nacos配置管理->配置列表下配置文件中的内容pom引入的依赖是&#…...
【算法数据结构体系篇class06】:堆、大根堆、小根堆、优先队列
一、堆结构1)堆结构就是用数组实现的完全二叉树结构2)完全二叉树中如果每棵子树的最大值都在顶部就是大根堆3)完全二叉树中如果每棵子树的最小值都在顶部就是小根堆4)堆结构的heapInsert与heapify操作5)堆结构的增大ad…...
试题 算法提高 最小字符串
资源限制内存限制:256.0MB C/C时间限制:2.0s Java时间限制:6.0s Python时间限制:10.0s问题描述给定一些字符串(只包含小写字母),要求将他们串起来构成一个字典序最小的字符串。输入格式第一行T,表示有T组数据。接下来T…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...