时钟周期 机器周期 指令周期

时钟周期:也称之为振荡周期。这里的振荡就像钟表一样,振荡一次走1秒,连续的振荡产生振荡脉冲,钟表持续走下去。所以时钟周期是一个时间向量。具体的计算:时钟频率的倒数,这里的时钟频率指的是晶振的频率,因为时钟周期的产生是依靠晶振实现的,所以一般单片机CPU外围电路必须加晶振,有些CPU内带振荡,实际这个振荡并非晶振产生的,而是由振荡电路产生的,所以它们是不一样的东西。如果说一个晶振的频率是12Mhz(兆赫兹),那么它的时钟周期就是1/12us(纳秒),也就是12的倒数,单位是:纳秒。所以说选择晶振频率越大,CPU执行速度越快。当然也不是可以选择无限大,这里需要具体的参考CPU数据手册,一般都有上限值。晶振产生的波形是正弦波,连续的正玄波就是脉冲,而CPU执行需要这样的脉冲信号来进行指令的读取执行等操作。CPU的时钟周期也是CPU完成一项原子性操作的时间向量,也就是说:CPU在1个时钟周期内只能做一件事,比如说读指令。不过有些CPU架构在一个时钟周期内并不能完成读指令,所以又引进了一个概念:机器周期。


机器周期:1个机器周期内只能做一件原子性操作:取指令,寄存器读、寄存器写、等。1个机器周期等于若干个时钟周期,这里的比例关系需要看具体的CPU架构,比如说51单片机用的CPU就是1个机器周期等于12个时钟周期。然后就可以具体的计量一个原子性操作具体需要多长时间,比如说取指令在某个CPU架构下就可能需要3个机器周期,寄存器读可能需要5个机器周期。


指令周期:一条指令执行所需要的时间,这里的时间指的是机器周期。这里的指令是指的一条完整的指令执行下来。比如说:访问指令:先取指令,然后在进行访问。这样的指令算下来就需要2个机器周期。取指令需要1个机器周期,进行访问需要1个机器周期。这个不是很好理解,就像a=1+2看着是一条指令,但是如果编译器没有优化的前提下,它映射到CPU上指令是非常多的。所以指令周期理解一下就好,意思就是一条指令完整的运行后所花的时间,这里的时间是机器周期。


晶振为什么两端老是加电容:这个是晶振设计上的要求,要想晶振起振,必须有一个负载电容。只有你的外部电路中的电容值等于晶振内部设计的负载电容值时,晶振才会发生振荡。想要深入了解晶振可以Google搜索一下相关说明。


写到这里我突然想起IO堵塞的问题,一个IO堵塞后指令是否会堵塞,不过现在想来,这是不一样的东西,一个是CPU指令的触发,一个是系统的执行问题。而且还有时间片的存在。想来不能一起考虑。


个人理解,如有错误还望指出。

AutoDeskEagle SparkFun

本博客前面文章有介绍SparkFun库,但是发现Arduino有一些电路符号依旧无法打开,比如说排针。在进行右键打开元件库的时候发现是一个叫做SparkFun.lbr的库,所以从网络上下载安装后完美打开。

屏幕快照 2019-11-16 上午1.16.27.png

上述就是SparkFun封装库里的排针。不过我发现和Eagle自带的排针封装Pinhead差不多,连尺寸我量了一下都是一样的。

AutoDeskEagle Label

首先来看别人的Label

屏幕快照 2019-11-16 上午1.01.12.png

D9、D8这些是标签的名称,标签的功能是会将网络连接到一起,前提是网络的标签名取的一致。

轮廓框的显示方式如下,选择工具面板中的label,放置到你要更改名称的网络中,然后右键查看属性。

屏幕快照 2019-11-16 上午1.05.09.png


这里将Xref勾选上就可以显示外轮廓框。Xref的意思是:外部参考。

Cam350 Apertures are used which have a size of 0

ad0c501f17bd18aad21d77e6a8effb5.png

原因:孔径表(D码表)里面存在为0的数值。

导入后,按A键查看D码表。

a266b6233effbf3c1802322125452e2.png

可以看到的确存在一个数值为0的D码。关闭这个D码表页面,然后按下D键

d4870d1efa43cf9c4aec66b2f3c040e.png

找到刚才我们寻找到为0的D码,然后点击OK。(后续的截图,所以这里为12.0)这一步相当于激活。

高亮显示:点击OK以后按下H键。

7e7677a177bca987c3bc6209539290f.png

白色线就是D码为16的位置,如果不明显,可连续按H键。

回到PCB图,进行修改,或者直接在Cam350修改。

这里看着像是边框的问题,所以我加宽了边框线。再次导入就可以了。

注意:gerber导出时候填写的参数,在你用Cam350导入的时候一定要一致,这样才不会有错位的问题出现。