Xilinx FPGA:vivado利用单端RAM/串口传输数据实现自定义私有协议

news2024/10/6 4:01:30

一、项目要求

       实现自定义私有协议,如:pc端产生数据:02    56    38  ,“02”代表要发送数据的个数,“56”“38”需要写进RAM中。当按键信号到来时,将“56”“38”读出返回给PC端。

二、信号流向图

三、状态转换图

四、程序设计:

按键消抖模块:

`timescale 1ns / 1ps
module key_debounce(
   input              sys_clk ,
   input              rst_n   ,
   input              key     ,
   output             key_flag 
    );
    parameter        delay = 100;//_000_0 ; //10ms
    reg[25:0]         cnt               ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            cnt <= 0 ;
         else if ( key == 0 )begin
              if ( cnt == delay - 1 )
                   cnt <= cnt ;
              else
                   cnt <= cnt +1 ;
         end
         else
         cnt <= 0 ;
    
    assign  key_flag = ( cnt == delay - 2 )?1:0 ;







endmodule

接收端模块:

`timescale 1ns / 1ps
module uart_rx(
   input                    sys_clk   ,
   input                    rst_n     ,
   input                    rx_data   ,
   output    reg[7:0]       uart_data ,
   output    reg            rx_done  
    );
    parameter               SYSCLK = 50_000_000 ;
    parameter               Baud   = 115200     ; 
    parameter               COUNT  = SYSCLK/Baud;
    parameter               MID    = COUNT/2    ;
    
    ///start_flag
    reg             rx_reg1 ;
    reg             rx_reg2 ;
    wire            start_flag ;
    
    always@(posedge sys_clk )
         if(!rst_n)begin
            rx_reg1 <= 1 ;
            rx_reg2 <= 1 ;
         end
         else
             begin
                  rx_reg1 <= rx_data  ;
                  rx_reg2 <= rx_reg1  ;
             end
    assign  start_flag = ~rx_reg1 & rx_reg2 ;
    
    //rx_flag
    reg               rx_flag  ;
    reg[4:0]          cnt_bit  ;
    reg[9:0]          cnt      ;
    
    always@(posedge sys_clk )
         if(!rst_n)
            rx_flag <= 0 ;
         else if ( start_flag == 1 )
            rx_flag <= 1 ;
         else if ( cnt_bit == 10 && cnt == MID - 1 )
            rx_flag <= 0 ;
         else
            rx_flag <= rx_flag ;
    
    cnt
    always@(posedge sys_clk )
         if(!rst_n)
            cnt <= 0 ;
         else if ( rx_flag == 1 )begin
              if ( cnt == COUNT - 1 )
                   cnt <= 0 ;
              else
                   cnt <= cnt +1 ;
         end
         else
         cnt <= 0 ;
  
  cnt_bit
    always@(posedge sys_clk )
         if(!rst_n)
            cnt_bit <= 0 ;
         else if ( rx_flag == 1 )begin
              if ( cnt == COUNT - 1 )begin
                  if( cnt_bit == 10 )
                      cnt_bit <= 0 ;
                  else
                      cnt_bit <= cnt_bit +1 ;
              end
              else
              cnt_bit <= cnt_bit ;
         end
         else
         cnt_bit <= 0 ;
         
         
            
  
  ///data_reg                         
     reg[8:0]         data_reg  ;  //data_reg:01234567 [8]
     always@(posedge sys_clk )     //cnt_bit:[0]12345678[9][10]
          if(!rst_n)
             data_reg <= 0 ;
          else if ( rx_flag == 1 )begin
               if ( cnt_bit > 0 && cnt_bit < 10 && cnt == MID - 1)
                    data_reg[cnt_bit - 1 ] <= rx_data  ;
               else
                    data_reg <= data_reg  ;
          end
          else
          data_reg <= 0 ;
 
 check
   reg                  check   ;
   always@(posedge sys_clk )
        if(!rst_n)
           check <= 0 ;
        else if ( rx_flag == 1 )begin
             if ( cnt_bit == 10 )
                 check <= ^data_reg  ;
             else
                 check <= 0 ;
        end
        else
        check <= 0 ;
 
 uart_data
 parameter            MODE_CHECK = 0 ;
 
    always@(posedge sys_clk )
         if(!rst_n)
            uart_data <= 0 ;
         else if ( rx_flag == 1 )begin
              if ( cnt_bit == 10 && cnt == 10 && check == MODE_CHECK)
                   uart_data <= data_reg[7:0] ;
              else
                   uart_data <= uart_data  ;
         end
         else
         uart_data <= uart_data  ;
 
 rx_done

     always@(posedge sys_clk )
          if(!rst_n)
             rx_done <= 0 ;
          else if ( rx_flag == 1 )begin
               if ( cnt_bit == 10 && cnt == MID/2 - 1 )
                    rx_done <= 1 ;
               else
                    rx_done <= 0 ;
          end
          else
          rx_done <= 0 ;
        
 
 
//做测试用的 
// wire          tx_done     ;          
// wire          tx_data     ;         
// uart_tx uart_tx_u1(
//                       .    sys_clk   (sys_clk )    ,
//                       .    rst_n     (rst_n   )    ,
//                       .    ram_out   (uart_data )    , //uart_data(douta)
//                       .    tx_start  (rx_done)    , //rx_done
//                       .    tx_done   (tx_done )     ,
//                       .    tx_data   (tx_data )
//    );         
          

    
    
endmodule

发送端模块:

`timescale 1ns / 1ps
module uart_tx(
   input                 sys_clk   ,
   input                 rst_n     ,
   input     [7:0]       ram_out   , //uart_data(douta)
   input                 tx_start  , //rx_done
   output    reg         tx_done    ,
   output    reg         tx_data 
    );
    parameter             SYSCLK = 50_000_000  ;
    parameter             Baud   = 115200      ;
    parameter             COUNT  = SYSCLK/Baud ;
    parameter             MID    = COUNT/2     ;
    
    //start_flag
    reg               tx_reg1    ;
    reg               tx_reg2    ;
    wire              start_flag ;
    
    always@(posedge sys_clk )
         if(!rst_n)begin
            tx_reg1 <= 0 ;
            tx_reg2 <= 0 ;
         end
         else
             begin
                  tx_reg1 <= tx_start ;
                  tx_reg2 <= tx_reg1  ;
             end
     assign  start_flag = tx_reg1 & ~tx_reg2  ;
     
     ///tx_flag
     reg                   tx_flag  ;
     reg[9:0]              cnt      ;
     reg[4:0]              cnt_bit  ;
     
     always@(posedge sys_clk )
          if(!rst_n)     
             tx_flag <= 0 ;
          else if ( start_flag == 1 )
             tx_flag <= 1 ;
          else if ( cnt_bit == 10 && cnt == COUNT -1 )
//          else if ( cnt_bit == 10 && cnt == MID -1 )
             tx_flag <= 0 ;
          else
             tx_flag <= tx_flag ;
     
     cnt
     always@(posedge sys_clk )
          if(!rst_n)
             cnt <= 0 ;
          else if ( tx_flag == 1 )begin
               if ( cnt == COUNT - 1 )
                    cnt <= 0 ;
               else
                    cnt <= cnt +1 ;
          end
          else
          cnt <= 0 ;
  
  //cnt_bit
     always@(posedge sys_clk )
          if(!rst_n)
             cnt_bit <= 0 ;
          else if ( tx_flag == 1 )begin
               if ( cnt == COUNT - 1 )begin
                   if ( cnt_bit == 10 )
                        cnt_bit <= 0 ;
                   else
                        cnt_bit <= cnt_bit +1 ;
               end
               else
               cnt_bit <= cnt_bit  ;
          end
          else
          cnt_bit <= 0 ;
  
  ///tx_data
     parameter            MODE_CHECK = 0 ;
     always@( posedge sys_clk )
          if(!rst_n)
             tx_data <= 1 ;
          else if ( tx_flag == 1 )begin
               if ( cnt_bit > 0 && cnt_bit < 9 )
                    tx_data <= ram_out[cnt_bit -1]  ;
               else if ( cnt_bit == 0 )
                    tx_data <= 0 ;
               else if ( cnt_bit == 9 ) 
                    tx_data <= ( MODE_CHECK == 0 )? ^ram_out :~^ram_out ;
               else if ( cnt_bit == 10 )
                    tx_data <= 1 ;
               else
                    tx_data <= tx_data  ;
          end
          else
          tx_data <= 1 ;
 
   //tx_done 
     always@(posedge sys_clk )
          if(!rst_n)
             tx_done <= 0 ;
          else if ( tx_flag == 1 )begin
               if ( cnt_bit == 10 && cnt == COUNT - 1 )
//               if ( cnt_bit == 10 && cnt == MID/2 - 1 )
                     tx_done <= 1 ;
               else
                     tx_done <= 0 ;
          end
          else
          tx_done <= 0 ;
     

    
endmodule

RAM模块:

`timescale 1ns / 1ps
module private_ram_ctrl(
     input                 sys_clk     ,
     input                 rst_n       ,
     input                 key_flag    ,
     input    [7:0]        uart_data   ,
     input                 rx_done     ,
     input                 tx_done     ,
     output   reg[7:0]     ram_out     ,     
     output   reg          tx_start       
    );
    reg              wea       ;
    reg[3:0]         addra     ;
    reg[7:0]         dina      ;
    wire[7:0]        douta     ;
    
    //状态机
    localparam             IDLE    =  3'd0  ;
    localparam             WR_D    =  3'd1  ;
    localparam             WAIT    =  3'd2  ;
    localparam             TX_FIR  =  3'd3  ;
    localparam             TX_D    =  3'd4  ;
    
    reg[2:0]               cur_state     ;
    reg[2:0]               next_state    ;
    
    reg[7:0]               wr_len         ;
    reg[7:0]               wr_cnt         ;

    
    always@(posedge sys_clk )
         if(!rst_n)
            cur_state <= IDLE  ;
         else 
            cur_state <= next_state ;
            
    
    always@(*)
         case(cur_state)
             IDLE     : 
                       begin
                            if (rx_done)//指令数据的接收完成信号
                                next_state = WR_D ;
                            else
                                next_state = cur_state ;
                       end
             WR_D     :
                       begin
                            if( wr_len == wr_cnt )
                               next_state = WAIT  ;
                            else
                               next_state = cur_state ;
                       end
             WAIT     :
                       begin
                            if( key_flag )
                               next_state = TX_FIR  ;
                            else
                               next_state = cur_state ;
                       end
             TX_FIR   :
                       begin
                             next_state = TX_D  ;
                       end
             TX_D     :
                       begin
                            if ( wr_len == wr_cnt )
                                next_state = IDLE ;
                            else
                                next_state = cur_state  ;
                       end
         default:;
         endcase
      
      always@(posedge sys_clk )
           if(!rst_n)begin
              wr_len <= 0 ;
              wr_cnt <= 0 ;
              wea    <= 0 ;
              addra  <= 4'hf ;利用溢出功能   15
              dina   <= 0 ;
              tx_start <= 0 ;
              ram_out <= 0 ; ///ram_out <= douta
           end
           else
               case(cur_state)
                    IDLE  : 
                           begin
                                wr_len <= 0 ;   
                                wr_cnt <= 0 ;   
                                wea    <= 0 ;  
                                dina   <= 0 ; 
                                addra  <= 4'hf ;
                                tx_start <= 0 ;
                                if(rx_done)
                                   wr_len <= uart_data ;
                                else
                                   wr_len <= wr_len  ;
                           end  
                    WR_D  :
                           begin
                                 tx_start <= 0 ;
                                if ( rx_done )begin
                                    addra <= addra +1 ;
                                    wea <= 1 ;
                                    wr_cnt <= wr_cnt +1 ;
                                    dina <= uart_data ;
                                end
                                else
                                    wea <= 0 ;//其他的不用写会自动保持
                           end
                    WAIT  :
                           begin
                                tx_start <= 0 ;
                                addra <= 0 ;//保证发送数据的时候是从0开始发的
                                dina  <= 0 ;
                                wr_cnt <= 0 ;
                           end
                    TX_FIR:  //只待一个时钟周期
                           begin
                                tx_start <= 1 ;
                                addra <= addra + 1 ; //addra从0开始加
                                wr_cnt <= wr_cnt +1 ;
                                ram_out <= douta  ;
                           end
                    TX_D  :
                           begin
                                if(tx_done)begin
                                   tx_start <= 1 ;
                                   addra <= addra +1 ;
                                   wr_cnt <= wr_cnt +1; 
                                   ram_out <= douta  ;
                                end
                                else
                                   tx_start <= 0 ;
                           end
               default:;
               endcase
      
      
           
    
      single_ram your_instance_name (
  .clka(sys_clk),    // input wire clka
  .wea(wea),      // input wire [0 : 0] wea
  .addra(addra),  // input wire [3 : 0] addra
  .dina(dina),    // input wire [7 : 0] dina
  .douta(douta)  // output wire [7 : 0] douta
);
endmodule

顶层模块:

`timescale 1ns / 1ps
module TOP(
   input                sys_clk ,
   input                rst_n   ,
   input                key     ,
   input                rx_data ,
   output               tx_data 
    );
   ///key_debounce
   wire              key_flag  ;
   key_debounce  key_debounce_u1(
                            .   sys_clk   (sys_clk )    ,
                            .   rst_n     (rst_n   )    ,
                            .   key       (key     )    ,
                            .   key_flag  (key_flag)     
    );
   
   //private_ram_ctrl
   wire[7:0]           uart_data   ;
   wire                rx_done     ;
   wire                tx_done     ;
   wire[7:0]           ram_out     ;  
   wire                tx_start    ;
   private_ram_ctrl private_ram_ctrl_u1(
                             .    sys_clk   (sys_clk  )  ,
                             .    rst_n     (rst_n    )  ,
                             .    key_flag  (key_flag )  ,
                             .    uart_data (uart_data)  ,
                             .    rx_done   (rx_done  )  ,
                             .    tx_done   (tx_done  )  ,
                             
                             .    tx_start (tx_start)   ,
                             .    ram_out   (ram_out  )       

    );
  
  /uart_rx
  uart_rx uart_rx_u2(
                             .    sys_clk   (sys_clk  )  , 
                             .    rst_n     (rst_n    )  , 
                             .    rx_data   (rx_data  )  , 
                             
                             .    uart_data (uart_data)  , 
                             .    rx_done   (rx_done  )  
      ); 
  
  uart_tx

  uart_tx  uart_tx_u1(
                             .    sys_clk  (sys_clk ), //sys_clk  ,
                             .    rst_n    (rst_n   ), //rst_n    ,
                             .    ram_out  (ram_out ), //ram_out  , //uart_data(douta)
                             .    tx_start (tx_start), //tx_start , //rx_done
                             .    tx_done  (tx_done ), //tx_done   ,
                             .    tx_data  (tx_data ) //tx_data 
    );

    
endmodule

五、仿真结果

仿真uart_rx模块:

`timescale 1ns / 1ps
module test_uart_rx( );

   reg                    sys_clk   ;
   reg                    rst_n     ;
   reg                    rx_data   ;
   wire[7:0]              uart_data ;
   wire                   rx_done   ;
   
   parameter               SYSCLK = 50_000_000 ;
   parameter               Baud   = 115200     ;
   parameter               COUNT  = SYSCLK/Baud;
   parameter               MID    = COUNT/2    ;
   
   initial
          begin
               sys_clk = 0 ;
               rst_n   = 0 ;
               #10
               rst_n   = 1 ;
          end
   always  #1  sys_clk = ~sys_clk ;
   
   initial
          begin
               uart_out ( 8'hCC );
               uart_out ( 8'hC8 );
               uart_out ( 8'h18 );
               uart_out ( 8'h78 );
               uart_out ( 8'h66 );
               uart_out ( 8'h1E );
               uart_out ( 8'hCC );
               uart_out ( 8'h9F );
               uart_out ( 8'h66 );
               uart_out ( 8'h9F );
               uart_out ( 8'h33 );
               uart_out ( 8'h1E );
               uart_out ( 8'hCC );
               uart_out ( 8'h9F );
               uart_out ( 8'h18 );
               uart_out ( 8'h33 );
               uart_out ( 8'hCC );
          end
   
   
   
   //任务函数
   task            uart_out  ;
       input    [8:0]    DATA   ;
       begin
            rx_data = 1 ; ///空闲位初始
            #20
            rx_data = 0 ;
            #(COUNT*2)    rx_data = DATA[0]  ;
            #(COUNT*2)    rx_data = DATA[1]  ;
            #(COUNT*2)    rx_data = DATA[2]  ;
            #(COUNT*2)    rx_data = DATA[3]  ;
            #(COUNT*2)    rx_data = DATA[4]  ;
            #(COUNT*2)    rx_data = DATA[5]  ;
            #(COUNT*2)    rx_data = DATA[6]  ;
            #(COUNT*2)    rx_data = DATA[7]  ;
            #(COUNT*2)    rx_data = 0        ;
            #(COUNT*2)    rx_data = 1        ;
            #(COUNT*2)                       ;
       end
   endtask
   

uart_rx  uart_rx_u1(
                  .       sys_clk   (sys_clk  ) ,
                  .       rst_n     (rst_n    ) ,
                  .       rx_data   (rx_data  ) ,
                  .       uart_data (uart_data) ,
                  .       rx_done   (rx_done  )
    );
endmodule

仿真TOP模块:

`timescale 1ns / 1ps
module test_TOP( );

   reg                sys_clk    ;
   reg                rst_n      ;
   reg                key        ;
   reg                rx_data    ;
   wire               tx_data    ;
   
      
      parameter               SYSCLK = 50_000_000 ;
      parameter               Baud   = 115200     ;
      parameter               COUNT  = SYSCLK/Baud;
      parameter               MID    = COUNT/2    ;
      
      initial
             begin
                  sys_clk = 0 ;
                  rst_n   = 0 ;
                  key     = 1 ;
                  #10
                  rst_n   = 1 ;
                  #200000//ns   200us
                  key     = 0 ;
//                  #200000
//                  key     = 1 ;
//                  #200000
//                  key     = 0 ;
//                  #200000
//                  key     = 1 ;
                  
             end
      always  #1  sys_clk = ~sys_clk ;
      
      initial
             begin
//                  uart_out ( 8'hf  );//0f   0000_1111
//                  uart_out ( 8'h0f );
//                  uart_out ( 8'hff );
                  uart_out ( 8'h0f  );
                  uart_out ( 8'h33  );
//                  uart_out ( 8'hff );//1111_1111
                  uart_out ( 8'h18 );//0001_1000
                  uart_out ( 8'h78 );
                  uart_out ( 8'h66 );
                  uart_out ( 8'h1E );
                  uart_out ( 8'hCC );
                  uart_out ( 8'h9F );
                  uart_out ( 8'h66 );
                  uart_out ( 8'h9F );
                  uart_out ( 8'h33 );
                  uart_out ( 8'h1E );
                  uart_out ( 8'hCC );
                  uart_out ( 8'h9F );
                  uart_out ( 8'h18 );
                  uart_out ( 8'h33 );

             end
 
 
 
      //任务函数
      task            uart_out  ;
          input    [8:0]    DATA   ;
          begin
               rx_data = 1 ; ///空闲位初始
               #20
               rx_data = 0 ;
               #(COUNT*2)    rx_data = DATA[0]  ;
               #(COUNT*2)    rx_data = DATA[1]  ;
               #(COUNT*2)    rx_data = DATA[2]  ;
               #(COUNT*2)    rx_data = DATA[3]  ;
               #(COUNT*2)    rx_data = DATA[4]  ;
               #(COUNT*2)    rx_data = DATA[5]  ;
               #(COUNT*2)    rx_data = DATA[6]  ;
               #(COUNT*2)    rx_data = DATA[7]  ;
               #(COUNT*2)    rx_data = 0        ;
               #(COUNT*2)    rx_data = 1        ;
               #(COUNT*2)                       ;
          end
      endtask
 
 


TOP  TOP_u1(
               .   sys_clk (sys_clk)  ,
               .   rst_n   (rst_n  )  ,
               .   key     (key    )  ,
               .   rx_data (rx_data)  ,
               .   tx_data (tx_data)  
    );




endmodule

这里记录一些小小的问题:

(1)

仿真的复位信号一定不要和数据的关键信号(使能/开始)重复。

这个是正常没重复的:

这个是由于复位拉高的时间过长造成重复了的:

(2)

因此我们可以做出如下的修改:

现在就正常了

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

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

相关文章

MessageBox的作用与用法

在C# &#xff08; Windows Forms &#xff09;中&#xff0c;MessageBox 的所有常用用法如下&#xff1a; 1. 显示一个简单的消息框 MessageBox.Show("这是一个简单的消息框。");2. 显示带标题的消息框 MessageBox.Show("这是一个带标题的消息框。", &…

美国服务器租用详细介绍与租用流程

在数字化时代&#xff0c;服务器租用已成为许多企业和个人拓展业务、存储数据的重要选择。美国作为全球科技发展的前沿阵地&#xff0c;其服务器租用服务也备受瞩目。下面&#xff0c;我们将详细介绍美国服务器租用的相关知识及租用流程。 一、美国服务器租用简介 美国服务器租…

PDI-kettle工具连接本地虚拟机Ubuntu上的数据库

PDI 配置ubuntu数据库配置Kettle工具 PDI版本&#xff1a;9.4 Ubuntu2204&#xff1a;10.11.8-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04 配置ubuntu数据库 安装 apt install -y mariadb-server配置监听地址 cat > /etc/mysql/mariadb.conf.d/99-kettle.cnf << EOF …

结构体------“成绩排序”---冒泡----与“输出最高成绩”区别

从大到小或者从小到大排序----冒泡排序---双重循环i,j 比较的时候用的是 排序的时候用的是整体 stu [ j1 ] 和 stu [ j ] 我写错为下面这个&#xff0c;交换的只是学生的出生日期&#xff0c;没有交换整体 #include<stdio.h> #include<string.h>struct student{ch…

MySQL 8.0新特性INTERSECT和EXCEPT用于集合运算

MySQL8.0.31 新版本的推出&#xff0c;MySQL增加了对SQL标准INTERSECT和EXCEPT运算符的支持。 1、INTERSECT INTERSECT输出多个SELECT语句查询结果中的共有行。INTERSECT运算符是ANSI/ISO SQL标准的一部分(ISO/IEC 9075-2:2016(E))。 我们运行两个查询&#xff0c;第一个会列…

仰邦BX.K协议对接

背景 使用BX 6K控制卡控制诱导屏显示剩余车位数&#xff0c;由于控制卡和服务端不在一个局域网内&#xff0c;所以不能使用官网提供的案例&#xff0c;官网提供的案例为控制卡为TCP Server&#xff0c;服务端为TCP Client&#xff0c;因此需要开发此程序&#xff0c;服务端左右…

docker mysql cpu100% cpu打满排查 mysql cpu爆了 mysql cpu 100%问题排查

1. docker 启动了一个mysql 实例&#xff0c;近期忽然发现cpu100% 如下图所示 命令&#xff1a; top 2.进入容器内排查&#xff1a; docker exec mysql&#xff08;此处可以是docker ps -a 查找出来的image_id&#xff09; -it /bin/bash cd /var/log cat mysqld.log 容器内m…

Android LayoutInflater 深度解析

在 Android 开发中&#xff0c;LayoutInflater 是一个非常重要的工具。它允许我们从 XML 布局文件中动态地创建 View 对象&#xff0c;从而使得 UI 的创建和管理更加灵活。本文将深入解析 android.view.LayoutInflater&#xff0c;包括它的基本用法、常见问题以及高级用法。 什…

Java高级重点知识点-19-Lambda

文章目录 Lambda表达式函数式编程思想Lambda表达式写法代码讲解 Lambda表达式 函数式编程思想 强调做什么&#xff0c;而不是以什么形式做。 以函数式接口Runnable为例讲解&#xff1a; public class LambdaDemo {public static void main(String[] args) {Runnable runnab…

学习无人机飞行技术,有哪些就业方向?

随着无人机技术的不断进步和应用领域的拓展&#xff0c;研发创新人才的需求也将不断增加&#xff0c;那就业前景还是很广阔的。学习无人机飞行技术后&#xff0c;有以下多个就业方向可供选择&#xff1a; 1. 无人机操作员&#xff1a; - 负责操控和监控无人机飞行&#xff0c;…

第57期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

“探索价值增长消费:让每一笔购物都成为增值之旅“

亲爱的顾客们&#xff0c;你们好&#xff01;今天&#xff0c;我将带你们探索一种革命性的消费哲学——价值增长消费&#xff0c;让每一次购物都成为一次增值之旅&#xff01; 在传统消费观念里&#xff0c;我们付出金钱换取商品或服务&#xff0c;随后这些便成为过去。但如今…

38. 扫描系统设计

导论: 扫描系统根据反射旋转类型分为平面振镜扫描和转股扫描&#xff0c;根据光路途径分为一维、二维和三维扫描&#xff0c;根据振镜和扫描镜头的位置又可分为镜前扫描和镜后扫描。 设计流程&#xff1a; zemax设计与优化&#xff1a; 系统建模 在孔径类型中选择入瞳直径…

fastapi swagger js css 国内访问慢问题解决

fastapi swagger js css 国内访问慢问题解决 直接修改fastapi包中静态资源地址为如下地址 swagger_js_url: str "https://cdn.bootcdn.net/ajax/libs/swagger-ui/3.9.3/swagger-ui-bundle.js", swagger_css_url: str "https://cdn.bootcdn.net/ajax/libs/sw…

发电机保护屏的作用及其重要性

发电机保护屏的作用及其重要性 发电机保护屏是电力系统中的重要组成部分&#xff0c;它负责监测和控制发电机的运行状态&#xff0c;确保发电机在正常运行和故障情况下都能得到及时、准确的保护。负责监测和控制发电机运行状态&#xff0c;确保及时准确的保护。它由显示屏、控制…

python学习-list

List(列表的定义语法) [元素1, 元素2, 元素3, ......] 什么是元素&#xff1f; 数据容器内的每一份数据&#xff0c;都称之为元素 元素的类型有限制吗&#xff1f; 元素的数据类型没有任何限制&#xff0c;甚至元素也可以是列表&#xff0c;这样就定义了嵌套列表 但是打印…

RT-Thread Studio与CubeMX联合编程之rtthread stm32h743的使用(十一)spi设备SFUD驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验&#xff0c;核心板如图&#xff1a; 1.建立新工程&#xff0c;选择相应的芯片型号及debug引脚及调试器 2.编译下载&#xff0c;可以看到串口打印正常 3.…

数据结构_1.0

一、数据结构概述 1.1 概念 在计算机科学中&#xff0c;数据结构是一种数据组织、管理和存储的格式 。它是相互之间存在一种或多种特定关系的数据元素的集合。通常情况下&#xff0c;精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技…

【】AI八股-神经网络相关

Epoch Epoch 是指完成一次完整的数据集训练的过程。比如&#xff0c;有一个数据集有1000个样本&#xff0c;当网络用这些样本训练一次后&#xff0c;这就是一个epoch。 Iteration Iteration 是指在一个epoch中&#xff0c;使用一个batch进行训练的次数。如果你的数据集有100…