FPGA学习篇——Verilog学习之寄存器的实现
1 寄存器理论

这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效)
这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,且= 输入Key_in(上升沿前一时刻),其余时刻,输出out保持。
而复位信号什么时候有用呢,顾名思义,复位信号就是让输出清零的操作。
复位分为同步复位和异步复位:
(1)同步复位:即复位信号和时钟信号同步,只有当复位信号有效且时钟的上升沿时两个条件均满足,输出out才会清零;同步复位信号释放时,同样,只有当复位信号释放且时钟的上升沿时两个条件均满足,输出out才会不受复位信号控制。
(2)异步复位:即复位时,复位信号与时钟信号无关,只需满足复位信号有效输出out就会清零;注意异步信号释放时,采用同步释放方式,即与同步复位信号释放一样,只有当复位信号释放且时钟的上升沿时两个条件均满足,输出out才会不受复位信号控制(这是为了克服复位信号释放的随机性,可能导致时序违规,倘若复位释放时恰恰在时钟有效沿附近,就很容易使电路处于亚稳态,详细可查阅资料)。

2 代码理解:
这里跟着野火学了一下代码~
2.1 主文件
异步和同步选其中一种。
module flip_flop
(input key_in, sys_rst_n, sys_clk,output reg Output);//异步
always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)Output <= 1'b0;elseOutput <= key_in; endmodule//同步
always@(posedge sys_clk)if(sys_rst_n == 1'b0)Output <= 1'b0;elseOutput <= key_in; endmodule
2.2 仿真文件
`timescale 1ns/1nsmodule tb_flip_flop();reg t_key_in, t_sys_rst_n, t_sys_clk;
wire t_Output;initial begint_sys_clk = 1'b0;t_key_in = 1'b0;t_sys_rst_n = 1'b0;#20t_sys_rst_n = 1'b1;#200t_sys_rst_n = 1'b0;#40t_sys_rst_n = 1'b1;endalways #10 t_sys_clk = ~t_sys_clk;
always #20 t_key_in <= {$random} % 2;initial begin$timeformat(-9,0,"ns",10);$monitor("@time %t,key_in = %b,sys_clk = %b,sys_rst_n = %b,Output = %b",$time,t_key_in,t_sys_clk,t_sys_rst_n,t_Output);
endflip_flop u_flip_flop
(.sys_clk(t_sys_clk),.sys_rst_n(t_sys_rst_n),.key_in(t_key_in),.Output(t_Output));endmodule
这里解释一下:
(1)时钟周期为20ns:always #10 t_sys_clk = ~t_sys_clk;使得每10ns取反一次,故周期为20ns。

(2)初始赋值时,为什么延迟200ns后让复位信号有效,这个延迟是有讲究的,为了更好的看到同步复位和异步复位的效果,就要尽量避免复位信号有效与时钟上升沿重合。
这里时钟周期为20ns,初始时刻时钟为0开始,复位信号为0开始,20ns后,复位信号为1,此时的时钟为1,且为下降沿,再过了200ns后,复位信号为0,此时时钟为1,且为下降沿,再过40ns,复位信号为1,此时时钟为1,也刚好为下降沿。(如果把延后200ns改为延后210ns(前延后20ns不变),则在230ns处,复位信号为0,时钟信号为0,且为上升沿,则不易看实验结果了)
![]()
(20ns时 )
![]()
(220ns时)

(260ns时)
(3)野火的代码初始赋值语句中对sys_rst_n采用了非阻塞赋值,而我试了一下用阻塞赋值也完全没问题,此前说的时序逻辑用非阻塞,组合逻辑用阻塞不是所有情况,本质还是要理解阻塞和非阻塞的定义(可看FPGA学习篇——Verilog学习4(常见语句)_verilog initial-CSDN博客)

注:以上为本人学了野火FPGA系列视频的个人经验,如有侵权,请联系我~
相关文章:
FPGA学习篇——Verilog学习之寄存器的实现
1 寄存器理论 这里在常见的寄存器种加了一个复位信号sys_rst_n。(_n后缀表示复位信号低电平有效,无这个后缀的则表示高电平有效) 这里规定在时钟的上升沿有效,只有当时钟的上升沿来临时,输出out 才会改变,…...
Cursor异常问题全解析-无限使用
title: Cursor异常问题全解析无限使用 tags: cursor categories:aiai编程 mathjax: true description: Cursor异常问题全解析与解决方案大全 abbrlink: 64908bd0 date: 2025-03-19 14:48:32 🤖 Assistant 🚨 Cursor异常问题全解析与解决方案大全 &…...
【VUE】ant design vue实现表格table上下拖拽排序
适合版本:ant design vue 1.7.8 实现效果: 代码: <template><div class"table-container"><a-table:columns"columns":dataSource"tableData":rowKey"record > record.id":row…...
Vue实现动态数据透视表(交叉表)
需求:需要根据前端选择的横维度、竖维度、值去生成一个动态的表格,然后把交叉的值放入到对应的横维度和竖维度之下,其实就是excel里面的数据透视表功能,查询交叉语句为sql语句。 实现页面: 选择一下横维度、竖维度、值之后点击查…...
推荐《人工智能算法》卷1、卷2和卷3 合集3本书(附pdf电子书下载)
今天,咱们就一同深入探讨人工智能算法的卷1、卷2和卷3,看看它们各自蕴含着怎样的奥秘,并且附上各自的pdf电子版免费下载地址。 《人工智能算法(卷1):基础算法》 下载地址:https://www.panziye…...
元宇宙浪潮下,数字孪生如何“乘风破浪”?
在当今科技飞速发展的时代,元宇宙的概念如同一颗璀璨的新星,吸引了全球的目光。元宇宙被描绘为一个平行于现实世界、又与现实世界相互影响且始终在线的虚拟空间,它整合了多种前沿技术,为人们带来沉浸式的交互体验。而数字孪生&…...
WPF 附加属性
在WPF(Windows Presentation Foundation)中,附加属性(Attached Properties)是一种特殊的依赖属性机制,它允许父元素为子元素提供额外的属性支持。这种特性特别适用于布局系统、输入处理和其他需要跨多个控件…...
数据分析 之 怎么看懂图 一
韦恩图怎么看 ①颜色:不同颜色代表不同的集合 ②)颜色重叠部分:表示相交集合共有的元素 ③颜色不重叠的部分:表示改集合独有的元素 ④数字:表示集合独有或共有的元素数量 ⑤百分比:表示该区域元素数占整体的比例 PCA图怎么看 ① 第一主成分坐标轴及主成分贡献率主成分贡献…...
手写数据库MYDB(一):项目启动效果展示和环境配置问题说明
1.项目概况 这个项目实际上就是一个轮子项目,现在我看到的这个市面上面比较火的就是这个首先RPC,好多的机构都在搞这个,还有这个消息队列之类的,但是这个是基于MYSQL的,我们知道这个MYSQL在八股盛宴里面是重点考察对象…...
深入理解椭圆曲线密码学(ECC)与区块链加密
椭圆曲线密码学(ECC)在现代加密技术中扮演着至关重要的角色,广泛应用于区块链、数字货币、数字签名等领域。由于其在提供高安全性和高效率上的优势,椭圆曲线密码学成为了数字加密的核心技术之一。本文将详细介绍椭圆曲线的基本原理…...
使用 PowerShell 脚本 + FFmpeg 在 Windows 系统中批量计算 MP4视频 文件的总时长
步骤 1:安装 FFmpeg 访问 FFmpeg 官网(Download FFmpeg),下载 Windows 版编译包(如 ffmpeg-release-full.7z)。或者到(https://download.csdn.net/download/zjx2388/90539014)下载完整资料 解压文件&#…...
中医气血精津辨证
中医气血精津辨证 一、气血精津辨证概述 基本概念: 气血精津是构成人体和维持生命活动的基本物质,其生成、运行、输布与脏腑功能密切相关。辨证核心:通过分析气血精津的盛衰、运行障碍及其相互关系,判断疾病本质。 生理关系&…...
Intellij IDEA2023 创建java web项目
Intellij IDEA2023 创建java web项目 零基础搭建web项目1、创建java项目2、创建web项目3、创建测试页面4、配置tomcat5、遇到的问题 零基础搭建web项目 小白一枚,零基础学习基于springMVC的web项目开发,记录开发过程以及中间遇到的问题。已经安装了Inte…...
Scrapy结合Selenium实现滚动翻页数据采集
引言 在当今的互联网数据采集领域,许多网站采用动态加载技术(如AJAX、无限滚动)来优化用户体验。传统的基于Requests或Scrapy的爬虫难以直接获取动态渲染的数据,而Selenium可以模拟浏览器行为,实现滚动翻页和动态内容…...
Node.js从0.5到1学习计划
以下是针对零基础学习者的10天Node.js高效学习计划,每天聚焦核心知识点并配合实战练习: 📆 10天Node.js速成计划(每日4-6小时) 核心目标:掌握Node.js核心机制 完成3个实战项目 📍 Day 1-2&…...
python 的 obj的key 变成双引号
在Python中,当你序列化一个对象(例如使用json.dumps()方法将对象转换为JSON字符串)时,默认情况下,字典的键(keys)会被转换为字符串。如果你的字典中的键本身就是字符串,并且你想要在…...
sqlmap 源码阅读与流程分析
0x01 前言 还是代码功底太差,所以想尝试阅读 sqlmap 源码一下,并且自己用 golang 重构,到后面会进行 ysoserial 的改写;以及 xray 的重构,当然那个应该会很多参考 cel-go 项目 0x02 环境准备 sqlmap 的项目地址&…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
asp.net mvc 向前端响应json数据。用到jquery
最近在给客户开发提醒软件时,用asp.net mvc 开发。该框架已经集成了bootstrap,直接贴asp.net mvc 端代码: {Layout null; }<!DOCTYPE html><html> <head><meta name"viewport" content"widthdevice-width" /…...
基于物联网的新房甲醛浓度监测系统的设计(论文+源码)
2.1总体方案设计 本次基于物联网的新房甲醛浓度监测系统的设计其系统总体架构如图2.1所示,整个系统在硬件架构上采用了STM32f103作为主控制器,在传感器部分采用了MQ135实现甲醛浓度的检测,并且通过ESP8266 WiFi模块将当前检测的数据传输到手…...
deadsnakes
deadsnakes 是一个 第三方 PPA(Personal Package Archive),专门为 Ubuntu 系统提供较新版本的 Python,包括旧版本(如 Python 3.9)和开发中的测试版本。它的名称是一个幽默的双关,源自电影《Mont…...
Stable Diffusion 图标与像素风格LoRA训练的模型选择及参数设置
图标与像素风格LoRA训练的模型选择及参数设置指导意见 一、基础模型选型策略 图标生成推荐模型 Stable Diffusion 2.1-base 适用场景:通用UI图标、矢量风格设计核心优势:支持768x768分辨率,对几何形状捕捉精准需加载VAE模型:vae…...
【AI学习】人工神经网络
1,人工神经网络(Artificial Neural Networks,ANNs,连接模型,Connection Model) 模仿动物神经网络行为特征(突触联接的结构),进行分布式并行信息处理的算法数学模型。依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。 2,前馈神…...
linux--网络协议初识
linux–网络协议初识 事实: 通信的主机之间距离变长了---->引发出新的通信问题? 如何使用数据问题(应用层)可靠性问题(传输层)主机定位问题(网络层)数据报局域网转发问题(数据链路层) 人提出网络协议解决方案—方案有好有坏–为了方便扩展,替换或维护–故将网络协议设置…...
Linux MariaDB部署
1:查看Linux系统版本 cat /etc/os-release#返回结果: NAME"CentOS Linux" VERSION"7 (Core)" ID"centos" ID_LIKE"rhel fedora" VERSION_ID"7" PRETTY_NAME"CentOS Linux 7 (Core)" ANSI…...
window系统下安装elk
Elasticsearch、logstash、kibana 都为8.17.3版本 Elasticsearch 安装流程 # 下载 https://www.elastic.co/cn/downloads/elasticsearch#ga-release elasticsearch-8.17.3-windows-x86_64 # 解压配置 elasticsearch.yml,下个代码块 # bin目录下双击下述文件&…...
uniapp用户登录及获取用户信息(头像昵称)
低版本情况 微信开发者工具的基础库版本要调到2.27版本以下,能够直接申请用户权限获取用户信息,但是会仅限于开发者调试,在真机测试或已上传的小程序在手机上就不能获取以上的原因是微信小程序wx.getUserProfile 和wx.getUserInfo 这两个获取…...
第五周日志-重新学汇编(2)
机器语言 汇编语言(直接在硬件上工作——硬件系统结构): 1.机器语言 每一种微处理器硬件设计和内部结构不同(决定了电信号不同,进而需要不同的机器指令) #早期通过纸带机/卡片机输入计算机,进行运算 2…...
Linux下EC11旋转编码器驱动调试
文章目录 1、前言2、使用gpio-keys驱动2.1、dts配置2.2、识别原理2.3、应用层驱动实现2.4、编译测试 3、使用rotary-encoder驱动3.1、dts配置3.2、app测试程序编写3.3、编译测试 4、总结 1、前言 本来是没有这篇文章的。最近在rk3576下调试ec11旋转编码器时,一直没…...
【无标题】Java的基础准备
一、cmd的常见命令 盘符名称冒号 说明:盘符切换dir 说明:查看当前路径下的内容cd目录 说明:进入单极目录cd.. 说明:回退到上一级目录cd目录1\目录2\... 说明:进入多级目录cd\ …...
