当前位置: 首页 > news >正文

ZYNQ_project:key_breath

[Synth 8-327] inferring latch for variable 'led_breath_reg' ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66]
因为在组合逻辑中,用了非阻塞赋值的方式赋值信号。

组合逻辑自己给自己赋值会产生组合回环,输出不稳定。

模块框图:

 

 

代码:

/*电容按键的上升沿检测,拉高一个时钟周期作为控制标志信号。
*/
module key(input       wire            sys_clk     ,input       wire            sys_rst_n   ,input       wire            key_cup     ,output      reg             key_flag    
);// reg signal definereg             key_cup_r1 ;reg             key_cup_r2 ;wire            key_flag_r ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) beginkey_cup_r1 <= 1'b0 ;key_cup_r2 <= 1'b0 ;endelse beginkey_cup_r1 <= key_cup    ;key_cup_r2 <= key_cup_r1 ;endendassign  key_flag_r = key_cup_r1 && ~key_cup_r2 ;// output   key_flagalways @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) key_flag <= 1'b0 ;elsekey_flag <= key_flag_r ;end 
endmodule

 

// 呼吸灯,控制信号来一次,切换灯呼吸。
module led_breath(input       wire            sys_clk     ,input       wire            sys_rst_n   ,input       wire            key_flag    ,output      reg     [1:0]   led_out     
);parameter   MAX_CNT_MS = 1000 ,MAX_CNT_US = 1000 ,MAX_CNT_NS = 50   ;// reg signal definereg     [5:0]       cnt_ns ;reg     [9:0]       cnt_us ;reg     [9:0]       cnt_ms ;reg                 led_mod;reg                 led_sel;//reg                 led_breath ;wire                led_breath ;/*************************************************************/// reg     [5:0]       cnt_ns ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n)cnt_ns <= 6'd0 ;else if((cnt_ns == MAX_CNT_NS - 1) || (key_flag))cnt_ns <= 6'd0 ;elsecnt_ns <= cnt_ns + 1'b1 ;end// reg     [9:0]       cnt_us ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) cnt_us <= 10'd0 ;else if(((cnt_us == MAX_CNT_US - 1)&&(cnt_ns == MAX_CNT_NS - 1))||(key_flag))cnt_us <= 10'd0 ;else if(cnt_ns == MAX_CNT_NS - 1)cnt_us <= cnt_us + 1'b1 ;else cnt_us <= cnt_us ; end// reg     [9:0]       cnt_ms ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) cnt_ms <= 10'd0 ;else if(((cnt_ms == MAX_CNT_MS - 1)&&(cnt_us == MAX_CNT_US - 1)&&(cnt_ns == MAX_CNT_NS - 1))||(key_flag))cnt_ms <= 10'd0 ;else if((cnt_us == MAX_CNT_US - 1)&&(cnt_ns == MAX_CNT_NS - 1))cnt_ms <= cnt_ms + 1'b1 ;else cnt_ms <= cnt_ms ;end// reg                led_mod ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) led_mod <= 1'b1 ;else if(key_flag)led_mod <= 1'b1 ;else if((cnt_ms == MAX_CNT_MS - 1)&&(cnt_us == MAX_CNT_US - 1)&&(cnt_ns == MAX_CNT_NS - 1))led_mod <= ~led_mod ;else led_mod <= led_mod ;end// led_breath// always @(posedge sys_clk or negedge sys_rst_n) begin//     if(~sys_rst_n)//         led_breath <= 1'b0 ;//     else if((led_mod && (cnt_ms > cnt_us)) || (~led_mod && (cnt_ms < cnt_us)))//         led_breath <= 1'b1 ;//     else if(((led_mod) && (cnt_ms <= cnt_us)) || (~led_mod && (cnt_ms >= cnt_us)))//         led_breath <= 1'b0 ;//     else //         led_breath <= led_breath ;// end// always @(*) begin//     if(~sys_rst_n)//         led_breath = 1'b0 ;//     else if((led_mod && (cnt_ms > cnt_us)) || (~led_mod && (cnt_ms < cnt_us)))//         led_breath = 1'b1 ;//     else if(((led_mod) && (cnt_ms <= cnt_us)) || (~led_mod && (cnt_ms >= cnt_us)))//         led_breath = 1'b0 ;//     else //         led_breath = led_breath ;// endassign  led_breath = ((led_mod && (cnt_ms > cnt_us)) || (~led_mod && (cnt_ms < cnt_us))) ? 1'b1 : 1'b0 ;// reg led_sel ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) led_sel <= 1'b0 ;else if(key_flag)led_sel <= ~led_sel ;end// output      reg     [1:0]   led_out    always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) led_out <= 2'b00 ;else if(led_sel == 0)led_out <= {1'b0,led_breath} ;else if(led_sel == 1)led_out <= {led_breath,1'b0} ;else led_out <= 2'b00 ;end endmodule

 

module top(input       wire            sys_clk     ,input       wire            sys_rst_n   ,input       wire            key_cup     ,output      wire    [1:0]   led_out     
);// wire signal definewire            key_flag ;key key_inst(.sys_clk            ( sys_clk    ) ,.sys_rst_n          ( sys_rst_n  ) ,.key_cup            ( key_cup    ) ,.key_flag           ( key_flag   )  
);led_breath led_breath_inst(.sys_clk            ( sys_clk    ) ,.sys_rst_n          ( sys_rst_n  ) ,.key_flag           ( key_flag   ) ,.led_out            ( led_out    )  
);endmodule

 

`timescale 1ns/1ns
module test_top();reg             sys_clk   ;reg             sys_rst_n ;reg             key_cup   ;wire    [1:0]   led_out   ;top top_inst(.sys_clk        ( sys_clk   ) ,.sys_rst_n      ( sys_rst_n ) ,.key_cup        ( key_cup   ) ,.led_out        ( led_out   )  
);parameter   CYCLE = 20 ;defparam    top_inst.led_breath_inst.MAX_CNT_MS = 100 ;defparam    top_inst.led_breath_inst.MAX_CNT_US = 100 ;defparam    top_inst.led_breath_inst.MAX_CNT_NS = 50  ;initial beginsys_clk    = 1'b1 ;sys_rst_n <= 1'b0 ;key_cup   <= 1'b0 ;#( CYCLE * 2 )    ;sys_rst_n <= 1'b1 ;#(CYCLE * 10)     ;#(CYCLE * 1200000);key_cup    <= 1'b1;#(CYCLE * 10)     ;key_cup   <= 1'b0 ;#(CYCLE * 1200000);$stop             ;endalways #(CYCLE / 2) sys_clk = ~sys_clk;
endmodule

仿真:

忘记截图了

相关文章:

ZYNQ_project:key_breath

[Synth 8-327] inferring latch for variable led_breath_reg ["C:/Users/warrior/Desktop/ZYNQ/pl/key_breath/rtl/led_breath.v":66] 因为在组合逻辑中&#xff0c;用了非阻塞赋值的方式赋值信号。 组合逻辑自己给自己赋值会产生组合回环&#xff0c;输出不稳定。 …...

设计模式 (原则)

在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&#xff0c;从而提高软件开发效率、节约软件开发成本和维护成本 一、开闭原则 对扩展开放&#xff0c;对修改关闭。 案…...

LeetCode 每日一题 2023/11/6-2023/11/12

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 11/6 318. 最大单词长度乘积11/7 2586. 统计范围内的元音字符串数11/8 2609. 最长平衡子字符串11/9 2258. 逃离火灾11/10 2300. 咒语和药水的成功对数11/11 765. 情侣牵手1…...

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理&#xff1a;使用MBR先对硬盘分区&#xff0c;然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时&#xff0c;操作比较麻烦。分区使用空间已经满了&#xff0c;不再够用了&#xff…...

CTFHUB-WEB-SQL注入

sql学的太不好了&#xff0c;回炉重造 判断 Sql 注入漏洞的类型&#xff1a; 1.数字型 当输入的参 x 为整型时&#xff0c;通常 abc.php 中 Sql 语句类型大致如下&#xff1a;select * from <表名> where id x这种类型可以使用经典的 and 11 和 and 12 来判断&#xff…...

案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理

这家汽车行业的客户缺乏一套系统来支持产品研发过程的管理。他们一直在寻找一款可以覆盖从基本需求到产品开发&#xff0c;再到项目实施等各个阶段的研发管理工具&#xff0c;并且需要这款工具又一定的灵活性&#xff0c;更好地适应并提升现有的业务流程。 通过引入Atlassian的…...

【算法与数据结构】40、LeetCode组合总和 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;【算法与数据结构】39、LeetCode组合总和的基础之上&#xff0c;这道题变成了candidates中有重复元素&…...

Flink SQL -- 命令行的使用

1、启动Flink SQL 首先启动Flink的集群&#xff0c;选择独立集群模式或者是session的模式。此处选择是时session的模式&#xff1a;yarn-session.sh -d 在启动Flink SQL的client&#xff1a; sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…...

asp.net core把所有接口和实现类批量注入到容器

要将所有接口和实现类批量注入到容器&#xff0c;可以使用反射和循环来实现自动批量注册。下面是一种示例方法&#xff1a; 创建一个扩展方法&#xff0c;用于批量注册接口和实现类。 public static class ServiceCollectionExtensions {public static IServiceCollection Re…...

SPSS曲线回归

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…...

软件之禅(七)面向对象(Object Oriented)

黄国强 2023/11/11 前文提到面向对象构建的模块控制器&#xff0c;根据第一性原理&#xff0c;从图灵机的角度&#xff0c;面向对象不是最基本的元素。那么面向对象是不是不重要呢&#xff1f; 答案是否定的&#xff0c;面向对象非常非常重要。当我们面对一个具体的领域…...

汽车之家车型_车系_配置参数数据抓取

// 导入所需的库 #include <iostream> #include <fstream> #include <string> #include <curl/curl.h> #include <regex>// 声明全局变量 std::string htmlContent; std::regex carModelRegex("\\d{4}-\\d{2}-\\d{2}"); std::regex ca…...

RabbitMQ的 五种工作模型

RabbitMQ 其实一共有六种工作模式&#xff1a; 简单模式&#xff08;Simple&#xff09;、工作队列模式&#xff08;Work Queue&#xff09;、 发布订阅模式&#xff08;Publish/Subscribe&#xff09;、路由模式&#xff08;Routing&#xff09;、通配符模式&#xff08;Topi…...

原型制作神器ProtoPie的使用Unity与网页跨端交互

什么是ProtoPie&#xff1f; ProtoPie是一款面向设计师的软件原型设计工具&#xff0c;例如制作App界面交互展示&#xff0c;制作好的原型可以一键发布到Web服务器&#xff0c;就可以浏览器访问。由于其内置了大量常用交互类型&#xff0c;以及"程序化"模块&#xf…...

另辟奚径-Android Studio调用Delphi窗体

大家都知道Delphi能调用安卓SDK&#xff0c;比如jar、aar等&#xff0c; 但是反过来&#xff0c;能在Android Studio中调用Delphi开发的窗体吗&#xff1f; 想想不太可能吧&#xff0c; Delphi用的是Pascal&#xff0c;Android Studio用的是Java&#xff0c;这两个怎么能混用…...

SOLID 原则,程序设计五大原则,设计模式

SOLID 是让软件设计更易于理解、更加灵活和更易于维护的五个原则的简称。 单一职责(Single Responsibility Principle)&#xff1a;修改一个类的原因只能有一个。开闭原则(Open/Closed Principle)&#xff1a;对于扩展&#xff0c;类应该是“开放”的&#xff1b;对于修改&…...

Java基础——数组(一维数组与二维数组)

文章目录 一维数组声明初始化与赋值内存图解 二维数组声明初始化与赋值内存图解 数组练习 数组是多个相同类型的数据按一定顺序排列的集合。 说明&#xff1a; 数组是引用数据类型&#xff0c;数组的元素是同一类型的任何数据类型&#xff0c;包括基本数据类型和引用数据类型…...

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…...

Qt QTableWidget表格的宽度

默认值 QTableWIdget的表格宽度默认是一个给定值&#xff0c;可以手动调整每列的宽度&#xff0c;也不填满父窗口 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {this->resize(800,600);QStringList contents{"11","111111111111",&…...

OpenCV(opencv_apps)在ROS中的视频图像的应用(重点讲解哈里斯角点的检测)

1、引言 通过opencv_apps&#xff0c;你可以在ROS中以最简单的方式运行OpenCV提供的许多功能&#xff0c;也就是说&#xff0c;运行一个与功能相对应的launch启动文件&#xff0c;就可以跳过为OpenCV的许多功能编写OpenCV应用程序代码&#xff0c;非常的方便。 对于想熟悉每个…...

告别Xamarin!用.NET MAUI从零构建你的第一个跨平台App(Windows桌面+安卓双端运行实录)

从Xamarin到.NET MAUI&#xff1a;跨平台开发的现代化迁移指南 如果你是一位熟悉Xamarin.Forms的开发者&#xff0c;可能已经注意到微软正在将跨平台移动开发的重心转向.NET MAUI&#xff08;Multi-platform App UI&#xff09;。这个新一代框架不仅继承了Xamarin.Forms的优势…...

IDM试用重置终极指南:免费无限续期30天的完整解决方案

IDM试用重置终极指南&#xff1a;免费无限续期30天的完整解决方案 【免费下载链接】idm-trial-reset Use IDM forever without cracking 项目地址: https://gitcode.com/gh_mirrors/id/idm-trial-reset 还在为Internet Download Manager&#xff08;IDM&#xff09;试用…...

保姆级教程:用SageMath复现CTF中的AMM算法,手算有限域开方

密码学实战&#xff1a;用SageMath攻克RSA中的AMM算法与有限域开方难题 密码学竞赛中那些看似无解的RSA题目&#xff0c;往往隐藏着令人着迷的数学奥秘。当遇到e与φ(n)不互质的特殊场景时&#xff0c;传统解密方法失效&#xff0c;我们需要搬出数论中的"重型武器"—…...

STC15单片机超声波测距保姆级教程:从原理到代码,手把手搞定蓝桥杯CT107D平台

STC15单片机超声波测距实战指南&#xff1a;从硬件连接到代码调试全解析 第一次接触超声波测距时&#xff0c;我盯着那堆代码和电路图发呆了半小时——为什么发送端要接P1.0&#xff1f;那个神秘的delay12us()到底怎么算出来的&#xff1f;如果你也曾在蓝桥杯CT107D开发板前感到…...

告别理论!用Minitab实战拆解CPK与PPK:从公式差异到实际生产报告解读

告别理论&#xff01;用Minitab实战拆解CPK与PPK&#xff1a;从公式差异到实际生产报告解读 在工厂车间的日常质量管理中&#xff0c;CPK和PPK这两个指标常常让质量工程师们又爱又恨。爱的是它们能直观反映生产过程能力&#xff0c;恨的是当面对一份满是数字的报告时&#xff0…...

【AI研究】准确率≠可靠性——普林斯顿团队提出4维度12指标框架,证明Agent能力飙升但可靠性原地踏步

&#x1f4d6; 论文速读 | D1 — 2026-03-19 基本信息 论文: Towards a Science of AI Agent Reliability (arXiv 2602.16666) 作者: Stephan Rabanser, Sayash Kapoor, Peter Kirgis, Kangheng Liu, Saiteja Utpala, Arvind Narayanan (普林斯顿大学) 发布: 2026-02-18 仪表…...

保姆级教程:手把手教你用dSPACE ModelDesk搭建第一个仿真道路(Road模块详解)

从零到一&#xff1a;dSPACE ModelDesk道路仿真模块实战指南 刚接触dSPACE ModelDesk的工程师常会遇到这样的困境&#xff1a;软件界面复杂、功能模块繁多&#xff0c;而官方文档又过于技术化。本文将彻底改变这种体验&#xff0c;通过一条包含弯道、坡度和多车道线的测试道路案…...

自适应学习系统中的行为理论与认知负荷优化

1. 行为理论与认知理论&#xff1a;学习科学的双支柱在自适应学习系统的发展历程中&#xff0c;行为理论和认知理论构成了理解人类学习机制的两大基础框架。作为一名教育技术领域的研究者&#xff0c;我在过去五年里参与了多个自适应学习平台的开发&#xff0c;深刻体会到这两种…...

Pixel Aurora Engine 3步入门教程:从零开始你的第一张AI创意图像

Pixel Aurora Engine 3步入门教程&#xff1a;从零开始你的第一张AI创意图像 1. 前言&#xff1a;为什么选择Pixel Aurora Engine&#xff1f; 如果你对AI图像生成感兴趣但不知道从何开始&#xff0c;Pixel Aurora Engine是个不错的起点。这个工具特别适合新手&#xff0c;界…...

linux 安装 Elasticsearch Kibana

1.下载 通过网盘分享的文件&#xff1a;es 链接: https://pan.baidu.com/s/1JO07VJ8nVsfyC0TzHaLGKw?pwd1dgu 提取码: 1dgu 2.创建 es 用户, es 无法使用root用户启动 # 创建用户组用户 groupadd es useradd -m -g es es # 设置密码&#xff08;可选&#xff09; passwd es # …...