【【迭代16次的CORDIC算法-verilog实现】】

迭代16次的CORDIC算法-verilog实现 -32位迭代16次verilog代码实现

CORDIC.v

module cordic32#(
    parameter         DATA_WIDTH    =      8'd32  ,     // we set data width
    parameter         PIPELINE      =      5'd16        // Optimize waveform
  )(
    input                              clk       ,
    input                              rst_n     ,
    input    signed    [DATA_WIDTH - 1 : 0]   phase     ,
    input                              ena       ,
    output  reg signed [DATA_WIDTH - 1  : 0]   sin_out   ,
    output  reg signed [DATA_WIDTH - 1  : 0]   cos_out
  );


  // -----------------------------------------------  \\
  //    next is define and parameter                  \\
  // ------------------------------------------------- \\


  reg    signed     [DATA_WIDTH - 1 : 0]     phase_reg    ;
  reg    signed     [DATA_WIDTH - 1 : 0]     phase_reg1    ;
  reg    signed     [DATA_WIDTH - 1 : 0]     X0           ;
  reg    signed     [DATA_WIDTH - 1 : 0]     Y0           ;
  reg    signed     [DATA_WIDTH - 1 : 0]     Z0           ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X1 , Y1 , Z1 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X2 , Y2 , Z2 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X3 , Y3 , Z3 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X4 , Y4 , Z4 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X5 , Y5 , Z5 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X6 , Y6 , Z6 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X7 , Y7 , Z7 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X8 , Y8 , Z8 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X9 , Y9 , Z9 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X10 , Y10 , Z10 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X11 , Y11 , Z11 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X12 , Y12 , Z12 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X13 , Y13 , Z13 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X14 , Y14 , Z14 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X15 , Y15 , Z15 ;
  wire   signed     [DATA_WIDTH - 1 : 0]     X16 , Y16 , Z16 ;
  reg    signed     [DATA_WIDTH - 1 : 0]     XN15 , YN15     ;





    reg [1:0] quadrant[PIPELINE : 0] ;
    integer i ;











  // We will convert all new angles to the first quadrant
  //
  always@(posedge clk or negedge rst_n)
  begin
    if( rst_n == 0 )
    begin
      phase_reg <= 0 ;
      phase_reg1 <= 0 ;
    end
    else if( ena == 1)
    begin
      phase_reg1 <= phase ;
      case(phase[DATA_WIDTH - 1 : DATA_WIDTH - 2])
        2'b00 :
          phase_reg <= phase                 ;
        2'b01 :
          phase_reg <= phase - 32'h40000000  ;   // -90
        2'b10 :
          phase_reg <= phase - 32'h80000000  ;   // -180
        2'b11 :
          phase_reg <= phase - 32'hC0000000  ;   // -270
        default :
        phase_reg <= 32'h00   ; 
          
      endcase
    end
  end



  // We begin the initialization operation
  // we set 0.607253*???2^31-1???,32'h4DBA775F
  always@(posedge clk or negedge rst_n)
  begin
    if(rst_n == 0 )
    begin
      X0 <= 0 ;
      Y0 <= 0 ;
      Z0 <= 0 ;
    end
    else if(ena == 1)
    begin
      X0 <= 32'h4DBA775F ;
      Y0 <= 0            ;
      Z0 <= phase_reg    ;
    end
  end



// for instantiation - 16
INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd0 ),
    .ANGLE      ( 32'h20000000 )
)u_INTERATION0(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X0         ),
    .Y0         ( Y0         ),
    .Z0         ( Z0         ),
    .X1         ( X1         ),
    .Y1         ( Y1         ),
    .Z1         ( Z1         )
);



INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd1 ),
    .ANGLE      ( 32'h12E4051D )
)u_INTERATION1(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X1         ),
    .Y0         ( Y1         ),
    .Z0         ( Z1         ),
    .X1         ( X2         ),
    .Y1         ( Y2         ),
    .Z1         ( Z2         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd2 ),
    .ANGLE      ( 32'h09FB385B )
)u_INTERATION2(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X2         ),
    .Y0         ( Y2         ),
    .Z0         ( Z2         ),
    .X1         ( X3         ),
    .Y1         ( Y3         ),
    .Z1         ( Z3         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd3 ),
    .ANGLE      ( 32'h051111D4 )
)u_INTERATION3(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X3         ),
    .Y0         ( Y3         ),
    .Z0         ( Z3         ),
    .X1         ( X4         ),
    .Y1         ( Y4         ),
    .Z1         ( Z4         )
);


INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd4 ),
    .ANGLE      ( 32'h028B0D43 )
)u_INTERATION4(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X4         ),
    .Y0         ( Y4         ),
    .Z0         ( Z4         ),
    .X1         ( X5         ),
    .Y1         ( Y5         ),
    .Z1         ( Z5         )
);


INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd5 ),
    .ANGLE      ( 32'h0145D7E1 )
)u_INTERATION5(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X5         ),
    .Y0         ( Y5         ),
    .Z0         ( Z5         ),
    .X1         ( X6         ),
    .Y1         ( Y6         ),
    .Z1         ( Z6         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd6 ),
    .ANGLE      ( 32'h00A2F61E )
)u_INTERATION6(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X6         ),
    .Y0         ( Y6         ),
    .Z0         ( Z6         ),
    .X1         ( X7         ),
    .Y1         ( Y7         ),
    .Z1         ( Z7         )
);



INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd7 ),
    .ANGLE      ( 32'h00517C55 )
)u_INTERATION7(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X7         ),
    .Y0         ( Y7         ),
    .Z0         ( Z7         ),
    .X1         ( X8         ),
    .Y1         ( Y8         ),
    .Z1         ( Z8         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd8 ),
    .ANGLE      ( 32'h0028BE53 )
)u_INTERATION8(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X8         ),
    .Y0         ( Y8         ),
    .Z0         ( Z8         ),
    .X1         ( X9         ),
    .Y1         ( Y9         ),
    .Z1         ( Z9         )
);


INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd9 ),
    .ANGLE      ( 32'h00145F2F )
)u_INTERATION9(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X9         ),
    .Y0         ( Y9         ),
    .Z0         ( Z9         ),
    .X1         ( X10         ),
    .Y1         ( Y10         ),
    .Z1         ( Z10         )
);


INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd10 ),
    .ANGLE      ( 32'h000A2F98 )
)u_INTERATION10(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X10         ),
    .Y0         ( Y10         ),
    .Z0         ( Z10         ),
    .X1         ( X11         ),
    .Y1         ( Y11         ),
    .Z1         ( Z11         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd11 ),
    .ANGLE      ( 32'h000517CC )
)u_INTERATION11(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X11         ),
    .Y0         ( Y11         ),
    .Z0         ( Z11         ),
    .X1         ( X12         ),
    .Y1         ( Y12         ),
    .Z1         ( Z12         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd12 ),
    .ANGLE      ( 32'h00028BE6 )
)u_INTERATION12(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X12         ),
    .Y0         ( Y12         ),
    .Z0         ( Z12         ),
    .X1         ( X13         ),
    .Y1         ( Y13         ),
    .Z1         ( Z13         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd13 ),
    .ANGLE      ( 32'h000145F3 )
)u_INTERATION13(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X13         ),
    .Y0         ( Y13         ),
    .Z0         ( Z13         ),
    .X1         ( X14         ),
    .Y1         ( Y14         ),
    .Z1         ( Z14         )
);

INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd14 ),
    .ANGLE      ( 32'h0000A2FA )
)u_INTERATION14(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X14         ),
    .Y0         ( Y14         ),
    .Z0         ( Z14         ),
    .X1         ( X15         ),
    .Y1         ( Y15         ),
    .Z1         ( Z15         )
);


INTERATION#(
    .DATA_WIDTH ( 8'd32 ),
    .shift      ( 5'd15 ),
    .ANGLE      ( 32'h0000517D )
)u_INTERATION15(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .ena        ( ena        ),
    .X0         ( X15         ),
    .Y0         ( Y15         ),
    .Z0         ( Z15         ),
    .X1         ( X16         ),
    .Y1         ( Y16         ),
    .Z1         ( Z16         )
);



// iteration over 


always@(posedge clk or negedge rst_n)
begin
  if(rst_n == 0)
    for(i = 0 ; i < PIPELINE ; i=i+1)
      quadrant[i] <= 0 ;
  else
    if(ena == 1)
    begin
      for(i = 0 ; i < PIPELINE ; i=i+1)
        quadrant[i+1] <= quadrant[i] ;
      quadrant[0] <= phase_reg1[DATA_WIDTH - 1 : DATA_WIDTH - 2] ;
    end
end
 //------------------------------------------  \\
 //------------------------------------------  \\
//  Prevent overflow caused by small decimals and negative complement
//
	
always @(posedge clk or negedge rst_n)
     if(rst_n == 0)
		XN15<=0;
	else if(X15[31:30] == 2'b11)//小于0
		XN15<=~X15 + 1'b1;
	else if(X15[31:30] == 2'b10)//大于1
		XN15<=32'h80000000 - X15 + 32'h80000000;
	else 
		XN15 <= X15;
		
always @(posedge clk or negedge rst_n )
     if(rst_n == 0)
		YN15 <=0;
	else if(Y15[31:30] == 2'b11)//小于0 
		YN15 <=~Y15 + 1'b1;
	else if(Y15[31:30] == 2'b10)//大于1
		YN15 <=32'h80000000 -Y15 + 32'h80000000;
	else 
		YN15 <=Y15;

// 
//   The results of different phases are also different
  //   phase[DATA_WIDTH -1 : DATA_WIDTH -2]
  //  00 first  quadrant
  //  01 second quadrant
  //  10 third  quadrant
  //  11 Fourth Quadrant



always@(posedge clk or negedge rst_n)
begin
  if(rst_n == 0)
  begin
    cos_out <= 0 ;
    sin_out <= 0 ;
  end
  else if( ena == 1)
  begin
    case(quadrant[16]) 
      2'b00 :
      begin
        cos_out <= XN15 ;
        sin_out <= YN15 ;
      end
      2'b01 :
      begin
        cos_out <= ~YN15 + 1'b1;
        sin_out <= XN15        ;
      end
      2'b10 :
      begin
        cos_out <= ~XN15 + 1'b1  ;
        sin_out <= ~YN15 + 1'b1 ;
      end
      2'b11 :
      begin
        cos_out <= YN15        ;
        sin_out <= ~XN15 + 1'b1 ;
      end
    
    endcase
  end
end
endmodule

ITERATION.v

module INTERATION #(
    parameter   DATA_WIDTH       =    8'd32       ,
    parameter   shift            =    5'd0        ,
    parameter   ANGLE            =    32'h20000000
  )(
    input                                  clk     ,
    input                                  rst_n   ,
    input                                  ena     ,
    input       signed  [DATA_WIDTH - 1 : 0]      X0      ,
    input       signed  [DATA_WIDTH - 1 : 0]      Y0      ,
    input       signed  [DATA_WIDTH - 1 : 0]      Z0      ,
    output  reg signed  [DATA_WIDTH - 1 : 0]      X1      ,
    output  reg signed  [DATA_WIDTH - 1 : 0]      Y1      ,
    output  reg signed  [DATA_WIDTH - 1 : 0]      Z1
  );

  always@(posedge clk or negedge rst_n)
  begin
    if( rst_n == 0)
    begin
      X1 <= 0 ;
      Y1 <= 0 ;
      Z1 <= 0 ;
    end
    else if( ena == 1)
    begin
      if(Z0[DATA_WIDTH - 1] == 0 )
      begin
       // X1 <= X0 - {{shift{ Y0[DATA_WIDTH - 1] }} ,Y0[DATA_WIDTH - 1 : shift] } ;
       // Y1 <= Y0 + {{shift{ X0[DATA_WIDTH - 1] }} ,X0[DATA_WIDTH - 1 : shift] } ;
        X1 <= X0 - (Y0>>>shift);
        Y1 <= Y0 + (X0>>>shift);
        Z1 <= Z0 - ANGLE                                                    ;
      end
      else if(Z0[DATA_WIDTH - 1] == 1 )
      begin
        //X1 <= X0 + {{shift{ Y0[DATA_WIDTH - 1 ] }} ,Y0[DATA_WIDTH - 1 : shift] } ;
       // Y1 <= Y0 - {{shift{ X0[DATA_WIDTH - 1 ] }} ,X0[DATA_WIDTH - 1 : shift] } ;
        X1 <= X0 + (Y0>>>shift) ;
        Y1 <= Y0 - {X0>>>shift} ;
        Z1 <= Z0 + ANGLE                                                    ;
      end
    end
  end

endmodule

CORDIC_tb.v

module cordic_tb #(
    parameter         DATA_WIDTH    =      8'd32  ,     // we set data width
    parameter         PIPELINE      =      5'd16        // Optimize waveform    
);
reg                                 clk       ;
reg                                 rst_n     ;
reg          [DATA_WIDTH - 1 : 0]   phase     ;
reg                                 ena       ;
wire         [DATA_WIDTH - 1  : 0]   sin_out   ;
wire         [DATA_WIDTH - 1 : 0]   cos_out   ;



integer i;
cordic32#(
    .DATA_WIDTH ( DATA_WIDTH ),
    .PIPELINE   ( PIPELINE )
)u_cordic32(
    .clk        ( clk        ),
    .rst_n      ( rst_n      ),
    .phase      ( phase      ),
    .ena        ( ena        ),
    .sin_out    ( sin_out    ),
    .cos_out    ( cos_out    )
);


initial
begin
     #0 clk = 1'b0;
    ena   = 1'b1 ;
   
    #10 rst_n = 1'b0;
    #10 rst_n = 1'b1;
    
    #20000000 $stop;
end 

initial
begin
	repeat(10)
	begin
		#0 phase = 32'd0;
		for(i=0;i<131072;i=i+1)
			begin
				#10;
				phase <= phase + 32'h8000;
			end
	end
end
always #10
begin
    clk = ~clk;
end


endmodule 

README.md

在完成CORDIC的7次迭代之后 我在思考一个问题 8位进行了7次迭代 最后迭代至0号称没有误差了
我们是否可以通过 扩展至32位 进行多次迭代  将误差不断的缩小 


本次数据参考至 网上的其他教程 我并没有自己去计算 我把结构优化一下 修改成更加便于理解使用的形式

还有一件事 是 进制 与 Π 转化的问题 
对于 8位 其实我们 一开始将Π 设定为 1000_0000
那么对于 Π/4 是否就是1000_0000 的 四分之一 对于二进制 其实就是整体的数字进行移位 
我们将1000_0000 移动至 0010_0000 于此 

而对于 32位我们32'h8000000 就是一个Π
而 32’h2000_0000 就是四分之Π 


还有一件事 说明 我在写例化的时候 将数据完全完整的例化了下来 写的很长 这样并不是很好 
后面学习中 我看别人是 这么处理的 
genvar die;
generate
    for (die = 0; die <Pipeline; die=die+1)
    begin: dieLoop
        always @(posedge CLK_SYS or negedge RST_N)
            if (!RST_N) begin
                xn[die+1] <= 32'h0;
				yn[die+1] <= 32'h0;
				zn[die+1] <= 32'h0;
            end
        	else begin             
				if(zn[die][31]==1'b0)//角度符号判断
					begin
				     xn[die+1] <= xn[die] - (yn[die]>>>die);
				     yn[die+1] <= yn[die] + (xn[die]>>>die);
				     zn[die+1] <= zn[die] - rot[die];  
				    end
				else begin
				      xn[die+1] <= xn[die] + (yn[die]>>>die);
				      yn[die+1] <= yn[die] - (xn[die]>>>die);
				      zn[die+1] <= zn[die] + rot[die];  
				      end
            end
    end
endgenerate


# 还有一件事 对于溢出的考量 
我们所作溢出的考量 其实我们设定了32'h8000_0000 这既是Π的值 也是 1的设定 
但是在实际的运用和计算中 我们其实永远也达不到1 嘿嘿 
因为我们把最高位设计成了 符号位 
那么最大 也就是1 我们约等于 32'h7fff_ffff
这里需要注意的是[31:28] 是 7 也就是0111 非常重要的一个结论 我们最高位0代表了符号位
那么对于设计到第一象限的[31:30] 的值可以取 00 01 但是 10 11我们要对其进行合适的转化
所以便有了我们  对溢出的操作 


always @(posedge clk or negedge rst_n)
     if(rst_n == 0)
		XN15<=0;
	else if(X15[31:30] == 2'b11)//小于0
		XN15<=~X15 + 1'b1;
	else if(X15[31:30] == 2'b10)//大于1
		XN15<=32'h80000000 - X15 + 32'h80000000;
	else 
		XN15 <= X15;
		
always @(posedge clk or negedge rst_n )
     if(rst_n == 0)
		YN15 <=0;
	else if(Y15[31:30] == 2'b11)//小于0 
		YN15 <=~Y15 + 1'b1;
	else if(Y15[31:30] == 2'b10)//大于1
		YN15 <=32'h80000000 -Y15 + 32'h80000000;
	else 
		YN15 <=Y15;



注意在设计的时候 定义成reg signed 的形式 将其设计为有符号位 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv入门到精通——改变颜色空间

目录 目标 改变颜色空间 对象追踪 如何找到要追踪的HSV值&#xff1f; 目标 在本教程中&#xff0c;你将学习如何将图像从一个色彩空间转换到另一个&#xff0c;像BGR↔灰色&#xff0c;BGR↔HSV等 除此之外&#xff0c;我们还将创建一个应用程序&#xff0c;以提取视频中的…

Mapmost Alpha上新啦!新增移动端的丝滑且强大功能!

本文目录 一、Mapmost Alpha 介绍1.1 Maopmost 数字孪生平台1.2 Mapmost 产品能力1.3 Mapmost Alpha 产品优势 二、移动端功能介绍三、Mapmost Alpha 总结 一、Mapmost Alpha 介绍 Hello&#xff0c;各位铁铁&#xff0c;今天给大家推荐一款好用的三维城市场景创建工具。 这款…

k8s部署elastic+kibana

1.软件版本说明 1.1软件版本说明 软件版本kubernetes1.23.17elasticsearch7.17.3kibana7.17.3 1.2硬件环境说明 宿主机使用windows10安装vmware17.5.0&#xff0c;虚拟机安装linux系统&#xff08;centos7.9&#xff09; 说明&#xff1a; elasticserch和kibana的版本尽量…

NTFS权限与文件系统:深入解析与实践指南

在当今的信息时代&#xff0c;数据安全和管理成为了每个组织和个人的重要议题。NTFS权限作为Windows操作系统中的一个核心功能&#xff0c;为文件和文件夹的安全管理提供了强大的支持。本文将深入解析NTFS权限的基本概念&#xff0c;并通过实际操作指导如何有效地利用这些权限来…

MySQL的hash索引

MySQL有BTree 索引及Hash索引等索引类型&#xff0c;BTree索引类型是MySQL采用最多的索引类型。Hash索引使用场景比较有限&#xff0c;文章将从Hash索引的底层结构出发&#xff0c;来分析Hash索引的利与弊。 1 hash数据结构 hash数据结构由键、哈希函数及哈希表组成。 键&am…

【3D生成与重建】SSDNeRF:单阶段Diffusion NeRF的三维生成和重建

系列文章目录 题目&#xff1a;Single-Stage Diffusion NeRF: A Unified Approach to 3D Generation and Reconstruction 论文&#xff1a;https://arxiv.org/pdf/2304.06714.pdf 任务&#xff1a;无条件3D生成&#xff08;如从噪音中&#xff0c;生成不同的车等&#xff09;、…

提前预测刚体移动轨迹 预测运动轨迹

提前预测刚体移动轨迹 预测运动轨迹 一、效果二、介绍三、脚本RigidbodyExtension.cs 计算工具类DrawLine.cs 画线工具类 四、资源分享 一、效果 二、介绍 通过计算Unity物理系统的运动方位来判断下一步移动的位置&#xff0c;主要用于物体运动的提前预测&#xff0c;通常使用…

比 Eslint 快 100 倍!新一代 JS Linter 发布!

比 Eslint 快 100 倍&#xff01;新一代 JS Linter 发布&#xff01; Oxc 是用 Rust 编写的 JavaScript 语言的高性能工具集合。他们的目标是构建 JavaScript 的基本编译器工具&#xff1a;解析器、linter、格式化程序、转译器、压缩器和解析器等等&#xff0c;这次他们发布了一…

3.18 Linux 防火墙

1、iptables 概述 a. 概念介绍 自Centos7.X开始,系统自带的防火墙是filewalld,但是也同样支持iptables, 我们仍然可以用iptables来作为防火墙。 netfilter/iptables&#xff1a;IP信息包过滤系统&#xff0c;它实际上由两个组件netfilter 和 iptables 组成。 netfilter 组件…

Nginx 安装(源码编译安装)

Nginx服务器提供了Windows和Linux版本&#xff0c;本文为Linux环境下Nginx服务器的详细安装步骤。 安装环境&#xff1a; Linux服务器操作系统&#xff1a;CentOs 8.1.1911 Nginx版本&#xff1a;1.21.4&#xff08;Linux&#xff09; 安装步骤&#xff1a; 1、安装GCC、aut…

过度加大SSD内部并发何尝不是一种伤害-part1

之前存储随笔有发布过一篇关于如何通过IO并发度提升性能相关的文章&#xff1a; 扩展阅读&#xff1a;SSD基础架构与NAND IO并发问题探讨 SSD整体优化策略就是要低延迟&#xff0c;高带宽&#xff0c;增加NAND的并发度。 本文&#xff0c;我们从另外一个角度来做一些讨论。现…

MySQL代码笔记

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;表的增删查改创建表格&…

TLC2543(12位A/D转换器)实现将输入的模拟电压显示到数码管上

代码&#xff1a; #include <reg51.h> #define uchar unsigned char #define uint unsigned int// 数码管0-9 unsigned char seg[] {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; sbit SDO P1^0; sbit SDI P1^1; sbit CS P1^2; sbit CLK P1^3; s…

Linux(一)Linux理论

文章目录 一、Linux概述1.1 体系结构1.1.1 Linux内核1.1.2 用户态与内核态1.1.3 交换空间1.1.4 CLI和GUI 1.2 开机启动过程1.3 系统运行级别1.4 Linux进程1.4.1 Linux进程通信的方法1.4.2 Linux进程状态 二、文件2.1 Linux文件系统2.2 目录结构2.3 绝对路径和相对路径2.4 日志文…

增量式旋转编码器在STM32平台上的应用

背景 旋钮是仪器仪表上一种常见的输入设备&#xff0c;它的内部是一个旋转编码器&#xff0c;知乎上的这篇科普文章对其工作原理做了深入浅出的介绍。 我们公司的功率分析仪的前面板也用到了该类设备&#xff0c;最近前面板的MCU从MSP430切换成了STM32&#xff0c;因此我要将…

HarmonyOS 多态样式

还记得我们css中有 按压 失去焦点 点击后 正常状态 的各种样式设置 那么作为前端开发 TS JS的改版 harmonyos自然也有 这里 我们编写代码如下 Entry Component struct Index {build() {Row() {Column() {TextInput()TextInput().stateStyles({//正常状态normal: {.background…

Pytorch项目,肺癌检测项目之四

# 安装图像处理 的两个包 simpleITK 和 ipyvolume # 安装缓存相关的两个包 diskcache 和 cassandra-driver import gzip from diskcache import FanoutCache, Disk from cassandra.cqltypes import BytesType from diskcache import FanoutCache,Disk,core from diskcache…

计算机组成原理第6章-(计算机的运算方法)【上】

机器数与真值 把符号“数字化”的数称为机器数,而把带“+”、“-”符号的数称为真值。 原码表示法 原码是机器数中最简单的一种表示形式,0表示整数,1表示负数。 约定整数的符号位和数值位之间用“逗号”隔开。 在原码中,0有两种表示形式:“+0”和“-0”是不一样的。 反…

C++内存管理和模板初阶

C/C内存分布 请看代码&#xff1a; int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)mallo…

7.5组合总和②(LC40-M)

算法&#xff1a; 相比于上一题&#xff0c;数组candidates有重复元素&#xff0c;而要求不能有重复的组合&#xff0c;所以相对于39.组合总和 (opens new window)难度提升了不少。 如何去重&#xff1f; 先把candidates排序&#xff0c;让重复的元素都在一起 单层递归时&a…