HDLBits练习汇总-14-时序逻辑设计测试--状态机(二)

news2024/12/25 13:54:29

水箱问题(Exams/ece241 2013 q4)

一个大水库的水为几个用户服务。为了保持足够高的水位,三个传感器以5英寸的间隔垂直放置。当水位高于最高传感器S3时,输入流量应为零。当液位低于最低传感器(Si)时,流量应处于最大(公称流量阀和补充流量阀均打开)。当水位在上下两个传感器之间时,流量由两个因素决定:水位和上次传感器变化前的水位。每个水位都有一个与之相关的名义流量,如下表所示。如果传感器的变化表明以前的水平低于当前水平,则应该发生名义流量。如果之前的水平高于当前水平,应通过打开补充流量阀(由AFR控制)来增加流量。画出水库控制器的摩尔模型状态图。清楚地指出每个状态的所有状态转换和输出。FSM的输入是S1, S2和S3;输出为FR1,FR2,FR3和△FR。

水箱问题

还包括一个高电平有效同步复位,可将状态机复位到与水位长时间处于低位时相当的状态(未置位传感器,并且所有四个输出均置位)。

模块声明

module top_module (
    input clk,
    input reset,
    input [3:1] s,
    output fr3,
    output fr2,
    output fr1,
    output dfr
); 

题目解析

对于本题来说,主要的关键就是设计状态转移图,然后理清输出的逻辑即可完成整体设计。对于水箱的状态,从上图中的状态可以看出对应状态的输出,对于水箱的水位状态,例如处于低于S1时,此时的状态可能为持续低于S1或者水位上升将水位处于S1和S2之间。其余状态同理,状态变化为低于当前、高于当前或者保持不变。对于输出状态dfr,如果之前的水平高于当前水平dfr置位为高。

答案

状态转移图

module top_module (
        input clk,
        input reset,
        input [3:1] s,
        output fr3,
        output fr2,
        output fr1,
        output dfr
    );

    reg [2-1:0] state=0;
    reg [2-1:0] next_state=0;
	localparam
        BL_S1 = 0,
        BW_S1andS2 = 1,
        BW_S2andS3 = 2,
        AB_S3 = 3;
    always @(posedge clk)
    begin
        // State flip-flops with synchronous reset
        if(reset=='b1)
            state<=BL_S1;
        else
            state<=next_state;
    end
    

    wire below_S1=(s==3'b000);
    wire between_S1_S2=(s==3'b001);
    wire between_S2_S3=(s==3'b011);
    wire above_S3=(s==3'b111);

    always @(*)
    begin
        case(state)
            BL_S1:
            begin
                if (below_S1)
                begin
                    next_state = BL_S1;
                end
                else if (between_S1_S2)
                begin
                    next_state = BW_S1andS2;
                end
                else
                begin
                    next_state = state;
                end
            end
            BW_S1andS2:
            begin
                if (between_S1_S2)
                begin
                    next_state = BW_S1andS2;
                end
                else if (between_S2_S3)
                begin
                    next_state = BW_S2andS3;
                end
                else if (below_S1)
                begin
                    next_state = BL_S1;
                end
                else
                begin
                    next_state = state;
                end
            end
            BW_S2andS3:
            begin
                if (between_S2_S3)
                begin
                    next_state = BW_S2andS3;
                end
                else if (between_S1_S2)
                begin
                    next_state = BW_S1andS2;
                end
                else if (above_S3)
                begin
                    next_state = AB_S3;
                end
                else
                begin
                    next_state = state;
                end
            end
            AB_S3:
            begin
                if (between_S2_S3)
                begin
                    next_state = BW_S2andS3;
                end
                else if (above_S3)
                begin
                    next_state = AB_S3;
                end
                else
                begin
                    next_state = state;
                end
            end
        endcase
    end
    //判断dfr
    reg lower_flag = 0;
    always@(posedge clk)
    begin
        if(reset==1)
            lower_flag<=1;
        else if(state < next_state)
            lower_flag<=0; 
        else if(state > next_state)
            lower_flag<=1;    
    end
    assign dfr=lower_flag;
    always@(*)
    begin
        if(state == BL_S1)
        begin
            fr1=1;
            fr2=1;
            fr3=1;
        end
        else if(state == BW_S1andS2)
        begin
            fr1=1;
            fr2=1;
            fr3=0;
        end
        else if(state == BW_S2andS3)
        begin
            fr1=1;
            fr2=0;
            fr3=0;
        end
        else
        begin
            fr1=0;
            fr2=0;
            fr3=0;
        end
    end
endmodule

Lemmings1

游戏旅鼠涉及大脑相当简单的小动物。如此简单,以至于我们将使用有限状态机对其进行建模。

在莱明斯的2D世界中,旅鼠可以处于两种状态之一:向左行走或向右行走。如果它撞到障碍物,它会改变方向。特别是,如果旅鼠在左边撞到,它会向右走。如果它在右边撞到,它会向左走。如果它同时在两侧碰撞,它仍然会改变方向。

实现具有两个状态、两个输入和一个输出的 Moore 状态机,用于模拟此行为。

时序示意图

状态转移图

模块声明

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    output walk_left,
    output walk_right); 

答案:

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    output walk_left,
    output walk_right); 
    parameter LEFT=0, RIGHT=1;
    reg state, next_state;

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
        if(areset==1)begin
            state<=LEFT;
        end
        else begin
            state<=next_state;
        end
    end

    always @(*) begin
        // State transition logic
        case (state)
            LEFT:begin
                if (bump_left==1) begin
                    next_state = RIGHT;
                end else begin
                    next_state = LEFT;
                end
            end
            RIGHT:begin
                if (bump_right==1) begin
                    next_state = LEFT;
                end else begin
                    next_state = RIGHT;
                end
            end
        endcase
    end

    // Output logic
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);

endmodule

Lemmings2

除了左右行走之外,如果地面消失在它们下面,旅鼠还会摔倒(大概会“啊!”)。

除了左右行走并在碰撞时改变方向外,当地面=0时,旅鼠会摔倒并说“啊!当地面重新出现(地面=1)时,旅鼠将恢复以与坠落前相同的方向行走。跌倒时被撞不会影响行走方向,在与地面相同的周期内被撞到消失(但尚未下落),或者地面在仍然下落时再次出现时,也不会影响行走方向。

构建一个对此行为进行建模的有限状态机。

时序示意图

状态转移图示例如下:

状态转移图

模块声明

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    output walk_left,
    output walk_right,
    output aaah ); 

答案

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    output walk_left,
    output walk_right,
    output aaah ); 

    parameter LEFT=0, RIGHT=1, FALL_LEFT=2,FALL_RIGHT=3;
    reg [1:0] state;
    reg [1:0] next_state;

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
        if(areset==1)begin
            state<=LEFT;
        end
        else begin
            state<=next_state;
        end
    end

    always @(*) begin
        // State transition logic
        case (state)
            LEFT:begin
                if(ground==0)begin
                    next_state = FALL_LEFT;
                end
                else if (bump_left==1) begin
                    next_state = RIGHT;
                end 
                else begin
                    next_state = LEFT;
                end
            end
            RIGHT:begin
                if(ground==0)begin
                    next_state = FALL_RIGHT;
                end 
                else if (bump_right==1) begin
                    next_state = LEFT;
                end
                else begin
                    next_state = RIGHT;
                end
            end
            FALL_LEFT:begin
                if(ground==1)begin
                    next_state = LEFT;
                end
                else begin
                    next_state = FALL_LEFT;
                end
            end
            FALL_RIGHT:begin
                if(ground==1)begin
                    next_state = RIGHT;
                end
                else begin
                    next_state = FALL_RIGHT;
                end
            end
        endcase
    end

    // Output logic
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign aaah = (state == FALL_RIGHT)||(state == FALL_LEFT);
endmodule

Lemmings3

除了行走和跌倒之外,有时还可以告诉旅鼠做有用的事情,比如挖掘(当 dig=1 时开始挖掘)。如果旅鼠目前在地面上行走(地面=1并且没有掉落),则可以挖掘,并且将继续挖掘,直到到达另一侧(地面=0)。在这一点上,由于没有地面,它会掉下来(啊啊!),然后一旦它再次落地,就继续向原来的方向走。与跌倒一样,在挖掘时被撞到没有影响,并且在跌倒或没有地面时被告知要挖掘会被忽略。

换句话说,行走的旅鼠可以跌倒、挖掘或改变方向。如果满足这些条件中的多个,则下降的优先级高于挖掘,挖掘的优先级高于切换方向。

时序示意图如下:

时序示意图

根据题目给出示意状态转移图如下:

状态转移图

模块声明

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    input dig,
    output walk_left,
    output walk_right,
    output aaah,
    output digging );  

答案

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    input dig,
    output walk_left,
    output walk_right,
    output aaah,
    output digging );  


    parameter LEFT=0, RIGHT=1, FALL_LEFT=2,FALL_RIGHT=3,DIG_L=4,DIG_R=5;
    reg [2:0] state;
    reg [2:0] next_state;

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
        if(areset==1)begin
            state<=LEFT;
        end
        else begin
            state<=next_state;
        end
    end

    always @(*) begin
        // State transition logic
        case (state)
            LEFT:begin
                if(ground==0)begin
                    next_state = FALL_LEFT;
                end
                else if (dig==1) begin
                    next_state = DIG_L;
                end 
                else if (bump_left==1) begin
                    next_state = RIGHT;
                end 
                else begin
                    next_state = LEFT;
                end
            end
            RIGHT:begin
                if(ground==0)begin
                    next_state = FALL_RIGHT;
                end
                else if (dig==1) begin
                    next_state = DIG_R;
                end  
                else if (bump_right==1) begin
                    next_state = LEFT;
                end
                else begin
                    next_state = RIGHT;
                end
            end
            FALL_LEFT:begin
                if(ground==1)begin
                    next_state = LEFT;
                end
                else begin
                    next_state = FALL_LEFT;
                end
            end
            FALL_RIGHT:begin
                if(ground==1)begin
                    next_state = RIGHT;
                end
                else begin
                    next_state = FALL_RIGHT;
                end
            end
            DIG_L:begin
                if(ground==0)begin
                    next_state = FALL_LEFT;
                end
                else begin
                    next_state = DIG_L;
                end
            end
            DIG_R:begin
                if(ground==0)begin
                    next_state = FALL_RIGHT;
                end
                else begin
                    next_state = DIG_R;
                end
            end
            default:begin
                next_state = LEFT;
            end
        endcase
    end

    // Output logic
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign digging = (state == DIG_R)||(state == DIG_L);
    assign aaah = (state == FALL_RIGHT)||(state == FALL_LEFT);
endmodule

lemmings4

虽然旅鼠可以走路、跌倒和挖掘,但旅鼠并非无懈可击。如果旅鼠跌落时间过长然后着地,它可能会飞溅。特别是,如果旅鼠掉落超过 20 个时钟周期然后撞到地面,它将飞溅并停止行走、跌落或挖掘(所有 4 个输出都变为 0),永远(或直到 FSM 重置)。旅鼠在落地前可以下落多远没有上限。旅鼠只有在落地时才飞溅;它们不会在半空中飞溅。

扩展有限状态机以对此行为进行建模。跌落 20 个周期以内是可以生存的:

时序示意图

跌落 21 个周期会导致飞溅死亡:

时序示意图

根据题目描述的状态转移图如下图所示:

状态转移图

模块声明

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    input dig,
    output walk_left,
    output walk_right,
    output aaah,
    output digging );  

答案

module top_module(
    input clk,
    input areset,    // Freshly brainwashed Lemmings walk left.
    input bump_left,
    input bump_right,
    input ground,
    input dig,
    output walk_left,
    output walk_right,
    output aaah,
    output digging );  


    parameter LEFT=0, RIGHT=1, FALL_LEFT=2,FALL_RIGHT=3,DIG_L=4,DIG_R=5,SPLAT=6;
    reg [2:0] state;
    reg [2:0] next_state;

    always @(posedge clk, posedge areset) begin
        // State flip-flops with asynchronous reset
        if(areset==1)begin
            state<=LEFT;
        end
        else begin
            state<=next_state;
        end
    end

    always @(*) begin
        // State transition logic
        case (state)
            LEFT:begin
                if(ground==0)begin
                    next_state = FALL_LEFT;
                end
                else if (dig==1) begin
                    next_state = DIG_L;
                end 
                else if (bump_left==1) begin
                    next_state = RIGHT;
                end 
                else begin
                    next_state = LEFT;
                end
            end
            RIGHT:begin
                if(ground==0)begin
                    next_state = FALL_RIGHT;
                end
                else if (dig==1) begin
                    next_state = DIG_R;
                end  
                else if (bump_right==1) begin
                    next_state = LEFT;
                end
                else begin
                    next_state = RIGHT;
                end
            end
            FALL_LEFT:begin
                if(timeout==1&&ground==1)begin
                    next_state = SPLAT;
                end
                else if(ground==1)begin
                    next_state = LEFT;
                end
                else begin
                    next_state = FALL_LEFT;
                end
            end
            FALL_RIGHT:begin
                if(timeout==1&&ground==1)begin
                    next_state = SPLAT;
                end
                else if(ground==1)begin
                    next_state = RIGHT;
                end
                else begin
                    next_state = FALL_RIGHT;
                end
            end
            SPLAT:begin
                next_state = SPLAT;
            end
            DIG_L:begin
                if(ground==0)begin
                    next_state = FALL_LEFT;
                end
                else begin
                    next_state = DIG_L;
                end
            end
            DIG_R:begin
                if(ground==0)begin
                    next_state = FALL_RIGHT;
                end
                else begin
                    next_state = DIG_R;
                end
            end
            default:begin
                next_state = LEFT;
            end
        endcase
    end

    // Output logic
    assign walk_left = (state == LEFT);
    assign walk_right = (state == RIGHT);
    assign digging = (state == DIG_R)||(state == DIG_L);
    assign aaah = (state == FALL_RIGHT)||(state == FALL_LEFT);

    //aaah计数
    reg [4:0] aaah_cnt=0;
    always @(posedge clk) begin
        if(aaah==1)begin
            aaah_cnt<=aaah_cnt+1;
        end
        else begin
            aaah_cnt<=0;
        end
    end
    reg timeout=0;
    always @(*) begin
        if(areset==1)
            timeout=0;
        else if(aaah_cnt==20)
            timeout=1;
        else
            timeout=timeout;  
    end
endmodule

Fsm onehot

给定以下具有 1 个输入和 2 个输出的状态机:

状态转移图

假设此状态机使用独热编码,其中状态 [0] 到 state[9] 分别对应于状态 S0 到 S9。除非另有说明,否则输出为零。

实现状态机的状态转换逻辑和输出逻辑部分(但不是状态触发器)。给定状态 [9:0] 中的当前状态,并且必须生成 next_state[9:0] 和两个输出。通过检查(假设独热编码)推导出逻辑方程。(测试平台将使用非一个热输入进行测试,以确保您不会尝试做更复杂的事情)。

模块声明

module top_module(
    input in,
    input [9:0] state,
    output [9:0] next_state,
    output out1,
    output out2);

答案

module top_module(
    input in,
    input [9:0] state,
    output [9:0] next_state,
    output out1,
    output out2);

    parameter S0 = 'd0,S1 = 'd1,S2 = 'd2,S3 = 'd3,
              S4 = 'd4,S5 = 'd5,S6 = 'd6,S7 = 'd7,
              S8 = 'd8,S9 = 'd9;

    assign next_state[0] = ~in & (state[S0] | state[S1] | state[S2] | state[S3] | state[S4] | state[S7] | state[S8] | state[S9]);
    assign next_state[1] = in & (state[S0] | state[S8] | state[S9]);
    assign next_state[2] = in & state[S1];
    assign next_state[3] = in & state[S2];
    assign next_state[4] = in & state[S3];
    assign next_state[5] = in & state[S4];
    assign next_state[6] = in & state[S5];
    assign next_state[7] = in & (state[S6] | state[S7]);
    assign next_state[8] = ~in & state[S5];
    assign next_state[9] = ~in & state[S6];

    assign out1 = (state[S8])||(state[S9]);
    assign out2 = (state[S7])||(state[S9]);

endmodule

Fsm ps2

PS/2 鼠标协议发送长度为三个字节的消息。但是,在连续字节流中,消息的开始和结束位置并不明显。唯一的指示是每个三个字节消息的第一个字节始终具有 bit[3]=1(但其他两个字节的 bit[3] 可能是 1 或 0,具体取决于数据)。

我们想要一个有限状态机,当给定输入字节流时,它将搜索消息边界。我们将使用的算法是丢弃字节,直到我们看到 bit[3]=1 的字节。然后,我们假设这是消息的第 1 字节,并在收到所有 3 个字节(完成)后发出接收消息的信号。

FSM 应在成功接收每条消息的第三个字节后立即在循环中发出完成信号。

一些时序图来解释所需的行为,在无错误条件下,每三个字节形成一条消息:

无错误条件

发生错误时,搜索字节 1:

发生错误时,搜索字节 1

请注意,这与 1xx 序列识别器不同。此处不允许重叠序列:

模块声明

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output done); 

答案

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output done); //

    parameter BYTE1 = 'd0,BYTE2 = 'd1,BYTE3 = 'd2,DONE = 'd3;
    reg [1:0] state;
    reg [1:0] next_state;
    // State flip-flops (sequential)
    always @(posedge clk) begin
        if(reset==1)begin
            state<=BYTE1;
        end
        else begin
            state<=next_state;
        end
    end

    // State transition logic (combinational)
    always @(*) begin
        case (state)
            BYTE1:begin
                if(in[3]==0)begin
                    next_state = BYTE1;
                end 
                else begin
                    next_state = BYTE2;
                end
            end
            BYTE2:begin
                next_state = BYTE3;
            end
            BYTE3:begin
                next_state = DONE;
            end
            DONE:begin
                if(in[3]==0)begin
                    next_state = BYTE1;
                end 
                else begin
                    next_state = BYTE2;
                end
            end
            default:next_state = BYTE1;
        endcase
    end

    // Output logic
    assign done = (state == DONE);
endmodule

Fsm ps2data

现在您有一个状态机来识别 PS/2 字节流中的三字节消息,请添加一个数据路径,该数据路径也将在收到数据包时输出 24 位(3 字节)消息(out_bytes[23:16] 是第一个字节,out_bytes[15:8] 是第二个字节,依此类推)。

每当断言完成信号时,out_bytes都需要有效。你可以在其他时间输出任何东西(即,不在乎)。

时序示意图

模块声明

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output [23:0] out_bytes,
    output done); 

答案

module top_module(
    input clk,
    input [7:0] in,
    input reset,    // Synchronous reset
    output [23:0] out_bytes,
    output done); //

    parameter BYTE1 = 'd0,BYTE2 = 'd1,BYTE3 = 'd2,DONE = 'd3;
    reg [1:0] state;
    reg [1:0] next_state;
    // State flip-flops (sequential)
    always @(posedge clk) begin
        if(reset==1)begin
            state<=BYTE1;
        end
        else begin
            state<=next_state;
        end
    end

    // State transition logic (combinational)
    always @(*) begin
        case (state)
            BYTE1:begin
                if(in[3]==0)begin
                    next_state = BYTE1;
                end 
                else begin
                    next_state = BYTE2;
                end
            end
            BYTE2:begin
                next_state = BYTE3;
            end
            BYTE3:begin
                next_state = DONE;
            end
            DONE:begin
                if(in[3]==0)begin
                    next_state = BYTE1;
                end 
                else begin
                    next_state = BYTE2;
                end
            end
            default:next_state = BYTE1;
        endcase
    end
    reg [7:0] in_r0;
    reg [7:0] in_r1;
    reg [7:0] in_r2;
    always @(posedge clk ) begin
        in_r0<=in;
        in_r1<=in_r0;
        in_r2<=in_r1;
    end
    // Output logic
    assign done = (state == DONE);
  always @(*) begin
    if(done==1)
        out_bytes={in_r2,in_r1,in_r0};
  end
endmodule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技术分享】戴尔工作站安装Win10+Ubuntu20.04双系统避坑指南

文章目录引言1.安装前的几个注意事项&#xff08;避坑指南&#xff09;1.1.有多块硬盘&#xff0c;该如何分配给Win10和Ubuntu系统&#xff1f;1.2.Ubuntu分区应该怎么分&#xff1f;2.系统安装步骤2.1.下载系统镜像2.2.制作U盘启动盘2.3.进入Win10系统分配系统空间2.4.BIOS设置…

82.【LibraryManger】

图书管理系统(一)、搭建环境1.数据库语句2.导入需要的依赖(二)、配置文件3.创建MyBatis的xml文件 mybais-config.xml4.创建dao层接口以及dao层的 mapper.xml5.创建数据库的资源 database.properties6.创建spring的配置文件 spring-dao.xml【】7.创建service层的接口以及servcie…

查找

章节目录&#xff1a;一、线性查找1.1 概述1.2 代码示例二、二分查找2.1 概述2.2 代码示例三、插值查找3.1 概述3.2 代码示例四、斐波那契查找4.1 概述4.2 代码示例五、结束语一、线性查找 1.1 概述 线性查找又称顺序查找&#xff0c;是一种最简单的查找方法&#xff0c;它的…

若依框架:前端登录组件与图像验证码|用户登录逻辑

在上一篇《若依框架&#xff1a;前端项目结构与初始页面渲染流程》中&#xff0c;我们探讨了与“vue.config.js文件配置、.env模式和环境变量配置、vue-router全局导航守卫配置、vue-router路由配置简介”相关的内容&#xff0c;书接上回&#xff0c;我们继续探讨若依前端项目的…

【C语言进阶】字符函数与字符串函数

目录 1、函数介绍 1.1 strlen 1.2 strcpy 1.3 strcat 1.4 strcmp 1.5 strncpy 1.6 strncat 1.7 strncmp 1.8 strstr 1.9 strtok 1.10 strerror 【补】字符分类函数&#xff1a; 1.11 memcpy 1.12 memmove 1.13 memcmp 1.14 memset 1、函数介绍 1.1 strlen siz…

基于卷积神经网络的高光谱分类(1D、2D、3D-CNN)

算法原理 卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;是深度学习中最常见的一种 算法&#xff0c;它具有强大的特征学习能力。CNN 通过结合局部感知区域、共享权重、空间或者 时间上的降采样来充分利用数据本身包含的局部性等特征&…

绘图仪 与 示波器 Plotter Oscilloscope

【后台管理&#xff0c;这哪里是广告了&#xff1f;图都是百度搜的&#xff0c;又没有销售信息&#xff0c;就事论事而已&#xff01;】 Plotter &#xff1a; 对低频信号持续测量并绘制到一张很长的纸上&#xff0c;通常是卷纸。 常见的比如传统心电图机&#xff08;图左&am…

『分分钟玩转VueRouter●下』我对VueRouter在项目中如何使用的理解

路由的设置会根据系统中用户角色的数量而有所不同&#xff0c;大致分为三种单角色同权限、单角色不同权限、多角色。这里的角色均是只一种身份&#xff0c;而不是用户量。接下来的讲解纯属个人见解&#xff0c;大型项目会将不同权限的用户直接分开开发不同的系统。如果是小型多…

c++基础——for循环

for循环是循环的一种 以下是 for 循环的结构&#xff1a; for (初始化; 判断条件; 更新) {循环体; } 执行顺序&#xff1a; for 语句的三个部分中&#xff0c;任何一个部分都可以省略。其中&#xff0c;若省略了判断条件&#xff0c;相当于判断条件永远为真。 for (int i …

fpga实操训练(从模块到系统开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了fpga的一些基本操作&#xff0c;熟悉了这些操作&#xff0c;基本上说fpga已经入门了。但是距离我们用fpga开发产品&#xff0c;这中…

Faster RCNN网络源码解读(Ⅷ) --- RPN网络代码解析(下)RegionProposalNetwork类解析

目录 一、代码作用&#xff08;rpn_function.py&#xff09; 二、代码解析 2.1 RegionProposalNetwork类 2.1.1 正向传播过程forward 接着上篇博客的2.1.2节 2.1.2 assign_targets_to_anchors 2.1.3 det_utils.Matcher传入参数 2.1.4 compute_loss 2.1.5 smooth_l1_lo…

你真的会正确使用wait和notify么?

目录 wait和notify原理 API wait 与 sleep的区别 wait 和 notify的正确使用 step1 step2 step3 step4 step5 总结waitnotify wait和notify原理 当我们线程获取某个对象的monitor锁的时候就会成为owner线程,当owner线程条件不满足的时候,就会调用wait方法,该线程就会进…

惠州市政企信息化(互联网)市场调研报告

1.引言 1.1.编写目的 据广东省惠州市惠东县的政企信息化市场调研的客观性数据&#xff0c;分析相关数据&#xff0c;确定市场规模、市场潜力、市场需求&#xff0c;以及需求价值&#xff0c;为后续的市场决策、服务组合决策提供依据&#xff0c;也作为未来根据市场变化而调整…

Nacos 注册中心

Nacos 注册中心 目录概述需求&#xff1a;设计思路实现思路分析1.增加 Maven 依赖2.Client端配置注册中心3.Server端配置注册中心4.Nacos 注册中心参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c…

Java--Map接口详解

目录 Map接口的特点 代码实现 代码实现 Map的常用方法 代码实现 Map接口的4种遍历方法 代码实现 第一种方式 第二种方式 第三种方式 第四种方式 Map接口的特点 1)Map与Collection并列存在。用于保存具有映射关系的数据&#xff1a;Key-Value 2)Map中的key和value可以…

如何在星巴克连接家中Windows台式机?(安卓,iOS, Windows, macOS配合frp穿透公网IP实现)

zhaoolee 最近热衷于和海外热心老哥们交换硬盘中的单机游戏资源&#xff08;BT下载&#xff09;&#xff0c;家中有Windows台式机&#xff0c; 适合长时间挂机下载BT资源&#xff0c;zhaoolee希望能随时连接到Windows台式机新增下载任务&#xff0c;安装体积超大的主机游戏。 …

End-to-End Object Detection with Transformers论文阅读笔记

End-to-End Object Detection with Transformers 端到端&#xff0c;不需要NMS后处理了&#xff0c;直接出结果。 1、Abstract 将目标检测作为一个集合预测问题来解决。简化了检测的整体流程&#xff0c;有效的消除了许多人工设计的部分&#xff0c;比如NMS&#xff0c;anch…

数据库连接池(C++11实现)

目的&#xff1a; 因为对数据库的操作实质上是对磁盘的IO操作&#xff0c;所以如果对数据库访问次数过多&#xff0c;就会到导致大量的磁盘IO&#xff0c;为了提高MySQL数据库&#xff08;基于C/S设计&#xff09;的访问瓶颈&#xff0c;除了在服务器端增加缓存服务器缓存常用的…

还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】

目录&#x1f340;一、前言&#x1f331;二、多分类场景简介&#x1f343;三、前期准备阶段&#x1f7e5;3.1 运行环境准备&#x1f7e7;3.2 文心ERNIE系列模型介绍&#x1f7e8;3.3 预训练模型加载⬜3.4 加载项目代码&#x1f490;四、数据准备阶段&#x1f7e9;4.1 数据处理流…

变不可能为可能——记房产推销员佟鑫海

有勤奋&#xff0c;就会有所收获。傲人的成绩和背后的努力密切相关。俗话说得好&#xff0c;没卖不掉的房子&#xff0c;仅有卖不掉房子的艺人经纪人。关键是你是否有恒心。 在明升&#xff0c;总会有这样一群影子&#xff0c;他们每天精力旺盛&#xff0c;衣着光鲜&#xff0…