DTC数字时间测量系统部分设计.docx

上传人:b****7 文档编号:8691772 上传时间:2023-02-01 格式:DOCX 页数:14 大小:393.51KB
下载 相关 举报
DTC数字时间测量系统部分设计.docx_第1页
第1页 / 共14页
DTC数字时间测量系统部分设计.docx_第2页
第2页 / 共14页
DTC数字时间测量系统部分设计.docx_第3页
第3页 / 共14页
DTC数字时间测量系统部分设计.docx_第4页
第4页 / 共14页
DTC数字时间测量系统部分设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

DTC数字时间测量系统部分设计.docx

《DTC数字时间测量系统部分设计.docx》由会员分享,可在线阅读,更多相关《DTC数字时间测量系统部分设计.docx(14页珍藏版)》请在冰豆网上搜索。

DTC数字时间测量系统部分设计.docx

DTC数字时间测量系统部分设计

摘要

 

1.经历和实践时间/数字转换器(TDC)专用集成电路设计的完整开发过程;

2.初步具备专用集成电路设计项目的开发能力;

3.培养初步的系统工程思想和合理的硬件开发的风格。

Abstract

One.Experienceandpracticetime/digitalconverter(TDC)completedevelopmentoftheASICdesignprocess;

Two.InitiallyhavethedevelopmentcapabilitiesoftheASICdesignprojects;

Three.Developinitialsystemsengineeringideasandstyleofthehardwaredevelopment.

第一章开发计划

 

1.1背景介绍

1.1.1几种主要的TDC电路介绍

❑AnalogTDC(TAC+ADC)

❑Counter-basedTDC

❑DLL-basedTDC

⏹Voltage-controlleddelayline

⏹Vernierdelayline

⏹ArrayofDLLs

⏹RCdelayline+DLL

❑CyclicTDC

❑GROTDC

❑Timeamplifier

1.1.2两级粗细TDC技术

⏹生物医学成像的时间测量需求

❑测量范围10μs

❑最小测时单位<1ns

❑通道数64

HybridTDCarchitecture

1.1.3粗细粒度转换

⏹采用计数器计数的方式来测时间双计数器结构亚稳态

1.1.4细粒度转换

⏹多相时钟生成

❑时钟采用延迟锁相环在一个时钟内锁定

❑测时单位:

Tbin=Tclk/2n

⏹由于器件失配造成的延时限制

~150ps(0.35µm)

 

1.2TDC电路介绍

1.2.1TDC概念

TDC(Time-to-DigitalConverter)时间数字转换器是在电子仪器仪表或信号处理当中将模拟信号转换成以时间表示的数字信号的仪器。

时间数字转换器输出了每一个脉冲与所设起始点相比被记录下来的时间。

时间数字转换器一般用于测量时间间隔在1纳秒到皮秒的范围时的应用。

❑用来测量和量化两个信号之间的时间差,提供这个时间差的数字信号;

❑混合信号电路,行为和特性与ADC类似

1.2.2TDC电路结构

16位格雷码计数器的设计模块

 

第二章概要设计

 

2.1设计要求:

采用Verilog硬件描述语言对16位格雷码计数器电路进行行为级建模,通过ModelSim仿真环境进行仿真,保证功能正确。

采用CMOS0.18μm工艺标准数字电路单元搭建16位格雷码计数器,并用Hspice进行仿真。

2.2开发环境

2.2.1开发工具

ModelsimSE,HSpice等

2.2.2VerilogHDL介绍

VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

  VerilogHDL语言具有下述描述能力:

设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。

所有这些都使用同一种建模语言。

此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

  VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

第三章系统分析与结构设计

3.1格雷码(GrayCode)

在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。

格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。

而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。

它在任意两个相邻的数之间转换时,只有一个数位发生变化。

它大大地减少了由一个状态到下一个状态时逻辑的混淆。

另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。

3.2组合逻辑电路中的竞争-冒险现象

在组合逻辑电路的设计分析中,经常将高低电的变化看成理想化的。

但在实验中,当信号经过电路时,由于门电路传输延迟时间

的不同,可能使电路输出端出现尖峰脉冲的现象,这种尖峰脉冲将使负载产生误动作,为此应当识别电路是否有竞争冒险现象,并采

取措施加以解决。

3.2.1竞争的产生

在没有考虑信号通过导线和逻辑门的传输延迟时间的理想情况下,门电路的输入与输出为稳定状态。

但实际情况是信号通过导

线和门电路时,都存在时间延迟;信号发生变化时也有一定的上升时间或下降时间。

我们将门电路两个输入信号同时向相反的逻辑

电平跳变(一个从1变为0,另一个从0变为1)的现象称为竞争。

由于竞争而在电路输出端可能产生尖峰脉冲的现象就称为竞争—

冒险。

这些尖峰信号又称为“毛刺”。

3.2.2竞争现象的影响

由于FPGA以及其它的CPLD器件内部的分布电容和电感对电路中的毛刺基本没有什么过滤作用,因此这些毛刺信号就会被“保留”并传递到后一级,从而使得毛刺问题更加突出。

可见,即使是在最简单的逻辑运算中,如果出现多路信号同时跳变的情况,在通过内部走线之后,就可能会产生毛刺。

而现在使用在数字电路设计以及数字信号处理中的信号往往是由时钟控制的,多数据输入的复杂运算系统,甚至每个数据都由相当多的位数组成。

这时,每一级的毛刺都会对结果有严重的影响,如果是多级的设计,那么毛刺累加后甚至会影响整个设计的可靠性和精确性。

通过对格雷码的特点分析可知,使用格雷码计数(每次计数只有一位发生变化)可以消除组合逻辑电路中可能存在的竞争—冒险现象。

3.3模块架构

第四章详细设计

4.1算法设计

二进制转化算法数学描述:

原码:

p[0~n];格雷码:

c[0~n](n∈N);编码:

c=G(p);解码:

p=F(c);书写时从左向右标号依次减小.

编码:

c=pXORp[i+1](i∈N,0≤i≤n-1),c[n]=p[n];

解码:

p[n]=c[n],p=cXORp[i+1](i∈N,0≤i≤n-1).

4.2实现举例

4.2.14位二进制计数器转换的格雷码计数器

假设这4位二进制码为

,输出格雷码为

,则我们可以得到

其表示表格如表一。

十进制

二进制

格雷码

十进制

二进制

格雷码

0

0000

0000

8

1000

1100

1

0001

0001

9

1001

1101

2

0010

0011

10

1010

1111

3

0011

0010

11

1011

1110

4

0100

0110

12

1100

1010

5

0101

0111

13

1101

1011

6

0110

0101

14

1110

1100

7

0111

0100

15

1111

1000

表一

设计电路图见图一

4.2.28位纯格雷码计数器

第五章程序编码

5.1伪格雷码计数器Verilog描述

5.1.1仿真模块

moduleCrayCnt(Clk,nRst,CntOut);

inputClk;

input[15:

0]nRst;

output[15:

0]CntOut;

integerk;

reg[15:

0]CntOut;

initial

begin

CntOut=0;

end

always@(nRst)

begin

CntOut[15]=nRst[15];

for(k=0;k<=14;k=k+1)

CntOut[k]=nRst[k]^nRst[k+1];

end

endmodule

5.1.2测试模块

timescale1ns/1ns

moduleCrayCnt_tb;

wire[15:

0]CntOut;

regClk;

reg[15:

0]nRst;

initial

begin

nRst[15:

0]=16'b0000_0000_0000_0000;

Clk=0;

#200$finish;

end

always#10Clk=~Clk;

always@(posedgeClk)

begin

nRst=nRst+1;

end

CrayCnt

DUT(

.CntOut(CntOut),

.Clk(Clk),

.nRst(nRst));

endmodule

5.2纯格雷码计数器Verilog描述

modulegraycnt(clk,nclr,q);

inputclk,nclr;

output[15:

0]q;

reg[15:

0]q;

reg[15:

0]next;

reg[15:

0]temp;

integerk;

always@(posedgeclkornegedgenclr)

begin

if(!

nclr)q<=15'b0000_0000_0000_0000;

elseq<=next;

end

always@(q)

begin

temp[15]=q[15];

for(k=14;k>=0;k=k-1)temp[k]=q[k]^temp[k+1];

if(temp[0]==1'b0)

begin

next[0]=~q[0];next[15:

1]=q[15:

1];

end

elseif(temp[1]==1'b0)

begin

next[0]=q[0];next[1]=~q[1];next[15:

2]=q[15:

2];

end

elseif(temp[2]==1'b0)

begin

next[1:

0]=q[1:

0];next[2]=~q[2];next[15:

3]=q[15:

3];

end

elseif(temp[3]==1'b0)

begin

next[2:

0]=q[2:

0];next[3]=~q[3];next[15:

4]=q[15:

4];

end

elseif(temp[4]==1'b0)

begin

next[3:

0]=q[3:

0];next[4]=~q[4];next[15:

5]=q[15:

5];

end

elseif(temp[5]==1'b0)

begin

next[4:

0]=q[4:

0];next[5]=~q[5];next[15:

6]=q[15:

6];

end

elseif(temp[6]==1'b0)

begin

next[5:

0]=q[5:

0];next[6]=~q[6];next[15:

7]=q[15:

7];

end

elseif(temp[7]==1'b0)

begin

next[6:

0]=q[6:

0];next[7]=~q[7];next[15:

8]=q[15:

8];

end

elseif(temp[8]==1'b0)

begin

next[7:

0]=q[7:

0];next[8]=~q[8];next[15:

9]=q[15:

9];

end

elseif(temp[9]==1'b0)

begin

next[8:

0]=q[8:

0];next[9]=~q[9];next[15:

10]=q[15:

10];

end

elseif(temp[10]==1'b0)

begin

next[9:

0]=q[9:

0];next[10]=~q[10];next[15:

11]=q[15:

11];

end

elseif(temp[11]==1'b0)

begin

next[10:

0]=q[10:

0];next[11]=~q[11];next[15:

12]=q[15:

12];

end

elseif(temp[12]==1'b0)

begin

next[11:

0]=q[11:

0];next[12]=~q[12];next[15:

13]=q[15:

13];

end

elseif(temp[13]==1'b0)

begin

next[12:

0]=q[12:

0];next[13]=~q[13];next[15:

14]=q[15:

14];

end

elseif(temp[14]==1'b0)

begin

next[13:

0]=q[13:

0];next[14]=~q[14];next[15]=q[15];

end

else

begin

next[14:

0]=q[14:

0];next[15]=~q[15];

end

end

endmodule

第六章测试与运行

仿真结果如下:

 

第七章开发技术总结

 

硬件设计与软件设计既有相同的地方也有很多独特的方法与技巧,通过本次实习得以锻炼一些硬件开发能力和技能:

第一、由需求分析至总体方案、详细设计的设计创造能力;

第二、熟练运用设计工具、设计原理图和Modelsim调试程序的能力;

第三、运用仿真工具测试硬件的能力;

第四、掌握常用的标准电路的设计能力;

第五、故障定位、解决问题的能力;

第六、文档写作技能;

附录:

关键技术准备与推荐参考资料

1.夏闻宇,《Verilog数字系统设计教程》第二版,北京航空航天大学出版社。

2.StephenHenzler,《Time-to-DigitalConverter》,Springer.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1