MIPS单周期CPU设计——lw和sw指令的设计

2023-05-16

1.lw,sw指令格式及功能

指令[31:26][25:21][20:16][15:0]意义
lw100011rsrtoffset从数存(数据存储器)中取数据写进寄存器
sw101011rsrtoffset将寄存器中的值写入数存

2.所需模块框图及指令执行过程

在这里插入图片描述
       lw指令和sw指令需要DataMem(数据存储器)来取数据或存数据。

       执行过程:
       lw:
       从数存中取数据写入寄存器,rega提供数存单元地址(源),regc提供寄存器地址(目的)。
       ①IF模块将指令地址pc和片选信号romCe送入指存InstMem,从InstMem中取出数据由data脚送入ID模块的inst脚。
       ②ID将送入的inst进行译码,对于lw指令,将指令中的rs为送入regaAddr,连同regaRd读信号送入寄存器堆RegFile,读出regaData,送入ID模块的regaData_i。regaData_i里的数据加上指令中(经符号位扩展的)offset位,即regaData_i+offset,regaData_i+offset表示的就是要取的数据(在数存中)的地址。将regaData_i+offset送入ID的regaData,将指令中的rt位送入regcAddr。将ID中的regaData,regcAddr和regcWr分别送入EX模块的regaData,regcAddr_i和regcWr_i。
       ③EX模块的regaData作为memAddr送入内存MEM,regcAddr_i和regcWr_i作为regcAddr和regcWr送入MEM。
       ④MEM将送入的memAddr给要送出的memAddr(这里纠正框图中的一个错误,送入的memAddr应改为memAddr_i,modelsim中不能有命名相同的参数或变量。所以在这里将memAddr_i和memAddr分别称为要送入的memAddr和要送出的memAddr,下文也是一样,不再说明),将要取的数据地址memAddr和片选信号memCe送入数存DataMem,读取数据,从rdData送入MEM。
       ⑤MEM将rdData作为regData,将regcAddr作为regAddr,将regcWr作为regWr,然后将regData,regAddr和regWr送入regFile,将数据regData写进地址为regAddr的寄存器中。lw指令执行完毕。

       sw:
       将寄存器中的数据写入数存,rega提供数存单元地址(目的),regb提供寄存器地址(源)。
       ①IF模块将指令地址pc和片选信号romCe送入指存InstMem,存InstMem中取出数据由data脚送入ID模块的inst脚。
       ②ID将送入的inst进行译码,对于sw指令,将指令中的rs位送入regaAddr。指令中的rt位送入regbAddr,将regbAddr、regaAddr、regaRd,regbRd送入RegFile,找到regbData和regaData送入ID的regbData_i和regaData_i。将regaData_i加上(经符号位扩展)的offset,并送入regaData。此时regaData中保存的就是要写入的数据在数存中的地址,regbData保存的就是要写入数存中的数据。将regaData和regbData分别送入EX的regaData和regbData。
       ③EX中,将regaData作为memAddr,regbData作为memData,分别送入MEM中的memAddr和memData。
       ④MEM将memData作为wtData,连通memAddr,memWr和memCe分别送入DataMem中的wtData、addr、we和ce,将数据写进DataMem,sw指令执行完毕。

3.代码

       ①define.v


`define RstEnable        1'b0
`define RstDisable       1'b1

`define RomDisable       1'b0
`define RomEnable        1'b1

`define RamWrite         1'b1
`define RamUnWrite       1'b0
`define RamEnable        1'b1
`define RamDisable       1'b0

`define Valid            1'b1
`define Invalid          1'b0

`define Zero             32'h00000000
`define nop              6'b001101

`define Inst_lw          6'b100011
`define Inst_sw          6'b101011

`define Lw              6'b001100
`define Sw              6'b001101

       ②IF.v


`include "define.v"

module IF(

    input wire clk,
    input wire rst,
    output reg [31:0] pc,
    output reg romCe,
    input wire [31:0] jAddr,
    input wire jCe
    

);

    always@(*)
        if(rst == `RstEnable)
           romCe = `RomDisable;
        else
            romCe = `RomEnable;

     always@(posedge clk)
        if(romCe == `RomDisable)
            pc = `Zero;
        else if(jCe == `Valid)
            pc = jAddr;
        else
            pc = pc+4;

endmodule

       ③InstMem.v


`include "define.v"

module InstMem(

    input wire ce,
    input wire [31:0] addr,
    output reg [31:0] data
);

    reg [31:0] instmem [1023:0];
    always@(*)
        if(ce == `RomDisable)
            data = `Zero;
        else
            data = instmem[addr[11:2]];
    initial
        begin
            instmem[0] = 32'h8E1F0001;  //lw
            instmem[1] = 32'hAC890000;  //sw
        end

endmodule

       ④ID.v


`include "define.v"

module ID(

    input wire rst,
    input wire [31:0] inst,
    input wire [31:0] regaData_i,
    input wire [31:0] regbData_i,
    input wire [31:0] pc_i,
    output reg [5:0] op,
    output reg [31:0] regaData,
    output reg [31:0] regbData,
    output reg regcWr,
    output reg [31:0] regcAddr,
    output reg regaRd,
    output reg [31:0] regaAddr,
    output reg regbRd,
    output reg [31:0] regbAddr,
    output reg [31:0] jAddr,
    output reg jCe,
    output wire [31:0] pc
);

    wire [31:0] npc = pc + 4;
    wire [5:0] Inst_op = inst[31:26];
    wire [5:0] func = inst[5:0];
    reg [31:0] imm;

//    assign pc = pc_i;


    always@(*)
        if(rst == `RstEnable)
            begin
                op = `nop;
                regaRd = `Invalid;
                regbRd = `Invalid;
                regcWr = `Invalid;
                regaAddr = `Zero;
                regbAddr = `Zero;
                regcAddr = `Zero;
                imm = `Zero;
                jCe = `Invalid;
                jAddr = `Zero;
            end
        else
            begin
                jCe = `Invalid;
                jAddr = `Zero;
            case(Inst_op)
                `Inst_lw:
                    begin
                        op = `Lw;
                        regaRd = `Valid;
                        regbRd = `Invalid;
                        regcWr = `Valid;
                        regaAddr = inst[25:21];
                        regbAddr = `Zero;
                        regcAddr = inst[20:16];
                        imm = {{16{inst[15]}},inst[15:0]};
                    end
                `Inst_sw:
                    begin
                        op = `Sw;
                        regaRd = `Valid;
                        regbRd = `Valid;
                        regcWr = `Invalid;
                        regaAddr = inst[25:21];
                        regbAddr = inst[20:16];
                        regcAddr = `Zero;
                        imm = {{16{inst[15]}},inst[15:0]};
                    end
            endcase
            end
    always@(*)
        if(rst == `RstEnable)
            regaData = `Zero;
        else if(op == `Lw || op == `Sw)
            regaData = regaData_i + imm;
        else if(regaRd == `Valid)
            regaData = regaData_i;
        else
            regaData = imm;

    always@(*)
        if(rst == `RstEnable)
            regbData = `Zero;
        else if(regbRd == `Valid)
            regbData = regbData_i;
        else
            regbData = imm;
endmodule

       ⑤EX.v

`include "define.v"

module EX(

    input rst,
    input wire [5:0] op_out,
    input wire [5:0] op_i,

//    input wire [31:0] pc_i,
    input wire [31:0] regaData,
    input wire [31:0] regbData,
    output reg [31:0] regcData,
    
    input wire regcWr_i,
    input wire [4:0] regcAddr_i,
    output wire regcWr,
    output wire [4:0] regcAddr,
    output wire [31:0] memAddr,
    output wire [31:0] memData,

//HiLo
    output reg [31:0] wHiData, //lw,sw
    output reg [31:0] wLoData,
    output wire [31:0] rHiData,
    output wire [31:0] rLoData,
    output reg whi,
    output reg wlo
    

);

    assign op_out = op_i;
    assign memAddr = regaData;
    assign memData = regbData;

    assign regcWr = regcWr_i;
    assign regcAddr = regcAddr_i;
endmodule

       ⑥MEM.v

`include "define.v"

module MEM(
    
    input wire rst,
    input wire [5:0] op,
    input wire [31:0] regcData,
    input wire [4:0] regcAddr,
    input wire regcWr,
    input wire [31:0] memAddr_i,
    input wire [31:0] memData,
    input wire [31:0] rdData,
    
    output wire [31:0] regData,
    output wire [4:0] regAddr,
    output wire regWr,
    output wire [31:0] memAddr,
    output reg [31:0] wtData,
    output reg memWr,
    output reg memCe
);

    assign regData = (op == `Lw) ? rdData : regcData;
    assign regAddr = regcAddr;
    assign regWr = regcWr;
    assign memAddr = memAddr_i;

    always@(*)
        if(rst == `RstEnable)
            begin
                wtData = `Zero;
                memWr = `RamUnWrite;
                memCe = `RamDisable;
            end
        else
            case(op)
                `Lw:
                    begin
                        wtData = `Zero;
                        memWr = `RamUnWrite;//read
                        memCe = `RamEnable;
                    end
                `Sw:
                    begin
                        wtData = memData;
                        memWr = `RamWrite;//write
                        memCe = `RamEnable;
                    end
                default:
                    begin
                        wtData = `Zero;
                        memWr = `RamUnWrite;
                        memCe = `RamDisable;
                    end
            endcase
endmodule

       ⑦DataMem.v


`include "define.v"
module DataMem(
    input wire clk,
    input wire ce,
    input wire we,
    input wire [31:0] wtData,
    input wire [31:0] memAddr,
    output reg [31:0] rdData
);
    reg [31:0] data [31:0];  
    always@(*)
        if(ce == `RamDisable)
            rdData = `Zero;
        else rdData = data[memAddr[11:2]];
    always@(posedge clk)
        if(ce == `RamEnable && we == `RamWrite)
            data[memAddr[11:2]] = wtData;
        else ;
    initial
        begin
            data [1] = 32'h0000001A; //lw
        end
endmodule

       ⑧RegFile.v


`include "define.v"

module RegFile(

    input wire clk,
    input wire rst,
    input wire we,
    input wire [4:0] wAddr,
    input wire [31:0] wData,
    input wire regaRd,
    input wire regbRd,
    input wire [4:0] regaAddr,
    input wire [4:0] regbAddr,
    output reg [31:0] regaData,
    output reg [31:0] regbData
);

    reg [31:0] reg32 [31 : 0];    
    always@(*)
        if(rst == `RstEnable)
            regaData = `Zero;
        else if(regaAddr == `Zero)
            regaData = `Zero;
        else
            regaData = reg32[regaAddr];
    always@(*)
        if(rst == `RstEnable)          
            regbData = `Zero;
        else if(regbAddr == `Zero)
            regbData = `Zero;
        else
            regbData = reg32[regbAddr];
    always@(posedge clk)
        if(rst != `RstEnable)
            if((we == `Valid) && (wAddr != `Zero))
                reg32[wAddr] = wData;
        else ;  
    initial
        begin
            reg32[4] = 32'h00000010; //sw
            reg32[9] = 32'h000000FF; //sw   
            reg32[16] = 32'h00000004; //lw
        end

   
endmodule 

       ⑨MIPS.v

`include "define.v"
module MIPS(
    input wire clk,
    input wire rst,
    input wire [31:0] instruction,
    output wire romCe,
    output wire [31:0] instAddr
);
    wire [31:0] regaData_regFile, regbData_regFile;
    wire [31:0] regaData_id, regbData_id; 
    wire [31:0] regcData_ex;
    wire [5:0] op;    
    wire regaRd, regbRd;
    wire [4:0] regaAddr, regbAddr;
    wire regcWr_id, regcWr_ex;
    wire [4:0] regcAddr_id, regcAddr_ex;
    wire [31:0] jAddr;
    wire jCe;

    wire [5:0] op_ex;
    wire [31:0] memAddr_ex,memData_ex;//lw and sw
    wire [31:0] rdData,wtData;
    wire [31:0] memAddr;
    wire [4:0] regAddr_mem;
    wire [31:0] regData_mem;
    wire memWr,memCe;
    wire regWr_mem;

    wire wlo,whi;//hilo
    wire [31:0] wLoData,wHiData;
    wire [31:0] rLoData,rHiData;

    IF if0(
        .clk(clk),
        .rst(rst),
        .jAddr(jAddr),
        .jCe(jCe),
        .romCe(romCe), 
        .pc(instAddr)
    );
    ID id0(
        .rst(rst),        
        .inst(instruction),
        .regaData_i(regaData_regFile),
        .regbData_i(regbData_regFile),
        .pc(instAddr),
        .op(op),
        .regaData(regaData_id),
        .regbData(regbData_id),
        .regaRd(regaRd),
        .regbRd(regbRd),
        .regaAddr(regaAddr),
        .regbAddr(regbAddr),
        .regcWr(regcWr_id),
        .regcAddr(regcAddr_id),
        .jAddr(jAddr),
        .jCe(jCe)
    );
    EX ex0(
        .rst(rst),
        .op_i(op),        
        .regaData(regaData_id),
        .regbData(regbData_id),
        .regcWr_i(regcWr_id),
        .regcAddr_i(regcAddr_id),
        .rHiData(rHiData),
        .rLoData(rLoData),
        .regcData(regcData_ex),//out
        .regcWr(regcWr_ex),
        .regcAddr(regcAddr_ex),
        .op_out(op_ex),//lw and sw
        .memAddr(memAddr_ex),
        .memData(memData_ex),
        .whi(whi),
        .wlo(wlo),
        .wHiData(wHiData),
        .wLoData(wLoData)
    );    
    MEM mem0(
        .rst(rst),
        .op(op_ex),
        .regcData(regcData_ex),
        .regcAddr(regcAddr_ex),
        .regcWr(regcWr_ex),
        .memAddr_i(memAddr_ex),
        .memData(memData_ex),
        .rdData(rdData),
        .regData(regData_mem),
        .regAddr(regAddr_mem),
        .regWr(regWr_mem),
        .memAddr(memAddr),
        .wtData(wtData),
        .memWr(memWr),
        .memCe(memCe)
    );
    DataMem datamem0(
        .clk(clk),
        .ce(memCe),
        .we(memWr),
        .wtData(wtData),
        .memAddr(memAddr),
        .rdData(rdData)
    );
    RegFile regfile0(
        .clk(clk),
        .rst(rst),
        .we(regWr_mem),
        .wAddr(regAddr_mem),
        .wData(regData_mem),
        .regaRd(regaRd),
        .regbRd(regbRd),
        .regaAddr(regaAddr),
        .regbAddr(regbAddr),
        .regaData(regaData_regFile),
        .regbData(regbData_regFile)
    );
endmodule

       ⑩SoC.v

module SoC(
    input wire clk,
    input wire rst
);
    wire [31:0] instAddr;
    wire [31:0] instruction;
    wire romCe;    
    MIPS mips0(
        .clk(clk),
        .rst(rst),
        .instruction(instruction),
        .instAddr(instAddr),
        .romCe(romCe)
    );    
    InstMem instrom0(
        .ce(romCe),
        .addr(instAddr),
        .data(instruction)
    );
endmodule


       11. soc_tb.v

`include "define.v"
module soc_tb;
    reg clk;
    reg rst;
    initial
      begin
        clk = 0;
        rst = `RstEnable;
        #100
        rst = `RstDisable;
        #10000 $stop;      //run to 10000,simulate stop(Zan ting)       
      end
    always #10 clk = ~ clk;
    SoC soc0(
        .clk(clk), 
        .rst(rst)
    );
endmodule


4.仿真图

       RegFile里的数据:

            reg32[4] = 32'h00000010; //sw
            reg32[9] = 32'h000000FF; //sw   
            reg32[16] = 32'h00000004; //lw

       DataMem里的数据:

            data [1] = 32'h0000001A; //lw

       我的lw指令和sw指令:
       lw:8E1F0001,其二进制为100011 10000 11111 0000 0000 0000 0001。
       sw:AC890000,其二进制为101011 00100 01001 0000000000000000。
       lw指令将数存地址为32’h00000004(reg32[16])中的数据32’h0000001A(data[1])写入到RegFile中地址为5’b11111的寄存器中(即r31寄存器)。

       sw指令将RegFile中的数据32’h000000FF(reg32[9])写到数存的data[4]中,之所以是data[4],是因为RegFile的reg32[4]中的数据是32’h00000010,即写入到数存的第16个字节中,而data是宽度为32位的寄存器,一个字节8位,data的每位都是4个字节,数存的第16个字节刚好是data的第4位,即data[4]。仿真图如下:
在这里插入图片描述
       因为读出是组合逻辑,任意时间都能看到数据,写入是时序逻辑只有时钟上升沿才能写入到寄存器,所以数存中的数据32’h0000001a在lw指令的下一周期才被写入RegFile的31号寄存器reg32[31]。和lw一样,需要在sw的下一个周期才能从RegFile读出写入的数据32’b000000FF,写入的地址就是data[4]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIPS单周期CPU设计——lw和sw指令的设计 的相关文章

  • 串口通信基本接线方法

    目前较为常用的串口有9针串口 xff08 DB9 xff09 和25针串口 xff08 DB25 xff09 xff0c 通信距离较近时 lt 12m xff0c 可以用电缆线直接连接标准RS232端口 RS422 RS485较远 xff0
  • 字符串库函数大全

    打开string h头文件 xff0c 网址 xff1a https en cppreference com w c string byte 抽出了常用的字符串操作函数 xff0c 权当手册用了 1 字符串基本操作 strcpy xff1a
  • RPlidar(一)——雷达试用

    先附一张RPlidar的图片 以下为本人初次通过ubuntu使用RPlidar 首先将RPlidar连接到电脑上 然后在terminal输入 ls dev ttyUSB 更改com port 权限 sudo chmod 666 dev tt
  • RPlidar学习(三)——RPlidar源代码库

    1 头文件简介 rplidar h 一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能 rptypes h 平台无关的结构和常量定义 rplidar protocol h 定义了 RPLIDAR 通讯协议文
  • PC读写西门子PLC寄存器的值

    https blog csdn net weixin 29482793 article details 81873280
  • 编码的历史

    快下班时 xff0c 爱问问题的小朋友Nico又问了一个问题 xff1a 34 sqlserver里面有char和nchar xff0c 那个n据说是指unicode的数据 xff0c 这个是什么意思 34 并不是所有简单的问题都很容易回答
  • 教你如何通过MCU配置S2E为TCP Server的工作模式

    在上一篇文章中讲了 如何通过MCU配置S2E为UDP模式 xff0c 相信小伙伴们已经了解了S2E的基本功能 xff0c 在这一篇中 xff0c 我们再接再厉 xff0c 继续学习一下 如何通过MCU配置S2E为TCP Server的工作模
  • ubuntu配置USB权限

    usbcan设备在ubutu下使用 xff0c 每次必须动用root权限才能使用 xff0c 比较繁琐 参考如下文章进行配置 xff1a https blog csdn net bigdog 1027 article details 790
  • SocketCAN学习笔记

    1 对SocketCAN的理解 69条消息 对Socket CAN的理解 xff08 1 xff09 CAN总线原理 yuzeze的博客 CSDN博客 can socket 对Socket CAN的理解 xff08 2 xff09 Sock
  • Golang写Post请求并获取返回值

    直接上代码 xff0c 其中可以在下面代码中添加 package main import fmt net http io ioutil net url func main 需要post的数据 以key value形式提交 data 61 m
  • postMan 汉化

    1 下载postman解压安装 xff0c 下载地址Postman 2 下载汉化包 Release 9 2 0 hlmd Postman cn GitHub 选择postMan对应的版本 3 找到postman根目录我的在c盘 xff0c
  • 2022 小学组试题

    1 史密斯数 若一个合数的质因数分解式逐为位相加之和等于其本身逐位相加之和 则称这个数为smith数 如4937775 3 5 5 65837 而3 5 5 6 5 8 3 7 42 4 9 3 7 7 7 5 42 所以4937775是s
  • usaco 1 回文素数快速筛选

    求指定区间的回文素数 include lt bits stdc 43 43 h gt define N 10000010 using namespace std bool st N int cnt 61 0 primes N n m voi
  • C++ STL 学习笔记

    MAP的用法 xff1a 389找不同 给定两个字符串 s 和 t xff0c 它们只包含小写字母 字符串 t 由字符串 s 随机重排 xff0c 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 xff1a s 61
  • 大模型平台

    大模型训练平台的算力急速增长 xff1a 据报道 xff0c GPT3 5 的训练使用了微软专门建设的 AI 计算系统 xff0c 由 1 万个 V100 GPU 组成的高性能网络集群 xff0c 总算力消耗约 3640 PF days 即
  • Float IP 浮动IP地址

    xfeff xfeff 就是多个主机工作在 同一个集群中 xff0c 即两台主机以上 每台机器除了自己的实IP外 xff0c 会设置一个浮动IP xff0c 浮动IP与主机的服务 xff08 HTTP服务 邮箱服务 xff09 绑在一起的
  • linux 下安装 c++编译器的方法

    xfeff xfeff 假设你的电脑能够访问internet xff0c 这个命令会自动从网络下载并把软件安装到本地 超级用户权限 xff1a yum y install gcc c 43 43 另外一定不要天真的认为linux 下面 编译
  • linux 内核编译错误的原因

    xfeff xfeff 直接编译centos 7 内核目录下的代码出现如下错误 xff1a root 64 localhost 3 10 0 123 el7 x86 64 make make 1 No rule to make target
  • ifconfig 看到Rx error overrun 如何解决

    xfeff xfeff 一台机器经常收到丢包的报警 xff0c 先看看最底层的有没有问题 ethtool em2 egrep 39 Speed Duplex 39 Speed 1000Mb s Duplex Full ethtool S e
  • AES-GCM算法

    AES GCM算法简介 AES GCM算法是带认证和加密的算法 xff0c 同时可以对给定的原文 xff0c 生成加密数据和认证码 参数如下 xff1a 1 xff09 带加密的原文 2 xff09 存储加密后密文 3 xff09 IV向量

随机推荐

  • cmake 编译c++项目

    分两步 xff1a CMakeLists txt文件编写结束以后就可以对工程进行编译了 xff0c 进入build目录 并执行cmake和make指令 xff0c 如下 xff1a 第一步 cmake span class token pu
  • sshd 无法启用的问题 Could not load host key: /etc/ssh/ssh_host_rsa_key Could not load host key: /etc/ssh/ss

    原文链接 xff1a http blog csdn net lynn kong article details 9112009 1 问题现象 版本 xff1a Grizzly master分支代码2013 06 17 部署 xff1a 三个
  • iptables nat

    NAT一般情况下分为SNAT xff0c DNAT和PNAT 此篇主要讲述的是使用iptables配置NAT xff0c 所以这3种NAT的区别和应用场景就简单的说明一下 SNAT xff1a 源地址转换 目标地址不变 xff0c 重新改写
  • Qt 的Cmake方式如何创建资源文件和添加类

    今天看到有人问Qt 的Cmake方式如何创建资源文件 xff0c 这个问题和添加类都是一样的 xff0c 也有朋友问如何添加类 xff0c 百度的回答是把cmake改成Qmake 这样等于没有回答 xff0c 根据自己的经验我在这里回答一下
  • ajax 请求头Authorization 添加账号密码访问

    在header中添加 34 Authorization 34 字段 xff0c 值为 34 api key api secret 34 进行base64加密后 在前面加入 34 Basic 34 Basic后有空格 字符串 最后形式为 34
  • Authorization—权限控制流程

    本篇是对Shiro体系架构的介绍 xff0c 本栏目大部分内容来自于Shiro官网 翻译过程中已经尽量保证用词的准确性和易懂性 xff0c 如有不准确或者不确切的地方 xff0c 请联系作者加以修改 本篇内容翻译自Authorization
  • C语言在头文件中用extern架起变量沟通的桥梁

    span class hljs comment a c span span class hljs keyword int span foo span class hljs keyword int span bar span class hl
  • 【C语言】5. 指针free后为什么要刻意指向NULL、野指针(原因、解决)、悬垂指针

    目录 1 指针free后为什么还要刻意指向NULL xff1f 2 野指针2 1 什么是野指针 xff1f 2 2 野指针形成的原因2 3 如何避免野指针 3 悬垂指针3 1 什么是悬垂指针 xff1f 3 2 示例代码3 3 解决方法 1
  • 【QT】UDP通信QUdpSocket(单播、广播、组播)

    目录 1 UDP通信概述2 UDP消息传送的三种模式3 QUdpSocket类的接口函数4 UDP单播和广播代码示例4 1 测试说明4 2 MainWindow h4 3 MainWindow cpp4 4 界面展示 5 UDP组播代码示例
  • Fiddler 调试HTTP工具,帮助Debug HTTP连接的免费工具

    Fiddler是一个C 实现的浏览器抓包和调试工具 xff0c fiddler启用后作为一个proxy存在于浏览器和服务器之间 xff0c 从中监测浏览器与服务器之间的http https级别的网络交互 目前可以支持各种主要浏览器如IE C
  • 对话框使用VIEW (转)

    现在的程序功能越来越复杂 xff0c 很多功能要求能在对话框中实现复杂的功能 xff0c 而在对话框中使用视图不像使用一些诸如静态控件 xff0c 编辑控件等那么方便 xff0c 下面文章用实例说明如何在对话框中使用视图 正文 http w
  • ubuntu系统下安装putty

    1 打开终端 xff0c 使用下面的命令来安装putty xff1a 1 1 sudo apt get update 1 2 sudo apt get install putty 上面两步成功则说明putty安装成功 2 接下来配置putt
  • 改变linux shell的输出效果

    文本终端的颜色可以使用 ANSI非常规字符序列 来生成 举例 xff1a echo e 34 033 44 37 5m ME 033 0m COOL 34 以上命令设置背景成为蓝色 xff0c 前景白色 xff0c 闪烁光标 xff0c 输
  • GNU ARM 汇编指令

    原文地址 http blog sina com cn s blog 59b189220100au1k html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C 43 43 编写程序很方便 xff0c 但汇编源程序用于系统最
  • 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决?

    什么是序列化 序列化 xff1a 把对象转换为字节序列的过程称为对象的序列化 反序列化 xff1a 把字节序列恢复为对象的过程称为对象的反序列化 怎么序列化 实现Serializable接口 xff0c 指定serialVersionUID
  • 寻迹小车笔记——红外对管(TCRT5000)原理

    一 概述 深色 xff08 黑色 xff09 的是发射端 xff0c 白色 xff08 透明 xff09 的是接收端 中间蓝色的是可以调节灵敏度的旋钮 TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光
  • C语言判断一个数是否是水仙花数

    水仙花数是指一个N位正整数 xff08 N 3 xff09 xff0c 它的每个位上的数字的N次幂之和等于它本身 例如 xff1a 153 61 1 3 43 5 3 43 3 3 include lt stdio h gt int nar
  • C语言分类统计字符个数

    题目来源 xff1a 分类统计字符个数 PTA 本题要求实现一个函数 xff0c 统计给定字符串中英文字母 空格或回车 数字字符和其他字符的个数 函数接口定义 xff1a void StringCount char s 其中 char s
  • MIPS单周期CPU的设计——I型指令的设计

    一 一些概念 1 单周期CPU 指令周期 xff1a CPU从内存取出一条指令并执行这条指令的时间总和 CPU周期 xff1a 又称机器周期 xff0c CPU访问一次内存所花的时间较长 xff0c 因此用从内存读取一条指令字的最短时间来定
  • MIPS单周期CPU设计——lw和sw指令的设计

    1 lw xff0c sw指令格式及功能 指令 31 26 25 21 20 16 15 0 意义lw100011rsrtoffset从数存 xff08 数据存储器 xff09 中取数据写进寄存器sw101011rsrtoffset将寄存器