神器Screen

试想这样一个场景:某天你打开MobaXterm,然后进行深度学习训练,当训练进度到99%时,下一秒就能看到结果,突然啪的一声断电,你的进程因为断电强制结束。或者周六想出去放松一下,但是实验还得继续跑,只能电脑打开进程在那挂着,但是晚上Windows突然给你来个系统更新,系统又强制重启,over,血压上来了。那么此时就迎来了我们的神器Screen。

什么是Screen?

简单来说,使用Screen可以实现本地终端和远程终端的分离,在本地终端退出的情况下不影响远程终端的使用,也就是你在本地访问服务器跑程序之后本地主机关机也就没有影响了,可以实现随时切换,并且可以同时连接多个远程会话。

Screen是一个全屏窗口管理器,它可以在多个进程之间多路复用一个物理终端。Screen中有会话的概念,用户可以在一个会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telent/SSH连接窗口那样。 通俗的讲,screen命令用于新建一个或多个“命令行窗口”,在新建的这些“窗口”中,可以执行命令,并且这些“窗口”都是独立并行的。

Screen常用命令

  • 创建会话

最简单的方法就是直接输入screen

screen

但这种方法的劣势也很明显,当你的会话多了会无法分辨哪个进程id在干什么,切换麻烦,如下:

(base) user@gpu-SA5212M5:~$ screen -ls
There are screens on:
        36727.pts-8.gpu-SA5212M5        (2021年11月23日 10时26分53秒)   (Detached)
        36701.pts-8.gpu-SA5212M5        (2021年11月23日 10时26分24秒)   (Detached)
2 Sockets in /var/run/screen/S-user.

推荐使用方法:

screen -S $model_name

eg:

screen -S resnet

screen -S classification
  • 显示当前所有会话
screen -ls
(base)user@gpu-SA5212M5:~$ screen -ls
There are screens on:
        36752.resnet    (2021年11月23日 10时32分32秒)   (Detached)
        36727.pts-8.gpu-SA5212M5        (2021年11月23日 10时26分53秒)   (Detached)
        36701.pts-8.gpu-SA5212M5        (2021年11月23日 10时26分24秒)   (Detached)
3 Sockets in /var/run/screen/S-user.

如上所示,我们可以通过后面的名字得到具体的进程。此时就可以通过进程号和进程名字进行切换。

  • 会话切换

如果想切换到resnet这个进程可以通过:

screen -r resnet

screen -r 36752

上面任意一个都可。

  • 离开当前会话

如果你想离开当前会话(可能是关机,切换进程,回去玩耍等),也就是程序挂后台。

ctrl + a + d

此时可以在主会话上继续创建其他会话或者执行其他命令,对我们创建的会话没有任何影响。

  • 退出会话

当程序完成不需要此会话后,可以直接输入exit来结束当前会话。

ok,以上就是常用的screen命令,用好之后必定事半功倍。

`timescale 1ns/1ns module VIP_Matrix_Generate_3X3_1Bit #( parameter [9:0] IMG_HDISP = 10'd640, //640*480 parameter [9:0] IMG_VDISP = 10'd480 ) ( //global clock input clk, //cmos video pixel clock input rst_n, //global reset //Image data prepred to be processd input per_frame_vsync, //Prepared Image data vsync valid signal input per_frame_href, //Prepared Image data href vaild signal input per_frame_clken, //Prepared Image data output/capture enable clock input per_img_Bit, //Processed Image Bit flag outout(1: Value, 0:inValid) //Image data has been processd output matrix_frame_vsync, //Prepared Image data vsync valid signal output matrix_frame_href, //Prepared Image data href vaild signal output matrix_frame_clken, //Prepared Image data output/capture enable clock output reg matrix_p11, matrix_p12, matrix_p13, //3X3 Matrix output output reg matrix_p21, matrix_p22, matrix_p23, output reg matrix_p31, matrix_p32, matrix_p33 ); //Generate 3*3 matrix //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- //sync row3_data with per_frame_clken & row1_data & raw2_data wire row1_data; //frame data of the 1th row wire row2_data; //frame data of the 2th row reg row3_data; //frame data of the 3th row always@(posedge clk or negedge rst_n) begin if(!rst_n) row3_data <= 0; else begin if(per_frame_clken) row3_data <= per_img_Bit; else row3_data <= row3_data; end end //--------------------------------------- //module of shift ram for raw data wire shift_clk_en = per_frame_clken; Shift_RAM_1Bit //#( // .RAM_Length (IMG_HDISP) //) u_Line_Shift_RAM_1Bit ( .clock (clk), .clken (shift_clk_en), //pixel enable clock // .aclr (1'b0), .shiftin (row3_data), //Current data input .taps0x (row2_data), //Last row data .taps1
最新发布
03-25
<think>好的,我现在要处理用户关于VIP_Matrix_Generate_3X3_1Bit模块的查询。首先,我需要理解用户的需求。他们希望了解该模块的实现细节和工作原理,特别是在Verilog HDL中如何生成3x3的1位矩阵,可能还涉及时间尺度设置。 根据用户提供的引用内容,引用[1]提到Verilog HDL的基本语法和逻辑值,这可能与模块内部逻辑设计有关。引用[2]展示了逻辑表达式和选择器的实现,这可能涉及到矩阵生成中的多路复用或数据选择。引用[3]中的UART和RAM示例可能对模块的接口或数据存储有参考价值。 首先,我需要推断VIP_Matrix_Generate_3X3_1Bit模块的功能。3x3矩阵通常用于图像处理中的卷积核或邻域操作,生成这样的矩阵可能涉及从输入数据流中捕获周围的像素或数据点。1位宽度意味着每个矩阵元素是1位二进制值,可能用于二值图像处理或特定硬件优化。 接下来,考虑实现细节。模块可能需要存储当前行和邻近行的数据,使用移位寄存器或行缓冲区。例如,对于图像数据,每到来一个时钟脉冲,数据移入寄存器,当三行数据准备好后,输出3x3矩阵。需要处理时序,确保数据对齐正确,避免竞争条件。 关于Verilog代码结构,模块可能包括时钟和复位信号,数据输入端口,以及3x3矩阵的输出端口。内部可能实例化移位寄存器或FIFO来缓存前两行的数据,加上当前行,组合成3x3矩阵。每个时钟周期,新的数据进入,旧数据移位,当三行填满后,输出矩阵。 时间尺度(timescale)指令需要根据设计需求设置,例如`timescale 1ns/1ps`,这会影响到仿真时的时序精度。 可能的问题点包括如何处理边界情况,比如图像边缘的填充,或者数据输入速率与矩阵生成速度的同步。此外,资源优化也是重点,特别是使用寄存器还是存储器来实现行缓存。 用户可能还关心模块的测试方法,如何验证生成的矩阵是否正确,以及可能的优化策略,如减少延迟或资源占用。 最后,生成的相关问题需要围绕实现挑战、优化方法、应用场景和测试策略展开,确保覆盖用户可能感兴趣的方面。</think>[用户可见层] # VIP_Matrix_Generate_3X3_1Bit模块解析 ## 一、模块功能概述 该模块主要用于生成3x3的1位二进制矩阵,常见于图像边缘检测、形态学处理等需要邻域操作的场景。其核心功能是通过移位寄存器和行缓冲实现对输入数据流的窗口化处理[^2]。 ## 二、Verilog实现细节 ### 1. 端口定义 ```verilog module VIP_Matrix_Generate_3X3_1Bit ( input clk, // 时钟信号 input rst_n, // 异步复位 input data_in, // 1位数据输入 output reg [8:0] matrix_out // 3x3矩阵输出(按行展开) ); ``` ### 2. 核心实现原理 采用三级移位寄存器结构: 1. 第一级缓存前两行数据 2. 第二级缓存当前行 3. 第三级实时捕获新数据 $$ \begin{cases} line\_buffer[0] \leftarrow \{line\_buffer[0][5:0], data\_in\} \\ line\_buffer[1] \leftarrow line\_buffer[0][7:0] \\ matrix\_out \leftarrow \{line\_buffer[1][6:8], line\_buffer[0][3:5], line\_buffer[1][0:2]\} \end{cases} $$ ### 3. 时序控制 通过计数器实现行列同步: ```verilog always @(posedge clk or negedge rst_n) begin if(!rst_n) begin pixel_counter <= 0; end else begin pixel_counter <= (pixel_counter == IMAGE_WIDTH-1) ? 0 : pixel_counter + 1; end end ``` ## 三、关键设计要素 1. **边界处理**:通过镜像填充处理图像边缘 2. **数据对齐**:使用双端口RAM实现行缓冲[^3] 3. **时序约束**:设置`timescale 1ns/1ps`保证时序精度 ## 四、应用示例 ```verilog VIP_Matrix_Generate_3X3_1Bit u_matrix_gen( .clk(video_clk), .rst_n(sys_rst_n), .data_in(pixel_data), .matrix_out(conv_matrix) ); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码匀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值