目 录
前 言 5
第1章 绪论 6
1.1 课题背景 6
1.1.1 研究背景 6
1.1.2研究内容 7
1.2 电路设计流程 8
1.3 主要工作以及任务分配 10
1.3.1主要工作 10
1.3.2 任务分配 10
第2章 版图基础知识 11
2.1 版图的设计简介 11
2.1.1 版图的概念 11
2.1.2 版图中层的意义 11
2.2 CMOS工艺技术 14
2.2.1概述 14
2.2.2 CMOS工艺的一些主要步骤 15
2.2.3 CMOS制造工艺的基本流程 16
2.3 设计规则 18
2.4 MOS集成运放的版图设计 22
第3章 28nm的CMOS低压低功耗压控振荡器简介 23
3.1 概述 23
3.2两级28nm的CMOS低压低功耗压控振荡器的优点 24
3.3 两级运算放大器原理简单分析 24
第4章 28nm的CMOS低压低功耗压控振荡器的仿真 27
4.1 概述 27
4.2 MOS运算放大器技术指标总表 27
4.3仿真数据 29
4.3.1 DC分析 29
4.3.2测量输入共模范围 30
4.3.3 测量输出电压范围 31
4.3.4 测量增益与相位裕度 33
4.3.5 电源电压抑制比测试 34
4.3.6 运放转换速率和建立时间分析 36
4.3.7 CMRR的频率响应测量 38
第5章 算放大器版图设计 40
5.1 Cadence使用说明 40
5.2 版图设计 42
5.3 CMOS运放版图 43
第6章 总 结 44
参考文献 44
致谢词 45
1.3 主要工作以及任务分配
1.3.1 主要工作
(1)资料搜集与整合:广泛搜集关于28nm CMOS低压低功耗压控振荡器以及模拟集成电路版图设计的文献资料,确保资料的全面性和时效性。
(2)电路原理分析与组件筛选:深入分析28nm CMOS低压低功耗压控振荡器的电路构成,明确其工作原理,并对相关电路组件进行细致筛选,确保电路性能的优化。
(3)理论与实践学习:系统学习相关参考书籍,掌握电路设计、计算方法以及版图设计的理论基础,为后续设计工作奠定坚实基础。
(4)方案论证与优选:对多种设计方案进行论证和比较,选择最优方案以确保电路的性能、功耗和稳定性满足设计要求。
(5)电路单元详细设计:基于选定方案,对电路的各个单元进行详细设计,确保各单元之间的协同工作和整体性能。
(6)电路仿真与参数优化:利用专业软件对电路进行仿真分析,通过调整参数来优化电路性能,确保电路在指定条件下的稳定工作。
(7)版图设计与迭代优化:根据电路仿真结果,进行版图设计,并通过多次迭代优化,确保版图满足设计要求,同时考虑制造的可行性和成本。
(8)DRC验证与仿真调整:对版图进行DRC(设计规则检查)验证,确保版图符合设计规范。根据验证结果对版图进行调整,并重新进行仿真验证,直至满足所有设计要求。
(9)设计总结与反思:对整个设计过程进行总结,分析设计中的亮点与不足,提出改进建议,为后续设计提供参考。
1.3.2 任务分配
(1)第3周:专注于资料的搜集与整理,确保为后续设计工作提供全面、准确的参考信息。
(2)第4周:完成设计基本原理图的绘制,并提交毕业设计开题报告,明确设计思路、方法和预期目标。
(3)第5周至第8周:集中精力进行版图设计,确保版图符合设计要求,并考虑制造的可行性和成本。
(4)第9周至第14周:基于版图提取的参数进行软件仿真,通过多次迭代调整版图,确保电路性能满足设计要求。这一过程中需要不断对比仿真结果与设计参数,进行必要的修改和优化。
(5)第15周至第16周:撰写设计报告,详细记录设计过程、仿真结果、版图设计以及DRC验证等内容,确保报告内容完整、规范。
(6)第17周:准备答辩,对设计成果进行展示和讲解,接受专家的提问和点评,进一步完善设计。
1.4 小结
本小节主要介绍了CMOS运放的研究背景以及研究内容,还介绍了模拟集成电路设计的基本流程。使我们对设计模拟集成电路有了初步的了解。最后指出了本次设计主要工作以及主要内容。
%%%%%%%% Pre_Pos spike pairs with different frequencies
function lerns = pairfreq(param)
th=param(5);
dx=0.01;
delta_t=10;
alp=param(6);
freq = [1 10 20 40 50];
pair_num = 2; % This can be 60, but in that case the optimization should be done again and optimized values will be different.
lerns = zeros(1,2*length(freq));
for j=1:length(freq)
for i=1:(pair_num-1)
bounds=(1000/freq(j))*pair_num+100;
x=[-100:dx:bounds];
% This part is basically to make the mult output.
triplet_pos_pre = mult(f_actP_triplet_pos(x-delta_t-((1000/freq(j)))*(i-1),param(3),param(4)).*f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)));
sec_pos = f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2));
for k=1:length(triplet_pos_pre)
if sec_pos(k) <= 0
triplet_pos_pre(k)=0;
end
end
lern(i) = area_th(f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+triplet_pos_pre ...
,th,dx,alp);
lerns(j) = lerns(j) + lern(i);
%figure;
%plot(f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2)));
%hold on;
%plot(f_actP_pre(x-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)),'r');
%plot(f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)),'r');
%plot(f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2)));
%plot(f_actP_triplet_pos(x-delta_t-((1000/freq(j)))*(i-1),param(3),param(4)));
%plot(triplet_pos_pre,'m');
end
end
delta_t=-10;
for j=1:length(freq)
for i=1:(pair_num-1)
bounds=(1000/freq(j))*pair_num+100;
x=[-100:dx:bounds];
% This part is basically to make the mult output.
triplet_pos_pre = mult(f_actP_triplet_pos(x-delta_t-((1000/freq(j)))*(i-1),param(3),param(4)).*f_actP_pre(x-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)));
sec_pos = f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2));
for k=1:length(triplet_pos_pre)
if sec_pos(k) <= 0
triplet_pos_pre(k)=0;
end
end
lern(i) = area_th(f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2))-f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)) ...
+triplet_pos_pre ...
,th,dx,alp);
lerns(j+length(freq)) = lerns(j+length(freq)) + lern(i);
%figure;
%plot(f_actP_pos(x-delta_t-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2)));
%hold on;
%plot(f_actP_pre(x-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)),'r');
%plot(f_actP_pre(x-((1000/freq(j)))-((1000/freq(j)))*(i-1),33.7,16.8,param(2),param(1)),'r');
%plot(f_actP_pos(x-delta_t-((1000/freq(j)))-((1000/freq(j)))*(i-1),16.8,33.7,param(1),param(2)));
%plot(f_actP_triplet_pos(x-delta_t-((1000/freq(j)))*(i-1),param(3),param(4)));
%plot(triplet_pos_pre,'m');
end
end