【计算机组成与体系结构Ⅰ】课程设计——基于Logisim的模型计算机设计

基于Logisim的模型计算机设计

一、实验目的

基于Logisim软件,根据一个模型指令系统,在逐步学习和了解计算机组成各部分逻辑组成和各部分互联的基础上,深入理解课程中的知识点,利用此软件设计并实现一个模拟的8位模型计算机原型。

二、模型计算机指令集和组成

2.1 8位模型计算机的指令系统指令集

  1. LDA—将数据装入累加器A
  2. ADD—加法
  3. SUB—减法
  4. OUT—输出结果
  5. HLT—停机

均为单字长、零地址或一地址指令、两个通用R (A ,B)

助记符

功能

指令格式(OP字段)

LDA address

R[Rs]←M[address];Rs:A

0000

address

ADD address

R[Rs]←M[address]; Rs:B;

R[A] ←R[A]+ R[B]

0001

address

SUB address

R[Rs]←M[address]; Rs:B;

R[A] ←R[A]- R[B]

0010

address

OUT

R[O] ←R[A];

1110

xxxx

HLT

停机

1111

xxxx


2.2 计算机简化模型的组成(数据通路)

 

三、实验环境

Logisim-win-2.7.1;

Microsoft Windows 10;

四、实验内容

1:分析指令集指令,结合ppt的第5章第4节内容(ppt补充内容),用Logisim库中的门器件、寄存器、存储器件以及多路选择器、译码器和其他简单的器件来搭建最终的8位模型CPU和模型计算机。

2:将ppt中第5章第4节提供的指令存入存储器,运行结果,并在LED上显示。

3:项目报告:说明每个模块的设计思路,8位模型计算机的测试方法及测试结果。

4:录屏视频:演示利用本作业设计的8位模型计算机运行作业要求的测试汇编代码的结果,利用Led灯或数码管等显示结果。

汇编代码如下:

LDA 9H

ADD AH

ADD BH

OUT

HLT

五、模块设计

5.1 分析指令集指令

本实验中指令区域的对应关系如下表所示:

源程序

指令字段

存储单元

LDA 9H

0000 1001

0000->R0

ADD AH

0001 1010

0001->R1

ADD BH

0001 1011

0010->R2

OUT

1110 ****

0011->R3

HLT

1111 ****

0100->R4

5.2 分析数据与存储单元

本实验中数据区域的对应关系如下表所示:

数据值(十进制)

数据值(二进制)

存储单元(地址)

16

0001 0000

1001->9H

20

0001 0100

1010->AH

24

0001 1000

1011->BH

5.3 设计1位半加器

令A为加数、B为被加数、S为当前位的和、C为当前位的进位,可以得到半加器的真值表如下表所示:

A

B

S

C

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

通过真值表,可以得到S和C的逻辑表达式为(其中红色部分为取非结果)

S = AB + AB = A  B

C = AB + AB


因此,S可以使用异或门求得,C可以使用与门求得。

 

根据上述分析所设计的电路图如下图所示:


经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 1,B = 1为例进行展示,电路的显示结果如下图所示:

 

5.4 设计1位全加器

令A为加数、B为被加数、Ci为低位的进位、S为当前位的和、Co为当前位的进位,可以得到全加器的真值表如下表所示:

Ci

A

B

S

Co

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

通过真值表,可以得到S和Co的逻辑表达式为(其中红色部分为取非结果)

S = ABCi + ABCi + ABCi + ABCi = A  B  Ci

Co = ABCi + ABCi + ABCi + ABCi = AB + ACi + BCi


因此,S可以使用异或门求得,Co可以使用与门和或门求得。

根据上述分析所设计的电路图如下图所示:

 

经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 1,B = 1,Ci = 1为例进行展示,电路的显示结果如下图所示:


5.5 设计4位全加器

 


4位全加器可以通过4个1位全加器串行连接组成。通过对1位全加器进行封装后,可以将其作为自设元件插入到电路当中。通过对1位全加器进行接口调整和封装后,其左侧有三个输入端口,从上至下依次是加数、被加数和低位的进位,同时其右侧有两个输出端口,从上至下依次是当前位的和、当前位的进位。最终的封装结果如下图所示:

 

第一个全加器需要设置加数A0、被加数B0、低位的进位Ci0、当前位的和S0,一共三个输入引脚和一个输出引脚。

由于第二个全加器的低位的进位来源于第一个全加器的当前位的进位,因此不需要额外设置低位的进位的输入引脚。所以,第二个全加器需要设置加数A1、被加数B1、当前位的和S1,一共二个输入引脚和一个输出引脚。

第三个全加器的设置与第二个全加器的设置类似。所以,第三个全加器需要设置加数A2、被加数B2、当前位的和S2,一共二个输入引脚和一个输出引脚。

由于第四个全加器的当前位的进位没有其他元件接收,因此需要额外设置当前位的进位的输出引脚。所以,第四个全加器需要设置加数A3、被加数B3、当前位的和S3、当前位的进位Co3,一共二个输入引脚和二个输出引脚。


根据上述分析所设计的电路图如下图所示:


经过仿真模拟各输入信号的值后,发现电路的输出结果与理论分析结果一致,说明电路设计具备正确性。此处以A = 1111,B = 1000,Cio = 0为例进行展示,电路的显示结果如下图所示:

 

 

5.6 设计8位全加器


8位全加器可以通过2个4位全加器串行连接组成。通过对4位全加器进行封装后,可以将其作为自设元件插入到电路当中。通过对4位全加器进行接口调整和封装后,其左侧有九个输入端口,从上至下依次是加数的第一位值、被加数的第一位值、整体上低位的进位、加数的第二位值、被加数的第二位值、加数的第三位值、被加数的第三位值、加数的第四位值、被加数的第四位值,同时其右侧有五个输出端口,从上至下依次是第一位的和、第二位的和、第三位的和、第四位的和、整体上当前四位的进位。最终的封装结果如下图所示:

 

第一个4位全加器需要设置加数A的低位四位(即A0至A3)、被加数B的低位四位(即B0至B3)、低位四位的低位的进位Ci、低位四位的当前位的和(即S0至S3),一共九个输入引脚和四个输出引脚。

由于第二个4位全加器的低位的进位来源于第一个4位全加器的当前位的进位,因此不需要额外设置低位的进位的输入引脚。所以,第二个4位全加器需要设置加数A的高位四位(即A4至A7)、被加数B的高位四位(即B4至B7)、高位四位的当前位的和(即S0至S4)、高位四位的当前位的进位Co,一共八个输入引脚和五个输出引脚。


根据上述分析所设计的电路图如下图所示:


经过仿真模拟各输入信号的值后,发现电路的输出结果与理论分析结果一致,说明电路设计具备正确性。此处以A = 1111 1111,B = 1000 0000,Ci = 0为例进行展示,电路的显示结果如下图所示:

 

 

5.7 设计循环累加器


选择位宽均为8的加法器、寄存器、常量、输出引脚作为循环累加器的基本元件,同时加上时钟作为时序控制信号的发生器。将时钟和的寄存器的使能端相连接,来控制寄存器的时序逻辑。寄存器的Q端为当前寄存器的值,D端为当触发时钟端时输入到寄存器的值。加法器的加数固定为0000 0001,被加数固定为寄存器的值,因此被加数端需要连接寄存器的Q端,和端需要连接寄存器的D端。

根据上述分析所设计的电路图如下图所示:

 

经过仿真模拟各输入信号的值后,发现电路的输出结果与理论分析结果一致,说明电路设计具备正确性。此处以经过三个上升沿为例进行展示,电路的显示结果如下图所示:

 

5.8 设计半减器

令A为被减数、B为减数、D为当前位的差、C为当前位的借位,可以得到半加器的真值表如下表所示:

A

B

D

C

0

0

0

0

0

1

1

1

1

0

1

0

1

1

0

0

通过真值表,可以得到D和C的逻辑表达式为(其中红色部分为取非结果)

D = AB + AB = A  B

C = AB


因此,D可以使用异或门求得,C可以使用与门和非门求得。根据上述分析所设计的电路图如下图所示:

 

经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 0,B = 1为例进行展示,电路的显示结果如下图所示:


5.9 设计1位全减器

 

令A为被减数、B为减数、Ci为高位的借位、D为当前位的差、Co为当前位的借位,可以得到全加器的真值表如下表所示:

Ci

A

B

D

Co

0

0

0

0

0

0

0

1

1

1

0

1

0

1

0

0

1

1

0

0

1

0

0

1

1

1

0

1

0

1

1

1

0

0

0

1

1

1

1

1

通过真值表,可以得到S和Co的逻辑表达式为(其中红色部分为取非结果)

D = ABCi + ABCi + ABCi + ABCi = A  B  Ci

Co = ABCi + ABCi + ABCi + ABCi = AB + ACi + BCi


因此,D可以使用异或门求得,Co可以使用与门、非门和或门求得。

根据上述分析所设计的电路图如下图所示:


经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 1,B = 1,Ci = 1为例进行展示,电路的显示结果如下图所示:

 

 

5.10 设计4位全减器


4位全减器可以通过4个1位全减器串行连接组成。通过对1位全减器进行封装后,可以将其作为自设元件插入到电路当中。通过对1位全减器进行接口调整和封装后,其左侧有三个输入端口,从上至下依次是被减数A、减数B、高位的借位Ci,同时其右侧有两个输出端口,从上至下依次是当前位的差D、当前位的借位Co。最终的封装结果如下图所示:

 

    设置串行连接组成的4位全减器的时候,需要将高位全减器的Co端与低位全减器的Ci端相连接。同时,如果A和B的差值为正数,则输出结果为原码;如果A和B的差值为负数,则输出结果为补码。


根据上述分析所设计的电路图如下图所示:


经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 0001,B = 0010,Ci = 0为例进行展示,电路的显示结果如下图所示:

 

 

5.11 设计8位全减器


8位全减器可以通过2个4位全减器串行连接组成。通过对4位全减器进行封装后,可以将其作为自设元件插入到电路当中。通过对4位全减器进行接口调整和封装后,其左侧有三个输入端口,从上至下依次是被减数A的其中四位、减数B的其中四位、高位的借位Ci,同时其右侧有两个输出端口,从上至下依次是当前四位的差D、当前位的借位Co。最终的封装结果如下图所示:

 

    与设计4位全减器时的思路类似,设置串行连接组成的8位全减器的时候,需要将高四位全减器的Co端与低四位全减器的Ci端相连接。同时,如果A和B的差值为正数,则输出结果为原码;如果A和B的差值为负数,则输出结果为补码。

根据上述分析所设计的电路图如下图所示:


经过仿真模拟A、B的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 0000 0000,B = 0000 0001,Ci = 0为例进行展示,电路的显示结果如下图所示:

 

5.12 设计通用寄存器

在本实验中,需要有两个位宽为8的通用寄存器,分别命名为D1和D2。外部接口需要设置时钟信号Clock、复位信号Reset、数据输入端Input、数据输出端Output、输出使能端Enable等。

(1)设计输出使能控制元件

在本实验中,预设当Enable = 1时,允许读出寄存器中的数据;当Enable = 0时,不允许读出寄存器中的数据,默认输出空值0000 0000。因此,需要将输出使能信号与数据各位进行取【与】的操作,即将使能信号与数据各位同时通过与门进行判断。


根据上述分析所设计的电路图如下图所示:


经过仿真模拟A的值后,发现电路的输出结果与真值表理论分析结果一致,说明电路设计具备正确性。此处以A = 0000 0011,enable = 1为例进行展示,电路的显示结果如下图所示:

 

 

(2)设计寄存器模块

    在本实验中,通过两个数据输入端A、B分别对D2和D1寄存器进行写入操作,时钟信号来临时即写入两个数据输入端的数据进寄存器,复位信号来临时即清空两个寄存器内的数据。输出使能端通过控制输出使能控制元件来控制D2寄存器的数据的读取,与(1)处的设计一致。


通过对输出使能控制元件进行接口调整和封装后,其左侧有二个输入端口,从上至下依次是数据输入端、enable端,同时其右侧有一个输出端口,即数据输出端。最终的封装结果如下图所示:


    根据上述分析所设计的电路图如下图所示:

 

 

    为了说明电路设计具备正确性,此处以A = 0000 0011,B = 0000 0001为例依次进行写入、读取、重置的操作展示,电路的显示结果如下图所示:


写入:


读取:

 

 重置:

 

5.13 设计ALU

(1)ALU的简介

ALU,即算术逻辑运算单元。ALU 的主要功能是对输入到ALU的两个数进行加法、减法等操作。ALU 内部包括8位加法器、减法器等部件。

ALU的模块接口如下表所示:

信号

方向

描述

A

输入

参与ALU运算的第一个值,来自寄存器A

B

输入

参与ALU运算的第二个值,来自寄存器B

EU

输入

ALU进行加法运算

SU

输入

ALU进行减法运算

Result

输出

ALU计算的结果

(2)设计ALU各模块

根据ALU的运算控制表可知,ALU中需要设计输入选择器、8位逻辑或运算、8位逻辑与运算、8位加法运算、8位减法运算等部件。

(3)设计8位逻辑或运算

    8位逻辑或运算,只需要将A和B的每一位分别做或运算后,再合并成Z进行输出即可。
根据上述分析所设计的电路图如下图所示:

 
为了说明电路设计具备正确性,此处以A = 0000 0011,B = 0000 0001为例进行展示,电路的显示结果如下图所示:

 

(4)设计8位补码转换器

    由于可以通过原码转补码的操作来运行减法运算,因此在此处设计8位补码转换器来辅助ALU的运算功能的实现。负数的补码为符号位不变,其余部分取反加1。根据此性质,可以先对输入数据的每一位与1做异或操作,执行取反的部分,再通过8位加法器加上1,即可得到补码。


根据上述分析所设计的电路图如下图所示:


为了说明电路设计具备正确性,此处以B = 0000 0001为例进行展示,电路的显示结果如下图所示:

 

(5)组装为ALU

    通过功能选择端的数值,控制S1和S0的数值,再让其通过数据选择器进行筛选,从而选择ALU执行的运算功能。当选择减法运算时,通过8位补码转换器,将减法变更为加法运算。同时,在输出端增加一个判断输出是否为0的部件,以便更好地展示ALU的输出数值。

根据上述分析所设计的电路图如下图所示:


令S0、S1为ALU的输入选择端,通过控制S0和S1的值即可控制ALU的运算模式,其运算控制表如下表所示:

S1

S0

ALU运算

0

0

A 加 B

0

1

A 减 B

1

0

A 或 B

1

1

A 与 B

为了说明电路设计具备正确性,此处依次进行ALU中加法、减法、或、与运算的展示,电路的显示结果如下图所示:
加法:

 S1 = 0,S2 = 0,令A = 0000 0001,B = 0000 0011.

减法:
S1 = 0,S2 = 1,令A = 0000 0001,B = 0000 0011.

 

或:
S1 = 1,S2 = 0,令A = 0000 0001,B = 0000 0011

 

与:
S1 = 1,S2 = 0,令A = 0000 0001,B = 0000 0011

 

5.14 设计控制器

控制器是CPU的核心部件,其可以通过设置不同的值来控制各项功能的操作。在本实验中,需要设计两个解复用器、两个ALU选择控制端、一个时钟信号控制端,共计五个控制端口。

控制器需要生成对CPU 中数据通路进行控制的控制信号,即取指、译码、取数、运算、输出结果等功能。在本实验中,指令与其所对应的OP字段如下表所示:

指令

OP字段

LDA 9H

0000 1001

ADD AH

0001 1010

ADD BH

0001 1011

OUT

1110 ****

HLT

1111 ****

通过各个控制端口的真值表,可以获得其逻辑表达式,从而方便使用基本的门电路进行搭建。令高四位分别位S4、S3、S2、S1,则可以得出各个控制端口的逻辑表达式为(其中红色部分为取非结果)

ALU选择控制端1 = S2 + S3

ALU选择控制端2 = S3

解复用器控制端1 = S4

解复用器控制端2 = S4 + S3 + S2

时钟信号控制端 =  S4 + S3 + S2 + S1


根据上述分析所设计的电路图如下图所示:

 

5.15 设计基于自设元件所组装的CPU

CPU 受时钟信号的控制循环地执行指令,且由数据通路和控制器组成。数据通路中包含组合逻辑单元和状态单元。其中,组合逻辑单元用于对数据进行处理,包括ALU、位扩展器、数据选择器等;状态单元由寄存器RF和2个只读存储器 ROM 组成。在本实验中,数据通路为非总线式单周期数据通路。CPU通过给 ROM 中预置指令来达到预期的工作效果。CPU的输入端为时钟信号,输出端为八个发光二极管和一个8位的输出引脚。


根据上述分析所设计的电路图如下图所示:

 

六、8位模型计算机的测试

(1)理论分析

本实验中时序情况下的指令与地址的对应关系如下表所示:

源程序

指令字段

ROM预置

LDA 9H

0000 1001

09 H

ADD AH

0001 1010

1A H

ADD BH

0001 1011

1B H

OUT

1110 0000

E0 H

HLT

1111 0000

F0 H

/

0000 0000

00 H

数据在不同进制下的对应关系如下表所示:

数据(十进制)

二进制

十六进制

16->09 H地址的数据

0001 0000

10 H

20->1A H地址的数据

0001 0100

14 H

24->1B H地址的数据

0001 1000

18 H

分析源程序可知,最终的计算结果为16 + 20 + 24 = 60 = 0011 1100 H.

(2)实际测试
1:加载09H单元的数据。


2:加上1A单元的数据。

 


3:加上1B单元的数据。


4:输出运算结果。


5:停机。

 

 

七、实验心得

在本次实验中,从一开始一股脑子地逐个设计全减器和全加器,到发现能够使用Logisim自带的加法器,再到设计循环累加器实现在实验课中所遇到的AR1_INC的自增功能,再到结合实验课中的ALU的特性设计通用寄存器等元件,我不断地对所设计的CPU进行优化和改进工作,最终实现了一款简易的8位模型计算机。


所建的所有电路或集成元件如下图所示:

 

俗话说:实践出真知。我虽然在本次实验中花费了较多的时间和精力(特别是在考试月内逐步实现各个部分的功能),但是对计算机组成原理有了更加深刻的认识和理解,也算是一种痛并快乐着的生活吧。最后,我也非常感谢周兄等前辈的指与导帮助,让我能够在截止时间前完成本次项目。

八、其他琐碎的经验杂谈

    本部分将补充使用Logisim的一些与技巧,进行一定的归纳总结工作。如果有错误的地方或更加便捷的地方,希望老师和助教多担待。

8.1 ROM的内存设置

第一步:点击只读存储器ROM。


第二步:在左下角处点击【内容】,进行内存的编辑。

 


第三步:点击需要修改的存储单元,依次输入高位和低位的信息,并注意该存储单元为16进制表示的。

 

第四步:修改完成后,点击关闭窗口即可。


第五步:观察到电路中的ROM内存已经被修改,表示操作完毕。

 

8.2 编辑集成后的电路外观

第一步:右键点击所需要集成的元件。


第二步:点击【编辑电路外观】。


第三步:拖拽边框、端口、曲线等外观至理想状态。同时,长按端口时,在右下角会出现对应的端口在电路中的位置。

第四步:点击ctrl+s,进行保存。

8.3 在新电路中添加集成元件

第一步:点击目标的集成元件。

第二步:左键保持按下状态,拖拽到新电路中的预设位置。

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

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

相关文章

Python爬取影评并进行情感分析和数据可视化

Python爬取影评并进行情感分析和数据可视化 文章目录 Python爬取影评并进行情感分析和数据可视化一、引言二、使用requestsBeautifulSoup进行影评的爬取1、分析界面元素2、编写代码 三、情感分析1、数据预处理2、情感分析3、数据可视化 一、引言 前几天出了《航海王&#xff1…

delete 清空表之后,磁盘空间未发生变化?

上篇文章结尾和小伙伴们留了一个小问题,就是关于 optimize table 命令,今天我想花点时间再来和小伙伴们聊一聊这个话题。 1. 删除空洞 1.1 案例展示 首先我们先来看这样一个例子。 我现在有一个名为 sakila 的数据库,该库中有一个 film 表…

x宝评论抓取

#某宝评论接口sign参数逆向 1.接口速览 多次请求发现,t为时间戳,sign为加密参数,盲猜和data、t有关,sign为32位,盲猜是字符串的32位的MD5 2.搜索js代码 这里为搜索的是appKey,就找到了sign,然…

【CSS】常见的选择器

1.标签选择器 语法 标签 { }作用 标签选择器用于选择某种标签比如 选择p标签,并设置背景颜色 p { background-color:yellow; }例子 选择div标签,并将其字体大小设置为100px,字体设置为"微软雅黑",文字颜色设置为r…

UDP协议和TCP协议

目录 UDP TCP 通过序列号与确认应答提高可靠性 为什么TCP是三次握手 为什么是四次挥手 超时重传机制 流控制 利用窗口控制提高速度 窗口控制与重发控制 拥塞控制 延迟确认应答 捎带应答 UDP UDP是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。…

从零开始,5分钟轻松实现Spring Boot与RabbitMQ的无缝集成

🌏 环境 docker v4.16.2springboot 2.7.0RabbitMQ 3.9.1 rabbitmq_delayed_message_exchange 3.9.0 ps:代码地址 gitee 🪜 服务架构 使用maven多模块,将生产者、消费者分别以springboot项目启动,两者通过RabbitMQ…

面试总结个人版

一、面试题 java 集合 , spring springmvc springboot springcloud 数据库相关的, redis 相关 ,mq 相关 ,结合业务的场景题 1、part one 集合 HashMap底层原理 HashMap是基于哈希表的Map接口的非同步实现。元素以键值对的形式存…

AI-Prompt 1.0 版简介公测!你的AI提示词网站!

提示词(Prompt) 是什么? 在 AI 大模型中,一个 prompt 是一个输入文本,用于触发模型生成输出。例如,当我们向一个 AI 大模型提交需求时,我们的需求就是一个 prompt。 在介绍产品之前,…

CoreDX DDS应用开发指南(4)DDS实体h和主题

6 DDS实体 DDS标准定义了一个体系结构,该体系结构表示构成DDS API实体的面向对象模型。这些实体充当中间件和应用软件之间的接口。为了开发支持DDS的应用程序,开发人员必须创建、交互并销毁这些DDS实体。 本章概述了DDS实体和相关概念。 6.1 DDS实体层次结构 构成DDS API的主…

OpenELB 在 CVTE 的最佳实践

作者:大飞哥,视源电子股份运维工程师, KubeSphere 社区用户委员会广州站站长,KubeSphere Ambassador。 公司介绍 广州视源电子科技股份有限公司(以下简称视源股份)成立于 2005 年 12 月,旗下拥…

[7]PCB设计实验|认识常用元器件|电容器|19:00~19:30

目录 一、电容器的识别 电容的应用 1. 电容有通交流阻隔直流电的作用 2. 有滤波、耦合、旁路作用等 3. 有些电容是有极性,有些是没有极性 二、常见电容器 1. 贴片电容 a、材质瓷片 b、材质钽介质 c、材质电解质 2. 手插电容 a、瓷片电容 b、聚脂电容 …

Windows命令行查找并kill进程及常用批处理命令汇总

Windows命令行查找并kill进程及常用命令汇总 打开命令窗口 开始—->运行—->cmd,或者是 windowR 组合键,调出命令窗口。 cmd命令行杀死Windows进程方法 1、根据进程名称批量kill 1)、执行tasklist|more检索进程 2)、执…

使用OpenAI创建对话式聊天机器人

引言 在当今的技术世界中,人工智能(AI)的发展迅猛,为我们带来了许多令人兴奋的创新。其中,自然语言处理(NLP)领域的进展使得开发对话式聊天机器人成为可能。OpenAI是一家领先的人工智能研究实验…

常见的JS存储方式及其特点

在前端开发中,经常需要在浏览器端存储和管理数据。为了实现数据的持久化存储和方便的访问,JavaScript提供了多种数据存储方式。本文将介绍几种常见的前端JS数据存储方式及其特点。 1. Cookie Cookie是一种小型的文本文件,由浏览器保存在用户…

如何利用google的protobuf设计、实现自己的RPC框架

一、前言 这篇文章我们就来聊一聊 RPC 的相关内容,来看一下如何利用 Google 的开源序列化工具 protobuf,来实现一个我们自己的 RPC 框架,内容有点长,请耐心看完。 序列化[1]:将结构数据或对象转换成能够被存储和传输&…

基于javaweb jsp+servlet实验室设备管理系统的设计与实现

一.项目介绍 本系统分为 超级管理员、老师、学生三类角色 超级管理员:通知管理、维护用户信息、实验室管理(负责维护实验室、预约实验室)、设备管理(维护技术参数、维护运行数据、维护电子文档)、设备维修管理&am…

JavaScript 教程---互联网文档计划

学习目标: 每天记录一章笔记 学习内容: JavaScript 教程---互联网文档计划 笔记时间: 2023-6-5 --- 2023-6-11 学习产出: 1.入门篇 1、JavaScript 的核心语法包含部分 基本语法标准库宿主API 基本语法:比如操作符…

【深入理解函数栈帧:探索函数调用的内部机制】

本章我们要介绍的不是数学中的函数&#xff0c;而是C语言中的函数哟&#xff01; 本章重点 了解汇编指令深刻理解函数调用过程 样例代码&#xff1a; #include <stdio.h> int MyAdd(int a, int b) {int c 0;c a b;return c; }int main() {int x 0xA;int y 0xB;int…

N皇后问题

1题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。…

电商--抢购总结

文章目录 业务流程业务难点技术难点技术方案技术方向具体落地客户端流控网关流控容器流控后端接口流控数据库流控 流控总结优化读取加速异步化流程处理系统扩容 压测监控 总结参考文献 业务流程 客户端抢购流程中会涉及到商品数据的读取用于商品展示&#xff0c;运营活动数据的…
最新文章