同步fifo
同步FIFO
FIFO即是一种先进先出的数据缓存器。同步FIFO指的是数据的写入和读出的时钟是同一个时钟。异步 FIFO 有两个时钟信号,读和写逻辑用的各自的读写时钟。
FIFO没有外部读写地址线,使用起来简单。但是缺点就是只能先入先出,数据地址由内部读写指针自动加1完成。不能像普通存储器那样可以由地址线决定读取或者写入某个指定的地址。
一、同步FIFO的结构
同步FIFO通常包括以下几个关键部分:
- 存储单元:通常是一个数组或寄存器集合,用来存储数据。
- 读指针和写指针:用来管理FIFO的数据流。
- 控制逻辑:负责管理写入和读取操作,确保数据按FIFO的规则进行进出。
二、同步FIFO的工作原理
写入操作(Write):当数据到达FIFO的写入端时(通常通过控制信号write_enable
),数据会被写入到FIFO的存储空间中。如果FIFO已满,写入操作将被暂停,直到空间释放。
读取操作(Read):当读取端请求数据时(通常通过控制信号read_enable
),FIFO将从存储区将最先写入的数据取出,并将其输出。如果FIFO为空,读取操作将被暂停,直到新的数据被写入。
指针管理:同步FIFO通常包含两个指针:
- 写指针(Write Pointer):指示下一次数据写入的位置。
- 读指针(Read Pointer):指示下一次数据读取的位置。
实现FIFO重要的是如何判断FIFO是空还是满。
当初始化复位时,写指针和读指针都是处于初始地址位置。此时,写指针=读指针。当写满后,写指针绕了一圈,此时写指针和读指针同样处于同一个地址位置。那么如何区分这两种情况呢?一般是扩大一位地址位。例如,本来存储7个数据,只需要3位地址就行。但是现在会扩大一位地址位,用4位地址来存储。
开始的时候,写指针和读指针都指向0_000,此时FIFO为空
当写满后,假如期间一直没有读,那么读指针位于0_000,写指针位于1_000。这样就能根据最高位是否相等来区分这两种情况了。
这种方法叫高位扩展法。
当然你也可以用一个计数器来对存储的数据进行计数。当计数器的值等于0的时候为空,当计数器的值等于FIFO的深度的时候就是满。
三、同步FIFO的Verilog实现
1、计数器法
//计数器法实现同步FIFO
module sync_fifo_cnt
#(parameter DATA_WIDTH = 'd8 , //FIFO位宽parameter DATA_DEPTH = 'd16 //FIFO深度
)
(input clk , //系统时钟input rst_n , //低电平有效的复位信号input [DATA_WIDTH-1:0] data_in , //写入的数据input rd_en , //读使能信号,高电平有效input wr_en , //写使能信号,高电平有效output reg [DATA_WIDTH-1:0] data_out, //输出的数据output empty , //空标志,高电平表示当前FIFO已被写满output full , //满标志,高电平表示当前FIFO已被读空output reg [$clog2(DATA_DEPTH) : 0] fifo_cnt //$clog2是以2为底取对数
);//reg define
reg [DATA_WIDTH-1:0] fifo_mem [DATA_DEPTH-1:0];//fifo的存储阵列
reg [$clog2(DATA_DEPTH)-1:0] wr_ptr;//写指针
reg [$clog2(DATA_DEPTH)-1:0] rd_ptr;//读指针//读操作,更新读地址
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginrd_ptr<=0;// resetdata_out<=0;endelse if (rd_en&&!empty) beginrd_ptr<=rd_ptr+1'b1;data_out<=fifo_mem[rd_ptr];endelse beginrd_ptr<=rd_ptr;end
end//写操作,更新写地址
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginwr_ptr<=0;// resetfifo_mem[wr_ptr]<=0;endelse if (wr_en&&!full) beginwr_ptr<=wr_ptr+1'b1;fifo_mem[wr_ptr]<=data_in;endelse beginwr_ptr<=wr_ptr;end
end//计数器
always @(posedge clk or negedge rst_n) beginif (!rst_n) beginfifo_cnt<=0;// resetendelse if (wr_en&&!rd_en&&!full) beginfifo_cnt<=fifo_cnt+1'd1;endelse if (wr_en&&rd_en) beginfifo_cnt<=fifo_cnt;endelse if (!wr_en&&rd_en&&!empty) beginfifo_cnt<=fifo_cnt-1'd1;endelse if (!wr_en&&!rd_en) beginfifo_cnt<=fifo_cnt;end
end//空满标志判断
assign empty = (fifo_cnt==0)?1'b1:1'b0 ;
assign full = (fifo_cnt==DATA_DEPTH)?1'b1:1'b0 ;endmodule
仿真代码:
`timescale 1ns/1ps
module tb_sync_fifo_cnt (); /* this is automatically generated */// clockreg clk;initial beginclk = 0;forever #(10) clk = ~clk;end// asynchronous resetreg rst_n;initial beginrst_n <= '0;#10rst_n <= '1;endparameter DATA_WIDTH = 'd8;parameter DATA_DEPTH = 'd16;reg [DATA_WIDTH-1:0] data_in;reg rd_en;reg wr_en;wire [DATA_WIDTH-1:0] data_out;wire empty;wire full;wire [$clog2(DATA_DEPTH) : 0] fifo_cnt;initial begindata_in = 'd0; wr_en <= 1'b0;rd_en <= 1'b0;repeat(8)begin@(negedge clk)beginwr_en=1;data_in<=$random;endendrepeat(8)begin@(negedge clk)beginwr_en=0;rd_en=1;endendrepeat(4) begin@(negedge clk)begin wr_en <= 1'b1;data_in <= $random; //生成8位随机数rd_en <= 1'b0;endend//持续同时对FIFO读写,写入数据为随机数据 forever begin@(negedge clk)begin wr_en <= 1'b1;data_in <= $random; //生成8位随机数rd_en <= 1'b1;endendendsync_fifo_cnt #(.DATA_WIDTH(DATA_WIDTH),.DATA_DEPTH(DATA_DEPTH)) inst_sync_fifo_cnt (.clk (clk),.rst_n (rst_n),.data_in (data_in),.rd_en (rd_en),.wr_en (wr_en),.data_out (data_out),.empty (empty),.full (full),.fifo_cnt (fifo_cnt));endmodule
2、高位扩展法
当最高位不同,但是其他位相同时,表示FIFO被写满了。只可能是写指针多跑了一轮,不可能是读指针多跑了一轮(没有读的数据啊)
当最高位和其他味都相同时,表示FIFO是空的。只可能是读指针追到了写指针,不可能是写指针追到了读指针。也就是说读指针多跑了一轮。所以就是读空了。
module sync_fifo_ptr
#(parameter DATA_WIDTH = 'd8 , //FIFO位宽parameter DATA_DEPTH = 'd16 //FIFO深度
)
(input clk , //系统时钟input rst_n , //低电平有效的复位信号input [DATA_WIDTH-1:0] data_in , //写入的数据input rd_en , //读使能信号,高电平有效input wr_en , //写使能信号,高电平有效output reg [DATA_WIDTH-1:0] data_out, //输出的数据output empty , //空标志,高电平表示当前FIFO已被写满output full //满标志,高电平表示当前FIFO已被读空
); //reg define
//用二维数组实现RAM
reg [DATA_WIDTH - 1 : 0] fifo_buffer[DATA_DEPTH - 1 : 0];
reg [$clog2(DATA_DEPTH) : 0] wr_ptr; //写地址指针,位宽多一位
reg [$clog2(DATA_DEPTH) : 0] rd_ptr; //读地址指针,位宽多一位 //wire define
wire [$clog2(DATA_DEPTH) - 1 : 0] wr_ptr_true; //真实写地址指针
wire [$clog2(DATA_DEPTH) - 1 : 0] rd_ptr_true; //真实读地址指针
wire wr_ptr_msb; //写地址指针地址最高位
wire rd_ptr_msb; //读地址指针地址最高位assign {wr_ptr_msb,wr_ptr_true} = wr_ptr; //将最高位与其他位拼接
assign {rd_ptr_msb,rd_ptr_true} = rd_ptr; //将最高位与其他位拼接//读操作,更新读地址
always @ (posedge clk or negedge rst_n) beginif (rst_n == 1'b0)rd_ptr <= 'd0;else if (rd_en && !empty)begin //读使能有效且非空data_out <= fifo_buffer[rd_ptr_true];rd_ptr <= rd_ptr + 1'd1;end
end
//写操作,更新写地址
always @ (posedge clk or negedge rst_n) beginif (!rst_n)wr_ptr <= 0;else if (!full && wr_en)begin //写使能有效且非满wr_ptr <= wr_ptr + 1'd1;fifo_buffer[wr_ptr_true] <= data_in;end
end//更新指示信号
//当所有位相等时,读指针追到到了写指针,FIFO被读空
assign empty = ( wr_ptr == rd_ptr ) ? 1'b1 : 1'b0;
//当最高位不同但是其他位相等时,写指针超过读指针一圈,FIFO被写满
assign full = ( (wr_ptr_msb != rd_ptr_msb ) && ( wr_ptr_true == rd_ptr_true ) )? 1'b1 : 1'b0;endmodule
仿真代码采用之前的即可。
相关文章:
同步fifo
同步FIFO FIFO即是一种先进先出的数据缓存器。同步FIFO指的是数据的写入和读出的时钟是同一个时钟。异步 FIFO 有两个时钟信号,读和写逻辑用的各自的读写时钟。 FIFO没有外部读写地址线,使用起来简单。但是缺点就是只能先入先出,数据地址由…...
肌肉骨骼肿瘤治疗市场:潜力无限,未来可期
肌肉骨骼肿瘤治疗作为现代医学的重要分支,专注于应对骨骼和肌肉系统中的良性和恶性肿瘤。随着全球人口老龄化和生活方式的改变,肌肉骨骼疾病日益成为公共卫生的重要问题。与此同时,医疗技术的进步和患者对高质量医疗服务的需求不断推动该市场…...
高考倒计时:用倒计时软件 为梦想加油 可用于教室黑板或者电脑上
高考,这个被无数学子视为人生重要转折点的考试,即将来临。每一年的六月,都充满了紧张与期待。如何在这场人生的战役中取得胜利?除了日常的勤奋学习,科学的复习计划和心态调整外,一款好用的倒计时软件&#…...
人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换
接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…...
BERT模型的输出格式探究以及提取出BERT 模型的CLS表示,last_hidden_state[:, 0, :]用于提取每个句子的CLS向量表示
说在前面 最近使用自己的数据集对bert-base-uncased进行了二次预训练,只使用了MLM任务,发现在加载训练好的模型进行输出CLS表示用于下游任务时,同一个句子的输出CLS表示都不一样,并且控制台输出以下警告信息。说是没有这些权重。…...
InfluxDB 集成 Grafana
将InfluxDB集成到Grafana进行详细配置通常包括以下几个步骤:安装与配置InfluxDB、安装与配置Grafana、在Grafana中添加InfluxDB数据源以及创建和配置仪表板。以下是一个详细的配置指南: 一、安装与配置InfluxDB 下载与安装: 从InfluxDB的官…...
Vue跨标签通讯(本地存储)(踩坑)
我司有一个需求【用户指引】 需求是根标签有一个用户指引总开关,可以控制页面所有的用户指引是否在页面进入后初始是否默认打开,但是有些页面会新开标签这就设计到跨标签通讯了 我采取的方案是本地存储 重点:首先本地存储在页面是同源(即域名协议端口三…...
掌握创意之钥:全面解析HTML5 Canvas
在数字时代,表达创意的方式多种多样,而 HTML5 中的 <canvas> 元素无疑为网页开发者提供了一个强大的工具箱。无论你是想要创建动态图表、互动游戏还是复杂的可视化应用,掌握 Canvas 的基本用法都是迈向成功的关键一步。本文将带你一步步…...
mac port 安装redis 并设置为系统服务 自定义配置方法
mac系统中,port 包管理工具比brew的速度快N倍,今天就给大家分享一下在macos系统中如何使用 port安装 redis数据库并配置为服务自动启动和自定义redis.conf配置的方法。 1. 安装redis sudo port install redis 2. 启动redis服务 sudo port load redis …...
Agent AI: Surveying the Horizons of Multimodal Interaction---摘要、引言、代理 AI 集成
题目 智能体AI:多模态交互视野的考察 论文地址:https://arxiv.org/abs/2401.03568 图1:可以在不同领域和应用程序中感知和行动的Agent AI系统概述。Agent AI是正在成为通用人工智能(AGI)的一个有前途的途径。Agent AI培训已经证…...
二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周
一、目的 ClickHouse指标表中有个字段week_of_month,含义是这条数据属于本月第几周。 而且将本月第一天所在的那一周视为第一周,无论它是从周几开始的。比如2024-12-01是周日,即12月第一周。而2024-12-02是周一,即12月第二周 二…...
Unity 相机旋转及角度限制
前言 由于欧拉角具有直观的可读性,做相机旋转时选择修改eulerAngles 来实现旋转,但实际效果与预期稍有不同,这是因为欧拉角受到万向锁(Gimbal Lock)的影响,在赋值时需要对输入的角度进行调整。 if (value…...
基于CentOS系统利用Kamailio搭建企业级SIP服务器
一、Kamailio简介 Kamailio是一款开源的SIP服务器,具有高性能、可扩展、模块化等特点。它广泛应用于VoIP、即时通讯、视频会议等领域。Kamailio支持多种操作系统,如Linux、FreeBSD等,可以与其他开源项目(如 Asterisk、FreeSWITCH…...
部署项目报错
vue2项目部署后 Error: Cannot find module /views/*** 1.起因 登录页、首页等静态页面可以正常进入,后端访问也正常,可以获取到验证码。 但是登录之后会发现首页空白或者进入不到首页 F12查看有报错信息:Error: Cannot find module ‘/v…...
【AIGC】大模型面试高频考点-位置编码篇
【AIGC】大模型面试高频考点-位置编码篇 (一)手撕 绝对位置编码 算法(二)手撕 可学习位置编码 算法(三)手撕 相对位置编码 算法(四)手撕 Rope 算法(旋转位置编码…...
钓鱼攻击详解:鱼叉攻击与水坑攻击
钓鱼攻击详解:鱼叉攻击与水坑攻击 在现代网络安全领域中,钓鱼攻击(Phishing)是一种最常见且有效的攻击手段。它通过欺骗用户,引导其泄露敏感信息或执行恶意操作,从而为攻击者打开大门。本文将深入介绍两种…...
如何在自动化安全测试中,实现多工具集成与数据融合,以提高对Spring Boot应用程序安全漏洞的检测效率与准确性?
为了在自动化安全测试中实现多工具集成与数据融合,以提高对Spring Boot应用程序安全漏洞的检测效率与准确性,可以采取以下策略和方法: 文章目录 1. 工具选择与集成2. 数据标准化与聚合3. 数据分析与融合4. 持续改进5. 实施示例 1. 工具选择与…...
框架篇面试
一、Spring框架中的单例bean的安全性 Spring框架中有一个Scope注解,默认的值就是singleton,单例的;因为一般在spring的bean中注入的都是无状态的对象,所以没有线程安全问题。但是如果在bean中定义了可修改的成员变量,…...
STM32滴答定时器SysTick理解+时基设置(4.1)
文章目录 1. 什么是滴答定时器?2. SysTick定时器初始化2.1 systick定时器时钟源?2.2 定时器四个寄存器 3 函数设置3.1SysTick_Config(uint32_t ticks)函数3.2初始化函数 4. 延时函数实现4.1 ms延时思路及实现4.2 us延时 1. 什么是…...
数字化时代下的企业合规管理:全球化背景下的挑战与机遇
在全球化浪潮的推动下,企业合规管理已成为企业发展中不可或缺的一部分。随着各国法规日益严格,以及数字化技术的飞速发展,企业在扩展业务的同时,也面临着越来越多的合规挑战。有效的合规管理不仅有助于提高企业的管理水平和运营效…...
读《Effective Java》笔记 - 条目17
条目17:使可变性最小化 为什么要使可变性最小化? 不可变对象天然是线程安全的,可以在多个线程之间安全共享。而可变对象需要添加额外的同步机制保证线程安全。不可变对象一旦创建就不会改变,便于追踪和理解代码。而可变对象的状态…...
对比json数据是否变化
在 JavaScript 中,你可以使用多种方法来对比两个 JSON 数据是否发生变化。以下是几种常见的方式: 1. 使用 JSON.stringify 最简单的方法是将两个 JSON 对象序列化为字符串,并比较这些字符串。但需要注意的是,这种方法对于对象属…...
云计算实验室建设方案
一、云计算实验室建设方案 云计算实验教学整体解决方案,包括:云计算服务器集群、云计算实训平台、实训课程体系、行业实战课程系统、行业数据等,系统性地解决云计算实训教学的痛点问题。 【硬件系统】云计算实训一体机 云计算实训一体机是唯…...
一、理论基础-PSI
之前参加了隐语第2期,对隐语SecretFlow框架有了大致的了解,这次参加隐语第4期,学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义,PSI(隐私集合求交,Private Set Intersection即PSI)是安全多方计算&#x…...
C++学习0.2: RAII
引用: 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信(IPC)方式有锁(互斥锁、读写锁、自旋锁)、…...
机器学习基础
了解机器学习的基本概念,如监督学习、无监督学习、强化学习、模型评估指标(准确率、召回率、F1分数等)。 机器学习(Machine Learning,ML)是人工智能(AI)的一个分支,它使计…...
传输层TCP_三次握手四次挥手的过程
三次握手四次挥手 三次握手 三次握手...
AI主流的生成式工作流框架
根据搜索结果,以下是一些2024年比较主流的生成式工作流框架: 1. LangChain:LangChain是一个用于构建生成式AI工作流的开发框架,它支持多种语言模型、工具、数据源及其他系统的集成。 2. DSPy:DSPy是一个生成式AI工作…...
【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!
目录 WRF运行时间标准注意事项-本地时区问题 输入数据:ERA5时间标准ERA5数据和WRF模型需要转换为北京时间!!!北京时间(CST)与协调世界时(UTC)的关系转换方法 参考 WRF运行时间标准 …...
Qt 2D绘图之五:图形视图框架的结构、坐标系统和框架间的事件处理与传播
参考文章链接: Qt 2D绘图之五:图形视图框架的结构和坐标系统 Qt 2D绘图之六:图形视图框架的事件处理与传播 图形视图框架的结构 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们。但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动、…...
游戏引擎学习第34天
仓库:https://gitee.com/mrxiao_com/2d_game #这天内容比较多 开场介绍 游戏开发行业的基础是使用C和C编程,这是当今几乎所有游戏的开发标准。市面上广受欢迎的游戏,如《使命召唤》或《侠盗猎车手》,它们的底层代码和引擎几乎无一例外地采…...
深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)
本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝(Unstructur…...
[在线实验]-RabbitMQ镜像的下载与部署
镜像下载 docker的rabbitmq镜像资源-CSDN文库 加载镜像 docker load --input rabbitmq.tar 给镜像打标签 这里发现镜像名为none,需要给镜像重命名下 docker tag [镜像id] [新镜像名称]:[新镜像标签] docker tag ebaf409ffbe2 rabbitmq:management 运行镜像…...
Netty 入门应用:结合 Redis 实现服务器通信
在上篇博客中,我们了解了 Netty 的基本概念和架构。本篇文章将带你深入实践,构建一个简单的 Netty 服务端,并结合 Redis 实现一个数据存取的示例。在这个场景中,Redis 作为缓存存储,Netty 作为服务端处理客户端请求。通…...
推荐 编译器c++
网页型 https://www.acgo.cn/playground C 在线工具 | 菜鸟工具 AcWing - 在线题库 ZJYYC在线测评系统 少儿编程竞赛在线学习 登录 - JOYSKID 余博士教编程_酷哥OJ_酷哥爱编程_酷哥创客AI编程 登录 - Luogu Spilopelia 软件型 DEV-c Dev C软件下载...
【新品发布】ESP32-P4开发板 —— 启明智显匠心之作,为物联网及HMI产品注入强劲动力
核心亮点: ESP32-P4开发板,是启明智显精心打造的一款高性能物联网开发板。它专为物联网项目及HMI(人机界面)产品而设计,旨在为您提供卓越的性能和稳定可靠的运行体验。 强大硬件配置: 双核400MHz RISC-V处…...
MeterSphere 使用脚本处理数据
1、前置/后置脚本 支持BeanShell(JSR223)、python、groovy、JavaScript脚本语言,推荐BeanShell(JSR223)。 在前置脚本中可以直接引用JMeter 预定义对象,例如: -- log:用于在脚本执行过程中打印日志 //打印“Hello World!”到info…...
如何获取谷歌新闻API密钥?
在信息获取和新闻传播领域,快速获取最新的新闻动态至关重要。谷歌新闻API为开发者提供了强大的工具,能够方便地集成全球各类新闻内容。通过使用该API,开发者可以实现对新闻的实时访问和管理,为用户提供丰富的信息服务。本文将指导…...
【全网最新】若依管理系统基于SpringBoot的前后端分离版本开发环境配置
目录 提前准备: 下载源代码 设置依赖 设置后台连接信息 运行后台 运行前端 安装npm依赖 启动前端 登录网页客户端 提前准备: 1、安装mysql 5以上就可以。 2、安装redis. 3、安装npm npm下载地址:https://nodejs.org/dist/v22.12…...
备赛蓝桥杯--算法题目(3)
1. 2的幂 231. 2 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfTwo(int n) {return n>0&&n(n&(-n));} }; 2. 3的幂 326. 3 的幂 - 力扣(LeetCode) class Solution { public:bool isPowerOfT…...
如何解决 java.nio.charset.CoderMalfunctionError: 编码器故障错误问题?亲测有效的解决方法!
java.nio.charset.CoderMalfunctionError 是一个在 Java 中相对较少遇到的异常,通常与字符编码转换过程中的错误有关。当 Java 程序在进行字符编码转换时,遇到无法处理的字符或编码故障时,就会抛出该异常。 1. 问题描述 java.nio.charset.C…...
电气自动化 基于PLC控制的四路抢答器设计
摘要 本文描述了一款用三菱FX3U-48M可编程控制器设计的四路抢答器的系统构成、设计思路和功能。此抢答系统除了有基本抢答功能之外,还有计时、计算得分、亮灯提提示以及蜂鸣提醒功能。程序中设定答题时间,在主持人未按下开始抢答按钮之前,选…...
GA优化后的RBF神经网络
遗传算法(Genetic Algorithm, GA)优化后的RBF(Radial Basis Function)神经网络是一种结合进化算法与神经网络的混合模型,用于改进RBF神经网络的性能。以下是该模型的基本原理和相关公式: clear all close a…...
Scala:正则表达式
object test03 {//正则表达式def main(args: Array[String]): Unit {//定义一个正则表达式//1.[ab]:表示匹配一个字符,或者是a,或者是b//2.[a-z]:表示从a到z的26个字母中的任意一个//3.[A-Z]:表示从A到Z的26个字母中的任意一个//4.[0-9]:表示从0到9的10…...
vulnhub靶场之【hacksudo】1.0.1
前言 靶机:hacksudo 192.168.1.45 攻击:kali 192.168.1.16 都是虚拟机环境,桥接模式 主机发现 使用netdiscover或者arp-scan -l扫描 netdiscover -r 192.168.1.1/24信息收集 使用nmap扫描 因为看到2222是ssh服务,所以又扫…...
第4章:颜色和背景 --[CSS零基础入门]
在 CSS 中,颜色和背景属性是用于美化网页元素的重要工具。你可以通过多种方式定义颜色,并且可以设置元素的背景颜色、图像、渐变等。以下是关于如何在 CSS 中使用颜色和背景的一些关键点和示例。 1.颜色表示法 当然!以下是使用不同颜色表示…...
Python实现PBKDF2_SHA256加密密码
加密保存格式:pbkdf2_sha256$迭代次数$盐$哈希值 admin可能的结果:pbkdf2_sha256$10000$yzsusUJwrGfonwZzVxlnA$vgf/OgLf5C4wtQLtfNY9d68Hhxgv8eqZ0mwfxCqqeU import os import hashlib import base64 def password_encrypt(password, saltNone, iterations1000…...
React第十三节开发中常见问题之(视图更新、事件处理)
一、视图更新有哪些方案? 1、对于数据变量 正常的增删改查,只会让数据更新,但是不会触发 React 视图的更新; 如: <script lang"jsx">const baseTable [{name:Andy, age: 18, id: 1},{name:Jack, a…...
PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具
PyTorch 深度学习框架简介:灵活、高效的 AI 开发工具 PyTorch 作为一个深度学习框架,以其灵活性、可扩展性和高效性广受欢迎。无论是在研究领域进行创新实验,还是在工业界构建生产级的深度学习模型,PyTorch 都能提供所需的工具和…...
Vue 3 中的计算属性(Computed Properties)详解
目录 Vue 3 中的计算属性(Computed Properties)详解 引言 什么是计算属性? 创建和使用计算属性 示例 1:基本用法 示例 2:带有 getter 和 setter 的计算属性 计算属性 vs 方法 Vue 3 中的计算属性(Co…...