当前位置: 首页 > news >正文

【 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


http://www.mrgr.cn/news/58747.html

相关文章:

  • 人工智能:未来生活与工作的变革者
  • Spring Cloud微服务:构建现代应用的新基石
  • element ui中el-image组件查看图片的坑
  • 集合框架17:Map集合的实现类、TreeMap使用
  • 【23CSPJ普及组】一元二次方程(uqe)
  • 网络安全证书介绍
  • 数据结构------手撕顺序表
  • 深入解析 Lombok 的实现原理:以 @Builder 为例的实战演示(三)
  • 计算机毕业设计Python+大模型微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
  • 深度解析跨境支付之跨境支付与国内支付对比
  • 《C++求解地球可持续发展下的最大养活人数问题》
  • HCIP-HarmonyOS Application Developer 习题(十九)
  • 希尔排序的增量和缩小增量问题
  • Vue 如何批量注册自定义指令
  • 欧拉函数(模板)
  • input子系统中读取流程解析
  • windows DLL技术-动态链接库搜索
  • LeetCode904.水果成篮
  • uniapp 发起post和get请求!uni.request(OBJECT)
  • Typora 、 Minio and PicGo 图床搭建
  • 【高级IO】IO多路转接之select
  • 代码随想录第九天|151.翻转字符串里的单词、卡码网:55.右旋转字符串、28. 实现 strStr() 、459.重复的子字符串
  • 《西安科技大学学报》
  • 我谈Canny算子
  • windows中git无法通过ssh连接github
  • 【Git】将本地代码提交到github仓库