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

万兆以太网MAC设计(2)MAC_RX模块

文章目录

  • 前言
  • 一、模块功能
  • 二、代码
  • 三、仿真波形

前言

上文我们打通了了万兆以太网物理层和数据链路层,其实就是会使用IP核了,本文将正式开始MAC层设计第一篇,接收端设计。

一、模块功能

MAC_RX模块功能如下:

  • 解析接收的报文:接受报文的目的MAC、源MAC、报文类型
  • 将XGMII接口输入数据转化为AXIS的数据流形式传递给上层用户

难点在于数据格式的转化,最主要的是尾端KEEP信号该如何与有效数据进行对齐。
数据恢复的过程:

  1. 判断起始位SOF和起始位的位置:起始字节8‘hFB’位置存在俩种情况:第一种情况自然是在接收数据的第一个字节位置,但也存在在第五个字节位置的情况,所以需要分情况讨论。
    在这里插入图片描述
  2. 关键字段信息提取:根据起始位置的不同,目的MAC以及源MAC和类型信息都要分情况进行讨论。
  3. 数据恢复:同理,恢复数据也需要讨论。
  4. 结束位EOF以及结束位的位置判断 :结束位有八种情况,一拍数据64bit,结束位可能存在在任何一个byte上。
  5. 尾端KEPP对齐,根据起始位位置以及结束位位置,尾端KEEP信号需要讨论各种情况。
  6. AXIS数据转换 :前面相当于把KEEP和DATA信号处理好了,然后还需要产生VALID、LAST、USER信号。

二、代码

设计思路参考了FPGA奇哥系列网课

注意一下几点:

  1. 老生常谈的大小端问题,进入该模块的数据全部应该是大端数据,我完全是按照大端进行处理的。
  2. LAST信号和KEEP信号分类讨论条件是一样的,俩者是在数据尾端同时进行变化的,根据最后一拍有效数据字节数的多少,LAST信号会在不同的时刻拉高(在r_eof拉高或w_eof拉高时刻)。
  3. USER信号是用户自定义的,我这里暂时定义为接收数据的源MAC的低16位加类型(16位)。
  4. 万兆以太网控制字符定义:
    在这里插入图片描述
module TEN_GIG_MAC_RX(input           i_clk               ,input           i_rst               ,input  [63:0]   i_xgmii_rxd         ,input  [7 :0]   i_xgmii_rxc         ,output [63:0]   m_axis_rdata        ,output [31:0]   m_axis_ruser        ,//用户自定义{r_src_mac[15:0],r_type}output [7 :0]   m_axis_rkeep        ,output          m_axis_rlast        ,output          m_axis_rvalid       
);
/******************************function*****************************//******************************parameter****************************/
localparam      P_FRAME_IDLE    = 8'h07 ,P_FRAME_START   = 8'hFB ,P_FRAME_END     = 8'hFD ,P_FRAME_EEROR   = 8'hFE ;
/******************************mechine******************************//******************************reg**********************************/
reg  [63:0]     ri_xgmii_rxd        ;
reg  [63:0]     ri_xgmii_rxd_1d     ;
reg  [7 :0]     ri_xgmii_rxc        ;
reg  [7 :0]     ri_xgmii_rxc_1d     ;
reg  [63:0]     rm_axis_rdata       ;
//reg  [63:0]     rm_axis_rdata_1d    ;
reg  [31:0]     rm_axis_ruser       ;
reg  [7 :0]     rm_axis_rkeep       ;
reg             rm_axis_rlast       ;
reg             rm_axis_rvalid      ;
//解析接收数据
reg  [15:0]     r_recv_cnt          ;
reg             r_comma             ;
reg  [47:0]     r_dst_mac           ;
reg  [47:0]     r_src_mac           ;
reg  [15:0]     r_type              ;
reg             r_data_run          ;//开始产生axis输出数据
reg             r_data_run_1d       ;
reg             r_data_run_2d       ;reg             r_sof               ;
reg             r_eof               ;
reg  [2 :0]     r_sof_location      ;
reg  [2 :0]     r_eof_location      ;
/******************************wire*********************************/
wire            w_sof           ;
wire            w_eof           ;
wire [2 :0]     w_sof_location  ;
wire [2 :0]     w_eof_location  ;
/******************************component****************************//******************************assign*******************************/
assign m_axis_rdata  = rm_axis_rdata    ;
assign m_axis_ruser  = rm_axis_ruser    ;
assign m_axis_rkeep  = rm_axis_rkeep 	;
assign m_axis_rlast  = rm_axis_rlast 	;
assign m_axis_rvalid = rm_axis_rvalid   ;
//进入该模块的数据已经全部被转换为大端模式
//开始字符以及位置判断
assign w_sof =  ((ri_xgmii_rxd[63:56] == P_FRAME_START) && (ri_xgmii_rxc[7] == 1)) || ((ri_xgmii_rxd[31:24] == P_FRAME_START) && (ri_xgmii_rxc[3] == 1));
assign w_sof_location = ((ri_xgmii_rxd[63:56] == P_FRAME_START) && (ri_xgmii_rxc[7] == 1)) ? 7 : ((ri_xgmii_rxd[31:24] == P_FRAME_START) && (ri_xgmii_rxc[3] == 1)) ? 3 :0;
//结束字符以及位置判断
assign w_eof =  ((ri_xgmii_rxd[63:56] == P_FRAME_END) && (ri_xgmii_rxc[7] == 1)) || ((ri_xgmii_rxd[55:48] == P_FRAME_END) && (ri_xgmii_rxc[6] == 1)) ||((ri_xgmii_rxd[47:40] == P_FRAME_END) && (ri_xgmii_rxc[5] == 1)) ||((ri_xgmii_rxd[39:32] == P_FRAME_END) && (ri_xgmii_rxc[4] == 1)) ||((ri_xgmii_rxd[31:24] == P_FRAME_END) && (ri_xgmii_rxc[3] == 1)) ||((ri_xgmii_rxd[23:16] == P_FRAME_END) && (ri_xgmii_rxc[2] == 1)) ||((ri_xgmii_rxd[15: 8] == P_FRAME_END) && (ri_xgmii_rxc[1] == 1)) ||((ri_xgmii_rxd[7 : 0] == P_FRAME_END) && (ri_xgmii_rxc[0] == 1));assign w_eof_location = ((ri_xgmii_rxd[63:56] == P_FRAME_END) && (ri_xgmii_rxc[7] == 1)) ? 7 : ((ri_xgmii_rxd[55:48] == P_FRAME_END) && (ri_xgmii_rxc[6] == 1)) ? 6 :((ri_xgmii_rxd[47:40] == P_FRAME_END) && (ri_xgmii_rxc[5] == 1)) ? 5 :((ri_xgmii_rxd[39:32] == P_FRAME_END) && (ri_xgmii_rxc[4] == 1)) ? 4 :((ri_xgmii_rxd[31:24] == P_FRAME_END) && (ri_xgmii_rxc[3] == 1)) ? 3 :((ri_xgmii_rxd[23:16] == P_FRAME_END) && (ri_xgmii_rxc[2] == 1)) ? 2 :((ri_xgmii_rxd[15: 8] == P_FRAME_END) && (ri_xgmii_rxc[1] == 1)) ? 1 :((ri_xgmii_rxd[7 : 0] == P_FRAME_END) && (ri_xgmii_rxc[0] == 1)) ? 0 : 0;
/******************************always*******************************/
always @(posedge i_clk or posedge i_rst)beginif(i_rst)beginri_xgmii_rxd    <= 'd0;ri_xgmii_rxc    <= 'd0;ri_xgmii_rxd_1d <= 'd0;ri_xgmii_rxc_1d <= 'd0;endelse beginri_xgmii_rxd    <= i_xgmii_rxd      ;ri_xgmii_rxc    <= i_xgmii_rxc      ;ri_xgmii_rxd_1d <= ri_xgmii_rxd     ;ri_xgmii_rxc_1d <= ri_xgmii_rxc     ;end
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)beginr_sof           <= 'd0;r_sof_location  <= 'd0;endelse if(w_sof)beginr_sof           <= w_sof            ;r_sof_location  <= w_sof_location   ;endelse beginr_sof           <= 'd0            ;r_sof_location  <= r_sof_location   ;end
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)beginr_eof           <= 'd0;r_eof_location  <= 'd0;endelse if(w_eof)beginr_eof           <= w_eof            ;r_eof_location  <= w_eof_location   ;endelse beginr_eof           <= 'd0            ;r_eof_location  <= r_eof_location   ;    end
end always @(posedge i_clk or posedge i_rst)beginif(i_rst)r_comma <= 'd0;else if(r_eof)r_comma <= 'd0;else if((r_sof_location == 7) && (ri_xgmii_rxd_1d[55:0] == 56'h55_5555_5555_5555) && (ri_xgmii_rxd[63:56] == 8'hd5))r_comma <= 'd1;else if((r_sof_location == 3) && (ri_xgmii_rxd_1d[23:0] == 24'h55_5555) && (ri_xgmii_rxd[63:24] == 40'h55_5555_55d5))r_comma <= 'd1;elser_comma <= r_comma;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)r_recv_cnt <= 'd0;else if(r_eof)r_recv_cnt <= 'd0;else if(r_sof | r_recv_cnt)r_recv_cnt <= r_recv_cnt + 'd1;elser_recv_cnt <= r_recv_cnt;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)r_dst_mac <= 'd0;else if(r_sof_location == 7 && r_recv_cnt == 1)r_dst_mac <= ri_xgmii_rxd_1d[55:8];else if(r_sof_location == 3 && r_recv_cnt == 1)r_dst_mac <= {ri_xgmii_rxd_1d[23:0],ri_xgmii_rxd[63:40]};elser_dst_mac <= r_dst_mac;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)r_src_mac <= 'd0;else if(r_sof_location == 7 && r_recv_cnt == 1)r_src_mac <= {ri_xgmii_rxd_1d[7:0],ri_xgmii_rxd[63:24]};else if(r_sof_location == 3 && r_recv_cnt == 2)r_src_mac <= {ri_xgmii_rxd_1d[39:0],ri_xgmii_rxd[63:56]};elser_src_mac <= r_src_mac;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)r_type <= 'd0;else if(r_sof_location == 7 && r_recv_cnt == 2)r_type <= ri_xgmii_rxd_1d[23:8];else if(r_sof_location == 3 && r_recv_cnt == 3)r_type <= ri_xgmii_rxd_1d[55:40];elser_type <= r_type;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)r_data_run <= 'd0;else if(rm_axis_rlast)r_data_run <= 'd0;else if(r_sof_location == 7 && r_recv_cnt == 1)r_data_run <= 'd1;else if(r_sof_location == 3 && r_recv_cnt == 2)r_data_run <= 'd1;elser_data_run <= r_data_run;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)beginr_data_run_1d <= 'd0;r_data_run_2d <= 'd0;endelse beginr_data_run_1d <= r_data_run;r_data_run_2d <= r_data_run_1d;end
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)rm_axis_rdata <= 'd0;else if(rm_axis_rlast)rm_axis_rdata <= 'd0;else if(r_sof_location == 7 && r_data_run)rm_axis_rdata <= {ri_xgmii_rxd_1d[7:0],ri_xgmii_rxd[63:8]};else if(r_sof_location == 3 && r_data_run)rm_axis_rdata <= {ri_xgmii_rxd_1d[39:0],ri_xgmii_rxd[63:40]};elserm_axis_rdata <= 'd0;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)rm_axis_ruser <= 'd0;else if(r_sof_location == 7 && r_recv_cnt == 2)rm_axis_ruser <= {r_src_mac,ri_xgmii_rxd_1d[23:8]};else if(r_sof_location == 3 && r_recv_cnt == 3)rm_axis_ruser <= {r_src_mac,ri_xgmii_rxd_1d[55:40]};elserm_axis_ruser <= rm_axis_ruser;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)rm_axis_rkeep <= 'd0;else if(r_sof_location == 7 && w_eof)case (w_eof_location)7       : rm_axis_rkeep <= 8'b1000_0000;6       : rm_axis_rkeep <= 8'b1100_0000;5       : rm_axis_rkeep <= 8'b1110_0000;4       : rm_axis_rkeep <= 8'b1111_0000;3       : rm_axis_rkeep <= 8'b1111_1000;2       : rm_axis_rkeep <= 8'b1111_1100;1       : rm_axis_rkeep <= 8'b1111_1110;0       : rm_axis_rkeep <= 8'b1111_1111;default : rm_axis_rkeep <= 8'b1111_1111;endcaseelse if(r_sof_location == 3 && (w_eof && w_eof_location >= 4))case (w_eof_location)7       : rm_axis_rkeep <= 8'b1111_1000;6       : rm_axis_rkeep <= 8'b1111_1100;5       : rm_axis_rkeep <= 8'b1111_1110;4       : rm_axis_rkeep <= 8'b1111_1111;3       : rm_axis_rkeep <= 8'b1000_0000;2       : rm_axis_rkeep <= 8'b1100_0000;1       : rm_axis_rkeep <= 8'b1110_0000;0       : rm_axis_rkeep <= 8'b1111_0000;default : rm_axis_rkeep <= 8'b1111_1111;endcaseelse if(r_sof_location == 3 && (r_eof && r_eof_location < 4))case (r_eof_location)7       : rm_axis_rkeep <= 8'b1111_1000;6       : rm_axis_rkeep <= 8'b1111_1100;5       : rm_axis_rkeep <= 8'b1111_1110;4       : rm_axis_rkeep <= 8'b1111_1111;3       : rm_axis_rkeep <= 8'b1000_0000;2       : rm_axis_rkeep <= 8'b1100_0000;1       : rm_axis_rkeep <= 8'b1110_0000;0       : rm_axis_rkeep <= 8'b1111_0000;default : rm_axis_rkeep <= 8'b1111_1111;endcaseelserm_axis_rkeep <= 8'b1111_1111;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)rm_axis_rlast <= 'd0;else if(r_sof_location == 7 && w_eof)rm_axis_rlast <= 'd1;else if(r_sof_location == 3 && (w_eof && w_eof_location >= 4))rm_axis_rlast <= 'd1;else if(r_sof_location == 3 && (r_eof && r_eof_location < 4))rm_axis_rlast <= 'd1;elserm_axis_rlast <= 'd0;
endalways @(posedge i_clk or posedge i_rst)beginif(i_rst)rm_axis_rvalid <= 'd0;else if(rm_axis_rlast)rm_axis_rvalid <= 'd0;else if(r_data_run && !r_data_run_1d)rm_axis_rvalid <= 'd1;elserm_axis_rvalid <= rm_axis_rvalid; 
endendmodule

三、仿真波形

仿真文件当中要遍历所有的起始位置与结束为止组合,一共16种。
在这里插入图片描述
以起始位在第五个byte,结束位在第一个byte为例,其波形如下,结果正确,对比其他16种情况,波形全部正确。
在这里插入图片描述

相关文章:

万兆以太网MAC设计(2)MAC_RX模块

文章目录 前言一、模块功能二、代码三、仿真波形 前言 上文我们打通了了万兆以太网物理层和数据链路层&#xff0c;其实就是会使用IP核了&#xff0c;本文将正式开始MAC层设计第一篇&#xff0c;接收端设计。 一、模块功能 MAC_RX模块功能如下&#xff1a; 解析接收的报文&…...

D. Solve The Maze Codeforces Round 648 (Div. 2)

题目链接&#xff1a; Problem - 1365D - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/problemset/problem/1365/D 题目大意&#xff1a; 有一张地图n行m列&#xff08;地图外面全是墙&#xff09;&#xff0c…...

CPU核心数、线程数都是什么意思?

最早&#xff0c;每个物理 cpu 上只有一个核心&#xff0c;对操作系统而言&#xff0c;也就是同一时刻只能运行一个进程/线程。 为了提高性能&#xff0c;cpu 厂商开始在单个物理 cpu 上增加核心&#xff08;实实在在的硬件存在&#xff09;&#xff0c;也就出现了多核 cpu&…...

每日一篇 4.12

misstep&#xff1a;失误 epic proportions.&#xff1a;史无前例 arguably&#xff1a;按理来说 assembly&#xff1a;组装 performed &#xff1a;执行 underpins&#xff1a;支撑 holds a monopoly&#xff1a;垄断了 shipped&#xff1a;发货 a market capitalizati…...

鸿蒙南向开发:【智能烟感】

样例简介 智能烟感系统通过实时监测环境中烟雾浓度&#xff0c;当烟雾浓度超标时&#xff0c;及时向用户发出警报。在连接网络后&#xff0c;配合数字管家应用&#xff0c;用户可以远程配置智能烟感系统的报警阈值&#xff0c;远程接收智能烟感系统报警信息。实现对危险及时报…...

【主题广|检索稳定】2024年生态工程与农业科技国际会议 (EEAT 2024)

2024年生态工程与农业科技国际会议 (EEAT 2024) 2024 International Conference on Ecological Engineering and Agricultural Technology 【会议简介】 2024年生态工程与农业科技国际会议即将在贵阳召开。本次会议将汇集全球生态工程与农业科技领域的专家学者&#xff0c;共…...

代码随想录算法训练营第三十八天|509. 斐波那契数、 70. 爬楼梯、746. 使用最小花费爬楼梯

509 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c…...

07-app端文章搜索

app端文章搜索 1) 今日内容介绍 1.1)App端搜索-效果图 1.2)今日内容 文章搜索 ElasticSearch环境搭建 索引库创建 文章搜索多条件复合查询 索引数据同步 搜索历史记录 Mongodb环境搭建 异步保存搜索历史 查看搜索历史列表 删除搜索历史 联想词查询 联想词的来源 联…...

✔ ★Java项目——设计一个消息队列(二)

Java项目——设计一个消息队列 四. 项⽬创建五. 创建核⼼类创建 Exchange&#xff08;名字、类型、持久化&#xff09;创建 MSGQueue&#xff08;名字、持久化、独占标识&#xff09;创建 Binding&#xff08;交换机名字、队列名字、bindingKey用于与routingKey匹配&#xff09…...

Java语言实现生产者/消费者问题

经典例题&#xff1a;生产者/消费者问题 生产者(Productor)将产品放在柜台(Counter)&#xff0c;而消费者(Customer)从柜台 处取走产品&#xff0c;生产者一次只能生产固定数量的产品(比如:1&#xff09;&#xff0c; 这时柜台中不能 再放产品,此时生产者应停止生产等待消费者…...

bugku-web-file_get_contents

<?php extract($_GET); if (!empty($ac)){$f trim(file_get_contents($fn));if ($ac $f){echo "<p>This is flag:" ." $flag</p>";}else{echo "<p>sorry!</p>";} } ?> 这里涉及到几个不常用的函数 这里直接构…...

Python数据处理和常用库(如NumPy、Pandas)

Python是一种功能强大的编程语言&#xff0c;广泛应用于数据处理和分析领域。在Python中&#xff0c;有一些常用的库可以帮助我们进行数据处理和分析&#xff0c;其中包括NumPy和Pandas。下面是关于这两个库的简介和使用示例&#xff1a;NumPy&#xff08;Numerical Python&…...

[SystemVerilog]Simulation and Test Benches

Simulation and Test Benches 测试语言中有很大一部分专门用于测试台和测试。在本章中&#xff0c;我们将介绍为硬件设计编写高效测试台的一些常用技术。 6.1 How SystemVerilog Simulator Works 在深入研究如何编写适当的测试台之前&#xff0c;我们需要深入了解模拟器的工作原…...

lightgbm-安装失败(解决方案)

1.pip install lightgbm 报错&#xff0c;出现长篇标黄和标红的&#xff0c;本人表示看不懂&#xff0c;直接忽略&#xff0c;如下所示&#xff1a; 2.尝试pip install lightgbm -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com&#xff0c;安装也报错&…...

halcon图像相减算子sub_image

1.图像相减算子 sub_image(ImageMinuend , ImageSubtrahend : ImageSub : Mult , Add :) &#xff08;1&#xff09;参数解释&#xff1a; ImageMinuend &#xff1a;输入参数需要被减的图片 ImageSubtrahend &#xff1a;输入参数拿来减的图片 ImageSub &#xff1a;输出…...

final、finally 和 finalize 有什么区别?

final 是一个关键字&#xff0c;用于声明一个类、方法或变量。当用 final 修饰一个类时&#xff0c;表示该类不能被继承&#xff1b;当用 final 修饰一个方法时&#xff0c;表示该方法不能被子类重写&#xff1b;当用 final 修饰一个变量时&#xff0c;表示该变量只能被赋值一次…...

智能运维场景 | 科技风险预警,能实现到什么程度?

[ 原作者&#xff1a;擎创夏洛克&#xff0c;本文略做了节选和改编 ] 每次一说到“风险预警”&#xff0c;就会有客户问我们能做怎样的风险预警。实际上在智能运维厂商来说&#xff0c;此风险非彼风险&#xff0c;不是能做银行的业务上的风险预警&#xff08;比如贷款风险等&a…...

中颖51芯片学习3. 定时器

中颖51芯片学习3. 定时器 一、SH79F9476定时器简介1. 简介2. 定时器运行模式 二、定时器21. 说明&#xff08;1&#xff09;时钟&#xff08;2&#xff09;工作模式 2. 寄存器&#xff08;1&#xff09;控制寄存器 T2CON&#xff08;2&#xff09;定时器2模式控制寄存器 T2MOD …...

[python] Numpy库用法(持续更新)

先导入一下 import numpy as np 一、np.random用法 生成随机整数&#xff1a;np.random.randint(low, high, size) low: 最小值high: 最大值size: 生成的数组大小&#xff08;可以是多维&#xff0c;下面同理&#xff09; 生成随机浮点数&#xff1a;np.random.uniform(low, …...

vue快速入门(十七)v-model数据双向绑定修饰符

注释很详细&#xff0c;直接上代码 上一篇 新增内容 v-model.trim 自动去除首尾空格v-model.number 自动转换成数字类型 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" con…...

2024-2025年申报各类科研项目基金撰写及技巧

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…...

Python基于Django的微博热搜、微博舆论可视化系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【Linux学习】初识Linux指令(一)

文章目录 1.指令操作与图形化界面操作1.什么是指令操作&#xff0c;什么是图形化界面操作&#xff1f; 2.Linux下基本指令1.Linux下的复制粘贴2.Linux两个who命令3.补充知识4.pwd指令5. ls 指令6.cd 指令1.目录树2.相对路径与绝对路劲3.常用cd指令 7.tree指令8. touch指令9.sta…...

基于Python实现盈利8371%的交易策略

本文介绍了通过Python和Benzinga API构建自动化交易策略的方法&#xff0c;帮助交易者方便的回测交易策略。原文: An Algo Trading Strategy which made 8,371%: A Python Case Study Behnam Norouzi Unsplash 导言 传统自动化交易策略(如均线交叉或 RSI 临界点突破策略)已被证…...

如何在Linux中找到正在运行的Java应用的JAR文件

当你在Linux服务器上工作时&#xff0c;可能需要找到某个正在运行的Java应用的JAR文件位置。这对于诊断问题、更新应用或理解部署结构非常有用。以下是一个步骤详细的指南&#xff0c;帮助你找到这些信息。 1. 确定Java进程 首先&#xff0c;你需要确定正在运行的Java应用的进…...

几分钟学会TypeScript

目录 一、类型推断和类型注解二.类型注解&#xff0c;声明时指定类型三、类型断言四、基础类型和联合类型字符串数字和浮点类型布尔空和undefined多类型值限定 五、数组 元组 枚举数组元组,?代表可选参数枚举枚举使用 六、函数函数作为参数 七、类、接口与抽象类类访问修饰符类…...

最新版手机软件App下载排行网站源码/App应用商店源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 一款简洁蓝色的手机软件应用app下载排行&#xff0c;app下载平台&#xff0c;最新手机app发布网站响应式织梦模板。 主要有&#xff1a;主页、app列表页、app介绍详情页、新闻资讯列…...

R语言计算:t分布及t检验

t分布理论基础 t分布也称Student’s t-distribution&#xff0c;主要出现在小样本统计推断中&#xff0c;特别是当样本量较小且总体标准差未知时&#xff0c;用于估计正态分布的均值。其定义基于正态分布和 X 2 X^{2} X2分布&#xff08;卡方分布&#xff09;。如果随机变量X服…...

uni-app的地图定位与距离测算功能的实现

文章目录 一、引言二、uni-app地图定位实现三、距离测算技术四、完整代码五、结论本文着重探讨了如何在uni-app中实现地图定位,以及如何计算当前定位与目标位置之间的距离。 一、引言 在移动应用开发中,地图定位与距离测算是常见的功能需求。无论是出行导航、位置签到,还是…...

如何从应用商店Microsoft Store免费下载安装HEVC视频扩展插件

在电脑上打开一张HEIC类型的图片提示缺少HEVC解码器&#xff0c;无法打开查看&#xff0c;现象如下&#xff1a; 这种情况一般会提示我们需要下载安装HEVC解码器&#xff0c;点击“立即下载并安装”会跳转到应用商店&#xff0c;但是我们发现需要付费7元才能下载安装 免费安装…...