欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 【 IC每日一题】

【 IC每日一题】

2025/2/24 11:28:21 来源:https://blog.csdn.net/li_kin/article/details/143246125  浏览:    关键词:【 IC每日一题】

IC每日一题

  • 1 八股题:低功耗设计方法
    • 1.1 功耗类型
      • 1.1.1 动态功耗
      • 1.1.2 静态功耗
    • 1.2 SoC低功耗设计方法
      • 1.2.1 基于时钟clock的低功耗设计
      • 1.2.2 基于电压域voltage的低功耗设计
      • 1.2.3 多阈值库
      • 1.2.4 RTL低功耗设计
  • 2 手撕题:序列检测
    • 2.1 移位寄存器写法
    • 2.2 状态机写法

Less Is More.

1 八股题:低功耗设计方法

芯片最经常考虑的trade off: PPA;
概念背景:为什么需要低功耗设计,以手机为例,功耗越低,手机电池越耐用;功耗越低,意味着越环保、系统系统越稳定、系统越可靠、散热成本越低等;

1.1 功耗类型

在这里插入图片描述

1.1.1 动态功耗

动态功耗 = 翻转功耗 + 短路功耗;
翻转功耗即传输数据(0–>1; 1–>0的变化);
短路功耗即由短路电流引起的功耗;

1.1.2 静态功耗

静态功耗是由 漏电流引起的功耗;
在这里插入图片描述

漏电流的几部分组成:PN结反向电流;源级和漏极之间的亚阈值电流;栅极漏级漏电流;栅极和衬底之间的隧道电流;

1.2 SoC低功耗设计方法

SOC中主要功耗:时钟树、处理器和存储器;
以下这张图能够给予设计指导;
在这里插入图片描述

低功耗设计一般方法主要有以下:

1.2.1 基于时钟clock的低功耗设计

----思想:门控时钟:当某子系统不工作时,进行时钟门控掉,减少翻转;
在这里插入图片描述

可以使用DC工具自动添加时钟;

1.2.2 基于电压域voltage的低功耗设计

电压与功耗有密切的关系;通过设置多电压区域技术;
在这里插入图片描述

1.2.3 多阈值库

在进行工艺替换时,考虑选择多种阈值的cell;

1.2.4 RTL低功耗设计

  • 并行处理和流水线Pipline:通过将任务分解为多个并行的子任务,并在子任务之间插入寄存器,可以减少关键路径上的延迟,从而降低功耗。
  • 优化编码:格雷码代替二进制,减少翻转;
  • 资源共享复用: 比如存储资源;总线资源复用等;
  • 操作数隔离: APB总线在下一次传输来临之前,地址/控制信号可以不变,以此来降低功耗;

2 手撕题:序列检测

题目:检测序列比如: 1100_1101;主要有以下两种写法;

2.1 移位寄存器写法

//=======================================
//--Author  : colonel
//--Date    :10—25
//--Module  : sequence_check_det
//--Function: check a sequence
//=======================================
module sequen_check_det(
//==========================< 端口 >=========================
input wire clk,
input wire rst_n,
input wire din,
output wire det
);
//==========================< 参数 >=========================
parameter SEQUENCE_DET = 8'b1100_1101;//==========================< 信号 >=========================
reg [8 -1:0] data;//=========================================================
//-- 寄存器来确定
//=========================================================
always @(posedge clk or negedge rst_n) beginif(!rst_n) begindata <= 8'b0000_0000;end else begindata <= {data[6:0],din};end
endassign det = (data==SEQUENCE_DET) ? 1'b1 : 1'b0;endmodule);endmodule

2.2 状态机写法

题目:做序列检测1011;
状态机写法:
状态机图:


//=======================================
//--Author  : colonel
//--Date    :10—25
//--Module  : sequence_check_det
//--Function: check a sequence using FSM
//=======================================
module sequen_check_det_fsm(
//==========================< 端口 >=========================
input wire clk,
input wire rst_n,
input wire din,
output wire det
);
//==========================< 参数 >==========================
localparam SEQUENCE_DET = 4'b1011; 
localparam IDLE = 4'b0000;
localparam S1 = 4'b0001;
localparam S2 = 4'b0010;
localparam S3 = 4'b0100;
localparam S4 = 4'b1000;//==========================< 信号 >==========================
reg [3:0] sta_cur;
reg [3:0] sta_nxt;//===========================================================
//--FSM-1:fsm transition
//===========================================================
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginsta_cur <= IDLE;end else beginsta_cur <= sta_nxt;end
end//===========================================================
//--FSM-2:fsm jumb condition
//===========================================================
always @(*) begincase (sta_cur)IDLE: begin if(din==1'b1) beginsta_nxt <= S1;end else beginsta_nxt <= IDLE;endendS1: beginif(din==1'b0) beginsta_nxt <= S2;end else beginsta_nxt <= S1;endendS2: beginif(din==1'b1) beginsta_nxt <= S3;end else beginsta_nxt <= IDLE;endendS3: beginif(din==1'b1) beginsta_nxt <= S4;end else beginsta_nxt <= S2;endendS4: beginif(din==1'b1) beginsta_nxt <= S1;end else beginsta_nxt <= S2;endenddefault: beginsta_nxt <= IDLE;endendcase
end//===========================================================
//--FSM-3:fsm action
//--det logic
//===========================================================
always @(posedge clk or negedge rst_n) beginif(!rst_n) begindet <= 1'b0;end else begincase (sta_cur)IDLE: det <= 1'b0;S0  : det <= 1'b0;S1  : det <= 1'b0;S2  : det <= 1'b0;S3  : det <= 1'b0;S4  : det <= 1'b1;default: det <= 1'b0;endcaseend
endendmodule

以上是序列检测器的两种写法;
[REF]
1.https://blog.csdn.net/wangkai_2019/article/details/106854081
2.https://blog.csdn.net/qq_57502075/article/details/127084530

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词