一、移植蜂鸟E203 RISCV CPU到ZYNQ

这篇具有很好参考价值的文章主要介绍了一、移植蜂鸟E203 RISCV CPU到ZYNQ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1:修改E203 RTL

在原top再增加一个soc.v

修改点

1)时钟
e203_soc_top需要两个时钟,一个为16MHz,一个为32.768KHz。由于领航者ZYNQ FPGA开发板只有一个50MHz的输入晶振时钟。因此,要实现一个类似SOC中PLL模块的分频功能,为了简单直接用于fpga mmcm ip产生一个16M,再通过16M分频得到32.768KHz时钟。
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
2、关于GPIO
由于领航者开发板IO足够,不对GPIO进行删减。但是要注意,GPIOA[16]、GPIOA[17]是E203默认的UART0的PAD,这两个PAD需要连接到使用的串口引脚。或者按需要换成自己需要的管脚
以领航者ZYNQ开发板为例:
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件

risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
其他GPIO保留,后面在隐射到增加的IP 端口上,先配置为其他空闲的管脚
3、QSPI与ROM启动
由于领航者开发板没有多余的flash,因此芯片启动只能选择ROM启动。
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
4、power wakeup及指示
由于还要LED及按键空闲,先使用上(该PAD不需要也可以删除,wakeup 信号需要tie 1’b1 )
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
5、修改结果可综合:
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件
期间遇到两个问题:
1)vavido include无法识别。 Setting > general > Verilog options > 增加文件路径
2)sim top 文件增加define值无效,暂时未解决。(先再define文件中加入这两个define)
risc-v zynq,RISCV SOC,fpga开发,单片机,嵌入式硬件

修改后的soc.v

//-----------------------------------------------------------------------------------------
// Project Name    :    soc
// Module Name     :    soc.v 
// Revision        :    v1.0  
// Conpany         :    
// Editor          :    Jevon
// Email           :    jevonhjw@163.com 
// create Date     :    2023-01-14
// Descriptions    :    SOC project with E203 RISCV CPU
//-----------------------------------------------------------------------------------------

`timescale 1ns/10ps

module soc (
    input   wire                clk_sys         , //50MHz
    input   wire                rstn_sys        , //low active 
    inout   wire                mcu_tdo         ,
    inout   wire                mcu_tck         , 
    inout   wire                mcu_tdi         ,
    inout   wire                mcu_tms         ,
    inout   wire [31:0]         GPIOA           , //GPIOA00~GPIOA31
    inout   wire [31:0]         GPIOB           , //GPIOB00~GPIOB31
    
    input   wire                pad_wakeup      , //low power default 
    output  wire                pad_power_led   , //to LED 
    output  wire                pad_rst_led       //to LED 
);
//--------------------------------------------------------------------------
//define and parameter 


//--------------------------------------------------------------------------
//signals

wire            clk_16M                              ;
wire            CLK32768KHZ                          ;
wire            ck_rst                               ;
wire            dut_io_pads_jtag_TCK_i_ival          ;
wire            dut_io_pads_jtag_TMS_i_ival          ;
wire            dut_io_pads_jtag_TDI_i_ival          ;
wire            dut_io_pads_jtag_TDO_o_oval          ;
wire            dut_io_pads_jtag_TDO_o_oe            ;
wire            dut_io_pads_bootrom_n_i_ival         ; 
wire            dut_io_pads_aon_pmu_dwakeup_n_i_ival ;
wire            dut_io_pads_aon_pmu_vddpaden_o_oval  ;
wire            dut_io_pads_aon_pmu_padrst_o_oval    ;

//--------------------------------------------------------------------------
//PLL logic 

wire        clk_16m     ;
wire        locked      ;
reg         sync_d0     ;
reg         sync_d1     ;
wire        rstn_tmp    ;
wire        rstn        ;
reg  [11:0] div_cnt     ; 
wire [11:0] div_cnt_num ; 
wire        div_cnt_end ; 
reg         div_reg     ; 

clk_wiz_0 u_clk_wiz_0(
    .clk_out1(clk_16m   ),      // output clk_out1
    .resetn  (rstn_sys  ),      // input reset
    .locked  (locked    ),      // output locked
    .clk_in1 (clk_sys   )       // input clk_in1
    );

assign rstn_tmp = locked & rstn_sys ; 

always @(posedge clk_16m or negedge rstn_tmp)begin
    if(!rstn_tmp) begin             sync_d0 <= #1 1'h0    ;
                                    sync_d1 <= #1 1'h0    ;
    end else begin                  sync_d0 <= #1 1'h1    ;
                                    sync_d1 <= #1 sync_d0 ;
    end
end

assign rstn = sync_d1 ; //sync reset logic 

assign div_cnt_num = 12'd2440               ; 
assign div_cnt_end = div_cnt == div_cnt_num ; 

always @(posedge clk_16m or negedge rstn)begin
    if(!rstn)                       div_cnt <= #1 12'h0 ;
    else if(div_cnt_end)            div_cnt <= #1 12'h0 ;
    else                            div_cnt <= #1 div_cnt + 1'b1 ;
end

always @(posedge clk_16m or negedge rstn)begin
    if(!rstn)                       div_reg <= #1 1'h0     ;
    else if(div_cnt_end)            div_reg <= #1 !div_reg ;
end

//--------------------------------------------------------------------------
//pinmux for FPGA 

//JTAG 
wire mcu_tck_i              ; 
wire mcu_tms_i              ; 
wire mcu_tdi_i              ; 
wire mcu_tdo_i              ; 
wire mcu_tdo_o              ; 
wire mcu_tdo_oen            ; 

PULLUP pullup_TCK (.O(mcu_tck));
PULLUP pullup_TMS (.O(mcu_tms));
PULLUP pullup_TDI (.O(mcu_tdi));

IOBUF IOBUF_jtag_tck ( .O(mcu_tck_i),.IO(mcu_tck),.I(1'b0     ),.T(1'b1       ));  //T low active 
IOBUF IOBUF_jtag_tms ( .O(mcu_tms_i),.IO(mcu_tms),.I(1'b0     ),.T(1'b1       ));  //T low active 
IOBUF IOBUF_jtag_tdi ( .O(mcu_tdi_i),.IO(mcu_tdi),.I(1'b0     ),.T(1'b1       ));  //T low active 
IOBUF IOBUF_jtag_tdo ( .O(mcu_tdo_i),.IO(mcu_tdo),.I(mcu_tdo_o),.T(mcu_tdo_oen));  //T low active 

assign dut_io_pads_jtag_TCK_i_ival = mcu_tck_i                      ;
assign dut_io_pads_jtag_TMS_i_ival = mcu_tms_i                      ;
assign dut_io_pads_jtag_TDI_i_ival = mcu_tdi_i                      ;
assign mcu_tdo_o                   =  dut_io_pads_jtag_TDO_o_oval   ;
assign mcu_tdo_oen                 = ~dut_io_pads_jtag_TDO_o_oe     ;

wire [31:0] gpioa_i   ; 
wire [31:0] gpioa_o   ; 
wire [31:0] gpioa_oe  ; 
wire [31:0] gpiob_i   ; 
wire [31:0] gpiob_o   ; 
wire [31:0] gpiob_oe  ; 

IOBUF IOBUF_gpioa[31:0] ( .O(gpioa_i),.IO(GPIOA),.I(gpioa_o ),.T(!gpioa_oe));  //T low active 31
IOBUF IOBUF_gpiob[31:0] ( .O(gpiob_i),.IO(GPIOB),.I(gpiob_o ),.T(!gpiob_oe));  //T low active 31

//--------------------------------------------------------------------------
//instance 

assign clk_16M     = clk_16m ;
assign CLK32768KHZ = div_reg ;
assign ck_rst      = rstn    ;

// 0:internal ROM    (0x0000_1000)~0x0000_1FFFF
// 1:from QSPI_FLASH (0x2000_0000)
assign dut_io_pads_bootrom_n_i_ival         = 1'b0                                  ;
assign dut_io_pads_aon_pmu_dwakeup_n_i_ival = pad_wakeup                            ;
assign pad_power_led                        = dut_io_pads_aon_pmu_vddpaden_o_oval   ;
assign pad_rst_led                          = dut_io_pads_aon_pmu_padrst_o_oval     ;

e203_soc_top u_core 
  (
    .hfextclk(clk_16M),
    .hfxoscen(),
    .lfextclk(CLK32768KHZ), 
    .lfxoscen(),
    
       // Note: this is the real SoC top AON domain slow clock
    .io_pads_jtag_TCK_i_ival(dut_io_pads_jtag_TCK_i_ival),
    .io_pads_jtag_TMS_i_ival(dut_io_pads_jtag_TMS_i_ival),
    .io_pads_jtag_TDI_i_ival(dut_io_pads_jtag_TDI_i_ival),
    .io_pads_jtag_TDO_o_oval(dut_io_pads_jtag_TDO_o_oval),
    .io_pads_jtag_TDO_o_oe  (dut_io_pads_jtag_TDO_o_oe),

    .io_pads_gpioA_i_ival(gpioa_i),
    .io_pads_gpioA_o_oval(gpioa_o),
    .io_pads_gpioA_o_oe  (gpioa_oe),
    .io_pads_gpioB_i_ival(gpiob_i),
    .io_pads_gpioB_o_oval(gpiob_o),
    .io_pads_gpioB_o_oe  (gpiob_oe),

    .io_pads_qspi0_sck_o_oval (                     ), //no flash
    .io_pads_qspi0_cs_0_o_oval(                     ),
    .io_pads_qspi0_dq_0_i_ival(1'b0                 ),
    .io_pads_qspi0_dq_0_o_oval(                     ),
    .io_pads_qspi0_dq_0_o_oe  (                     ),
    .io_pads_qspi0_dq_1_i_ival(1'b0                 ),
    .io_pads_qspi0_dq_1_o_oval(                     ),
    .io_pads_qspi0_dq_1_o_oe  (                     ),
    .io_pads_qspi0_dq_2_i_ival(1'b0                 ),
    .io_pads_qspi0_dq_2_o_oval(                     ),
    .io_pads_qspi0_dq_2_o_oe  (                     ),
    .io_pads_qspi0_dq_3_i_ival(1'b0                 ),
    .io_pads_qspi0_dq_3_o_oval(                     ),
    .io_pads_qspi0_dq_3_o_oe  (                     ),

       // Note: this is the real SoC top level reset signal
    .io_pads_aon_erst_n_i_ival        (ck_rst                               ), //system reset low active 
    .io_pads_aon_pmu_dwakeup_n_i_ival (dut_io_pads_aon_pmu_dwakeup_n_i_ival ),
    .io_pads_aon_pmu_vddpaden_o_oval  (dut_io_pads_aon_pmu_vddpaden_o_oval  ),
    .io_pads_aon_pmu_padrst_o_oval    (dut_io_pads_aon_pmu_padrst_o_oval    ),
    .io_pads_bootrom_n_i_ival         (dut_io_pads_bootrom_n_i_ival         ),
    .io_pads_dbgmode0_n_i_ival        (1'b1                                 ),
    .io_pads_dbgmode1_n_i_ival        (1'b1                                 ),
    .io_pads_dbgmode2_n_i_ival        (1'b1                                 ) 
  );

//--------------------------------------------------------------------------
endmodule 

SDC约束

注:32.768KHz时钟点div_reg寄存器未约束,由FPGA自行判断。

set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports clk_sys]

create_clock -add -name clk_50m -period 20.00 -waveform {0 5} [get_ports {clk_sys}]

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets IOBUF_jtag_tck/O]

set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports rstn_sys]
set_property -dict {PACKAGE_PIN L20 IOSTANDARD LVCMOS33} [get_ports pad_wakeup]
set_property -dict {PACKAGE_PIN J18 IOSTANDARD LVCMOS33} [get_ports pad_power_led]
set_property -dict {PACKAGE_PIN H18 IOSTANDARD LVCMOS33} [get_ports pad_rst_led]
set_property -dict {PACKAGE_PIN B19 IOSTANDARD LVCMOS33} [get_ports mcu_tck]
set_property -dict {PACKAGE_PIN C20 IOSTANDARD LVCMOS33} [get_ports mcu_tms]
set_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports mcu_tdo]
set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports mcu_tdi]

set_property -dict {PACKAGE_PIN R17 IOSTANDARD LVCMOS33} [get_ports {GPIOA[31]}]
set_property -dict {PACKAGE_PIN P15 IOSTANDARD LVCMOS33} [get_ports {GPIOA[30]}]
set_property -dict {PACKAGE_PIN R18 IOSTANDARD LVCMOS33} [get_ports {GPIOA[29]}]
set_property -dict {PACKAGE_PIN T17 IOSTANDARD LVCMOS33} [get_ports {GPIOA[28]}]
set_property -dict {PACKAGE_PIN T15 IOSTANDARD LVCMOS33} [get_ports {GPIOA[27]}]
set_property -dict {PACKAGE_PIN P16 IOSTANDARD LVCMOS33} [get_ports {GPIOA[26]}]
set_property -dict {PACKAGE_PIN V15 IOSTANDARD LVCMOS33} [get_ports {GPIOA[25]}]
set_property -dict {PACKAGE_PIN W15 IOSTANDARD LVCMOS33} [get_ports {GPIOA[24]}]
set_property -dict {PACKAGE_PIN T12 IOSTANDARD LVCMOS33} [get_ports {GPIOA[23]}]
set_property -dict {PACKAGE_PIN U12 IOSTANDARD LVCMOS33} [get_ports {GPIOA[22]}]
set_property -dict {PACKAGE_PIN V12 IOSTANDARD LVCMOS33} [get_ports {GPIOA[21]}]
set_property -dict {PACKAGE_PIN W13 IOSTANDARD LVCMOS33} [get_ports {GPIOA[20]}]
set_property -dict {PACKAGE_PIN T14 IOSTANDARD LVCMOS33} [get_ports {GPIOA[19]}]
set_property -dict {PACKAGE_PIN P18 IOSTANDARD LVCMOS33} [get_ports {GPIOA[18]}]
set_property -dict {PACKAGE_PIN K18 IOSTANDARD LVCMOS33} [get_ports {GPIOA[17]}]
set_property -dict {PACKAGE_PIN J14 IOSTANDARD LVCMOS33} [get_ports {GPIOA[16]}]
set_property -dict {PACKAGE_PIN M20 IOSTANDARD LVCMOS33} [get_ports {GPIOA[15]}]
set_property -dict {PACKAGE_PIN J20 IOSTANDARD LVCMOS33} [get_ports {GPIOA[14]}]
set_property -dict {PACKAGE_PIN M18 IOSTANDARD LVCMOS33} [get_ports {GPIOA[13]}]
set_property -dict {PACKAGE_PIN R19 IOSTANDARD LVCMOS33} [get_ports {GPIOA[12]}]
set_property -dict {PACKAGE_PIN N17 IOSTANDARD LVCMOS33} [get_ports {GPIOA[11]}]
set_property -dict {PACKAGE_PIN U19 IOSTANDARD LVCMOS33} [get_ports {GPIOA[10]}]
set_property -dict {PACKAGE_PIN K14 IOSTANDARD LVCMOS33} [get_ports {GPIOA[9]}]
set_property -dict {PACKAGE_PIN M17 IOSTANDARD LVCMOS33} [get_ports {GPIOA[8]}]
set_property -dict {PACKAGE_PIN T19 IOSTANDARD LVCMOS33} [get_ports {GPIOA[7]}]
set_property -dict {PACKAGE_PIN D20 IOSTANDARD LVCMOS33} [get_ports {GPIOA[6]}]
set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS33} [get_ports {GPIOA[5]}]
set_property -dict {PACKAGE_PIN B20 IOSTANDARD LVCMOS33} [get_ports {GPIOA[4]}]
set_property -dict {PACKAGE_PIN H20 IOSTANDARD LVCMOS33} [get_ports {GPIOA[3]}]
set_property -dict {PACKAGE_PIN K19 IOSTANDARD LVCMOS33} [get_ports {GPIOA[2]}]
set_property -dict {PACKAGE_PIN M14 IOSTANDARD LVCMOS33} [get_ports {GPIOA[1]}]
set_property -dict {PACKAGE_PIN L16 IOSTANDARD LVCMOS33} [get_ports {GPIOA[0]}]

set_property -dict {PACKAGE_PIN  U17 IOSTANDARD LVCMOS33} [get_ports {GPIOB[31]}]
set_property -dict {PACKAGE_PIN  P20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[30]}]
set_property -dict {PACKAGE_PIN  N20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[29]}]
set_property -dict {PACKAGE_PIN  Y16 IOSTANDARD LVCMOS33} [get_ports {GPIOB[28]}]
set_property -dict {PACKAGE_PIN  T16 IOSTANDARD LVCMOS33} [get_ports {GPIOB[27]}]
set_property -dict {PACKAGE_PIN  Y18 IOSTANDARD LVCMOS33} [get_ports {GPIOB[26]}]
set_property -dict {PACKAGE_PIN  Y19 IOSTANDARD LVCMOS33} [get_ports {GPIOB[25]}]
set_property -dict {PACKAGE_PIN  W20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[24]}]
set_property -dict {PACKAGE_PIN  V20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[23]}]
set_property -dict {PACKAGE_PIN  U14 IOSTANDARD LVCMOS33} [get_ports {GPIOB[22]}]
set_property -dict {PACKAGE_PIN  U15 IOSTANDARD LVCMOS33} [get_ports {GPIOB[21]}]
set_property -dict {PACKAGE_PIN  T20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[20]}]
set_property -dict {PACKAGE_PIN  U20 IOSTANDARD LVCMOS33} [get_ports {GPIOB[19]}]
set_property -dict {PACKAGE_PIN  W14 IOSTANDARD LVCMOS33} [get_ports {GPIOB[18]}]
set_property -dict {PACKAGE_PIN  Y14 IOSTANDARD LVCMOS33} [get_ports {GPIOB[17]}]
set_property -dict {PACKAGE_PIN  N15 IOSTANDARD LVCMOS33} [get_ports {GPIOB[16]}]
set_property -dict {PACKAGE_PIN  N16 IOSTANDARD LVCMOS33} [get_ports {GPIOB[15]}]
set_property -dict {PACKAGE_PIN  V16 IOSTANDARD LVCMOS33} [get_ports {GPIOB[14]}]
set_property -dict {PACKAGE_PIN  W16 IOSTANDARD LVCMOS33} [get_ports {GPIOB[13]}]
set_property -dict {PACKAGE_PIN  W18 IOSTANDARD LVCMOS33} [get_ports {GPIOB[12]}]
set_property -dict {PACKAGE_PIN  W19 IOSTANDARD LVCMOS33} [get_ports {GPIOB[11]}]
set_property -dict {PACKAGE_PIN  T10 IOSTANDARD LVCMOS33} [get_ports {GPIOB[10]}]
set_property -dict {PACKAGE_PIN  T11 IOSTANDARD LVCMOS33} [get_ports {GPIOB[9]}]
set_property -dict {PACKAGE_PIN  P14 IOSTANDARD LVCMOS33} [get_ports {GPIOB[8]}]
set_property -dict {PACKAGE_PIN  R14 IOSTANDARD LVCMOS33} [get_ports {GPIOB[7]}]
set_property -dict {PACKAGE_PIN  V13 IOSTANDARD LVCMOS33} [get_ports {GPIOB[6]}]
set_property -dict {PACKAGE_PIN  U13 IOSTANDARD LVCMOS33} [get_ports {GPIOB[5]}]
set_property -dict {PACKAGE_PIN  G15 IOSTANDARD LVCMOS33} [get_ports {GPIOB[4]}]
set_property -dict {PACKAGE_PIN  H15 IOSTANDARD LVCMOS33} [get_ports {GPIOB[3]}]
set_property -dict {PACKAGE_PIN  V17 IOSTANDARD LVCMOS33} [get_ports {GPIOB[2]}]
set_property -dict {PACKAGE_PIN  M19 IOSTANDARD LVCMOS33} [get_ports {GPIOB[1]}]
set_property -dict {PACKAGE_PIN  Y17 IOSTANDARD LVCMOS33} [get_ports {GPIOB[0]}]

参考:
1)https://www.bilibili.com/video/BV1ia411U76P
2)https://blog.csdn.net/qq_44447544/article/details/123281503

上板验证

由于RISCV调试器还没购买,只能等年后再更新上板验证…文章来源地址https://www.toymoban.com/news/detail-736626.html

到了这里,关于一、移植蜂鸟E203 RISCV CPU到ZYNQ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ZYNQ移植ARM CMSIS_DSP库

    Vitis中新建一个Application Project,选择HelloWord模板。按下面步骤移植CMSIS_DSP: 下载CMSIS_DSP,拷贝如下文件夹到Vitis工程: Source Include PrivateInclude ComputeLibrary (only if you target Neon) 对Source路径下和文件夹同名的.c文件(如,BasicMathFunctions.c),设置为不编译(右键Properties,Exclude re

    2024年03月19日
    浏览(33)
  • Zynq-Linux移植学习笔记之62- PL挂载复旦微flash

    现在为了全国产化需要,之前所有的进口flash全部要换成国产flash 其中EFM25QU256和EFM25QL256对标winbond的w25q256 nor flash     复旦微flash只支持单线模式,当使用PL侧的IP核访问时,需要设置模式为standard   内核中修改m25p80.c,设置兼容的flash型号     同时复旦微flash推荐使用jffs2文件

    2024年02月15日
    浏览(43)
  • ZYNQ使用AXI DMA(Scatter/Gather)模式进行PL与PS数据交互附源码(ps端移植freertos或者裸机)

    AXI DMA 操作需要先提供一个在内存中驻留的不变空间,用于存储需要进行的DMA操作。形容这“每一次操作”的东西叫做Buffer Descriptor,缩写叫BD,这些BD是连接成链表的形式的,因为BD会动态增加,而预先分配存储BD的空间是恒定的,因此BD被连成一个环(BD Ring),其实就是一个循

    2024年02月09日
    浏览(37)
  • 【Matlab】智能优化算法_人工蜂鸟算法AHA

    蜂鸟是一种令人惊叹的动物,被认为是世界上最小的鸟类。如果用大脑与身体的比例来衡量蜂鸟的智力,蜂鸟将是地球上包括人类在内最聪明的动物。蜂鸟是最小的蜂鸟,平均体长5.5厘米,体重1.95克。蜂鸟拍打翅膀的频率是所有鸟类中最高的,可达每秒80次。蜂鸟一般以各种

    2024年02月16日
    浏览(38)
  • riscv 启动流程分析

    通过文章 将 Linux 移植到新的处理器架构,第 1 部分:基础 可知,我们进行一个新的处理器架构的移植,需要做到以下 3 点: 1、确定这是不是一个新的架构移植。 2、了解我们要移植的硬件。 3、了解内核的基本概念。 在riscv已经被移植支持的情况下,我们现在要做的是分析

    2023年04月24日
    浏览(29)
  • 智能优化算法应用:基于人工蜂鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

    摘要:本文主要介绍如何用人工蜂鸟算法进行3D无线传感器网(WSN)覆盖优化。 本文主要基于0/1模型,进行寻优。在二维平面上传感器节点的感知范围是一个以节点为圆心,半径为 R n R_n R n ​ 的圆形区域,该圆形区域通常被称为该节点的“感知圆盘”, R n R_n R n ​ 称为传感器

    2024年02月03日
    浏览(41)
  • RISCV 5 RISC-V调用规则

    RISCV - 1 RV32/64G指令集清单 RISCV - 2 “Zicsr“, CSR Instructions RISCV -3 RV32I/RV64I基本整型指令集 RISCV - 4 ISA 扩展名命名约定 In the RISCV standard ABI, procedures should not modify the integer registers tp and gp, because signal handlers may rely upon their values. 在RISCV标准 ABI 中,函数调用过程不应修改整数寄存器

    2024年02月14日
    浏览(40)
  • RISCV 6 RISC-V加载存储指令

    RISCV - 1 RV32/64G指令集清单 RISCV - 2 “Zicsr“, CSR Instructions RISCV -3 RV32I/RV64I基本整型指令集 RISCV - 4 ISA 扩展名命名约定 RISCV 5 RISC-V调用规则 RV32I is a load-store architecture, where only load and store instructions access memory and arithmetic instructions only operate on CPU registers. RV32I provides a 32-bit address s

    2024年02月10日
    浏览(38)
  • 学习riscv(1)安装tinyriscv的工具链

    因为毕设是CPU的低功耗设计,所以开始看cpu, 打算还是先从这个tinyriscv学起,昨天把环境下好了,第一步是用git去clone代码,这个首先要下载git,然后在目标文件夹鼠标右键,选择“open git bush here”,再输入项目的url,就可以了。方法不难。b站有详细教程 接下来是安装工具

    2024年02月05日
    浏览(24)
  • 5. Linux-riscv内存管理21-24问

    在中断上下文中不能使用包含GFP_KERNEL分配掩码。这里我们扩展了GFP_ATOMIC的知识。 2.5.1 zone水位 基础知识需要先了解一下zone water水位的知识。 HIGH: 系统的free内存大于HIGH水位的时候,是一个相对保险的值,不需要急着做内存回收(reclaim); LOW: 系统的free内存达到LOW水位的时

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包