前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【旧文重发 | 02】IC基础知识

【旧文重发 | 02】IC基础知识

作者头像
空白的贝塔
发布2022-04-07 10:16:10
6140
发布2022-04-07 10:16:10
举报
文章被收录于专栏:摸鱼范式

[21] 什么是竞争?什么时候会出现?如何避免?

当输出取决于不同信号的顺序或者时序时,被称为竞争。竞争可以分为两种

  1. 实际的硬件中的竞争
  2. 仿真行为中的竞争

实际硬件中的竞争:以SR锁存器为例,当SR都是1的时候,输出为1,此时如果SR同时变成0,那么Q和Q'就会进入竞争的情况。可以通过添加合适的逻辑避免。

仿真行为中的竞争:例如下面的代码

代码语言:javascript
复制
always @(posedge clk or posedge reset)
    if (reset) X1 = 0; // reset
    else X1 = X2;
always @(posedge clk or posedge reset)
    if (reset) X2 = 1; // reset
    else X2 = X1;

由于使用了阻塞赋值,便会发生竞争的情况,通过改为非阻塞赋值可以解决

[22] 用2:1mux实现D触发器
[23] 用D触发器实现T触发器

T触发器,T为0时输出不变,1时翻转。写出真值表就能看出来,将输入和Q异或再输入到D端。

[24] 用JK触发器实现D触发器

J=D,K=D'

[25] 行波进位加法器和超前进位加法器的区别是?

行波进位加法器:

结构类似于我们拿笔在纸上做加法的方法。从最低位开始做加法,将进位结果送到下一级做和。由于本级的求和需要等待前一级的进位结果才可以得到,所以对于两个N-bit的求和。即使有N个一位的全加器,也需要N个延迟。超前进位加法器:

事实上,在以下两种情况中,Ci=1:

  1. Ai和Bi都为1
  2. Ai和Bi有一个为1,且Ci-1为1

其对应的表达式为

递归后

可以看出每一级的进位信号可以不通过上一级的结果产生,只与输入有关系。因此减少了时间。

[26] 实现一个32bit寄存器需要几个flip-flop?

一个FF存储一bit信息,因此需要32个FF。

[27] mealy型FSM和moore型FSM有什么区别?

mealy型FSM的输出和当前的状态以及当前的输入有关系。

moore型FSM的输出只和当前的状态有关系。

[28] 九个状态的记录最少需要几个FF?

2^3 < 9 < 2^4,因此是4个

[29] 使用尽可能少的DFF实现二分频和四分频

二分频:

四分频:

Computer Architecture

[30] RISC和CISC的区别是什么?
  • RSIC:精简指令集。CISC:复杂指令集
  • RISC结构具有比较少的指令,这些指令是简单的指令(固定长度的指令和较少的寻址模式)。CISC结构具有更多的指令,更加复杂,可变长度指令和更加多的寻址方式
  • RISC具有较小的指令,硬件上相对没有那么复杂。CISC使用更加复杂的硬件来解码和分解复杂的指令。因此RISC更加侧重软件,CSIC更加侧重硬件
  • CISC具有更加复杂的指令,因此可以使用更加少的RAM来存储编程指令。相对的,RISC需要更加多的RAM来存储指令
  • RISC的指令通常需要一个周期完成,而CISC可以能需要多个周期才能完成,具体取决于指令的复杂性。因此在RISC中可以进行流水线化。
  • RISC通过减少每条指令的周期数来提高性能,而CISC通过减少每条程序的指令数来提高性能。CISC支持单条指令完成从内存读取,执行操作,写回内存的操作(mem2mem操作)。而RISC完成则需要三个指令。
[31] 冯诺依曼结构和哈佛结构有什么区别?
  • 冯诺依曼结构中,指令和数据存储在同一个存储器中。CPU读取数据和指令使用同一条总线,具有存储数据和指令的统一缓存。
  • 哈佛结构中,数据和指令是分开存储的,可以使用两条不同的总线同时访问数据和指令,指令和数据都具有单独的缓存。
[32] 解释内存存储中的Little Endian 和 Big Endian的概念

字节顺序是指字节在内存中的存储顺序。数据在内存中通常是按照字节寻址的,但是大多数计算即通常采用32位(4个字节)存储操作数的。因此,为了将一个字节存在存储器中,由两种方式:

  1. 高字节存在低地址中,这称之为Big Endian
  2. 低字节存在低地址中,这称之为Little Endian

例如,当cpu向地址0x1000中写入0xDDCCBBAA时,两种方式就会出现差异

[33] SRAM和DRAM的区别是什么?

DRAM:Dynamic Random Access Memory。动态随机存储,数据以电荷的形式存储,每个存储单元是由晶体管和电容组成的,数据存在电容中。DRAM是易失性设备,电容会因为漏电而流失电荷,所以需要定时刷新。

SRAM:Static Random Access Memory。静态随机存储,不需要属性,只需要电源即可,SRAM的存储单元由六个晶体管组成,因此与DRAM相比,占用面积更加多。

SRAM速度快,成本搞,常用于高速缓存。DRAM密度小,速度慢,常用于主存储器

[34] 对于256KB的内存,如果按字节寻址,需要多少位的地址线?

256KB=2^8*2^10Bytes,需要18位地址线

[35] CPU中不同类型的寄存器有什么区别?
  • Program Counter (PC):保存当前正在执行的指令的地址
  • Instruction Register (IR):保存当前正在执行的指令的寄存器。(PC所指向的地址上的值)
  • General Purpose Registers:通用寄存器是用于存储程序所需要的数据,通用寄存器的数量由体系结构定义,并可以由软件用于运行期间零是存储数据。
  • Stack Pointer Register (SP):堆栈指针寄存器用于存储压入队长的最新数据的地址。常见的用途是存储子函数调用时的返回地址。
[36] 解释计算机架构中的流水线

流水线技术是在单个处理器中实现指令集并行的技术。将基本的指令周期拆分为多个阶段,无需等待每条指令完成,并行执行不同的步骤,在一条指令结束之前开始下一条指令。流水线能投提高指令的吞吐率,但是并不能减小指令的指令时间。

[37] 什么是pipeline hazard?处理器中有几种pipeline hazard?

pipeline hazard是指由于某些原因下一条指令无法执行的情况。有三种类型的hazard:

  1. Structural Hazards:由于硬件资源不足产生的。比如如果设计结构中只有一个浮点执行单元,每次执行都需要两个周期的时间,那么当程序中出现背靠背的浮点指令时会导致流水线停止。除此之外内存和缓存的访问也会导致Structural Hazards
  2. Data Hazards:由于前后指令数据的依赖性而造成的hazard
  • A、RAW:先读后写register,ture data dependence
  • B、WAW:先写后写register,output data dependence
  • C、WAR:先写后读register, anti-data dependence
  1. Control Hazards:当碰到跳转指令时,processor会stall一个cycle。因为processor在处理指令时会分两个stage:取指令和解码指令。当一条指令进入到解码阶段时,才会被发现需要跳转,所以在取指令阶段 的那条指令会被废掉,故浪费掉一个cycle。
[38] 如何避免三种pipeline hazard?
  1. Structural Hazards:将一个function unit切分成更小的stage或对设计相同功能的硬件等,总之,就是让硬件资源够用。
  2. Data Hazards:A情况是真正的数据依赖,会产生hazard,可以用forwarding技术来减少或消除它;而B和C是在当指令顺序被compiler或者是硬件调整后才会出现的数据依赖。如果出现了B和C的情况,可以有一种技术来消除它,叫做register renaming。
  3. Control Hazards:可以在program中加入likely()or unlikely()来帮助compiler预测taken or not taken的可能性。另外,compiler可以通过delayed-branch的技术来消除branch hazard,但是该技术很少用在很长的pipeline中。最后,可以通过硬件的技术消除Brach hazard。以上的技术都是compiler或hardware的技术,programmer可以不关心,但好的if语句应该 如下:
代码语言:javascript
复制
if(unlikely(condition))  
{  
 几率小  
}  
else  
{  
 几率大  
}  
注意:将几率大的语句放在not taken下面,将几率小的语句放在taken下,这样会节省4个
cycle左右(由pipeline的深度决定)。另外,还有一种写法就是将unlikely改为likely,将几率大的和几率小的对调,这种方法比第一种方法要慢或持平(至于原因有compiler的原因,有pipeline的原因,所以它依赖于compiler和chip的设计)。
[39] 如果一个流水线由十个阶段,每个阶段需要1ns执行。假设没有hazards,那么处理100个数据需要多久?

第一个数据需要10ns完成,此后1ns完成一个数据的处理,因此总时间位10+99=109ns

[40] 指令有多少种寻址方式?
  1. 立即数寻址,操作数作为指令的一部分
代码语言:javascript
复制
add r0 r1 0x12 将r1+0x12的结果存在r1
  1. 直接寻址,操作数的地址直接出现在指令中
代码语言:javascript
复制
load r0 0x10000 将地址0x10000的数据存到r0中
  1. 寄存器寻址,操作数被存在寄存器中,寄存器的名字出现在指令中
代码语言:javascript
复制
mul r0, r1 , r2 将r1*r2的结果存在r0中
  1. 偏移量寻址,操作数的地址由一个寄存器的数据加上一个立即数的偏移量得到
代码语言:javascript
复制
load r0 r1 offset r1包含了及地址,r1+offset才是真实的地址
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 摸鱼范式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [22] 用2:1mux实现D触发器
  • [23] 用D触发器实现T触发器
  • [24] 用JK触发器实现D触发器
  • [25] 行波进位加法器和超前进位加法器的区别是?
  • [26] 实现一个32bit寄存器需要几个flip-flop?
  • [27] mealy型FSM和moore型FSM有什么区别?
  • [28] 九个状态的记录最少需要几个FF?
  • [29] 使用尽可能少的DFF实现二分频和四分频
  • Computer Architecture
    • [30] RISC和CISC的区别是什么?
      • [31] 冯诺依曼结构和哈佛结构有什么区别?
        • [32] 解释内存存储中的Little Endian 和 Big Endian的概念
          • [33] SRAM和DRAM的区别是什么?
            • [34] 对于256KB的内存,如果按字节寻址,需要多少位的地址线?
              • [35] CPU中不同类型的寄存器有什么区别?
                • [36] 解释计算机架构中的流水线
                  • [37] 什么是pipeline hazard?处理器中有几种pipeline hazard?
                    • [38] 如何避免三种pipeline hazard?
                      • [39] 如果一个流水线由十个阶段,每个阶段需要1ns执行。假设没有hazards,那么处理100个数据需要多久?
                        • [40] 指令有多少种寻址方式?
                        相关产品与服务
                        对象存储
                        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档