时间:2024-07-18 来源:网络搜集 关于我们 0
来源:公众号【ZYNQ】
ID :FreeZynq
整理:李肖遥
1)INV
2)AND
3)OR
4)NAND
5)NOR
6)XOR
1.非门
2.与门
3.或门
4.与非门
5.或非门
6.异或门
1)INV
2)AND
3)OR
4)NAND
5)NOR
6)XOR
答案:NAND
(~AB) + (A~B)+(CD), 与非门可以实现 “ 与 非,与,非 ” 等功能
与非门实现异或
同步电路共享同一个时钟clk, 所有状态更新 是在 同意时刻。异步电路没有统一的时钟,状态更新不是同时发生, 异步电路主要是组合逻辑电路,用于产生地址译码器、 FIFO或RAM 的读写控制信号脉冲 . FPGA中如何实现同步时序电路的延时
通过计算器控制时延 , 对于比较小的延时 , 也可以通过触发器打一拍这样只能延时一个周期 。异步电路一般通过加buffer 、 两级与非门等 。
FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的设计中这个端口一般就是接低电平有效的复位信号rst_n。即使说你的设计中是高电平复位,那么实际综合后会把你的复位信号反向后接这个CLR端。和异步复位相比,同步复位没有用上寄存器的CLR端口,综合出来的实际电路只是把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额外增加FPGA内部的资源消耗。只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。
module synchronism_design
(input clk,input rst_n,output sys_rst_n);
reg rst_nr1, rst_nr2;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin rst_nr1 <= 1b0; rst_nr2 <= 1b0; end
else
begin rst_nr1 <= 1b1; rst_nr2 <= rst_nr1; end
end
assign sys _rst_n = rst_nr2; //active low
endmodule
线与逻辑是两个或多个输出信号相连可以实现与的功能。在硬件上,要用 OD 门来实现(漏极 开路 或者集电极开路 OC ),为了防止因灌电流过大而烧坏 OD 门,应在 OD 门输出端接一上拉电阻(线或则是下拉电阻)。动态时序分析
动态时序分析
就是通常我们所说的仿真,该仿真可以验证功能,也可以验证时序,首先确定测试向量,输入硬件模型,进行仿真。由于为了完整地测试每条路径的功能或者时序是否都满足,测试向量需要很大,也不能保证100%的覆盖率。如果到了门级的仿真将非常消耗时间。
静态时序分析
静态时序分析只能分析时序要求而不能进行功能验证。不需要测试向量,能比动态时序分析快地多的完成分析。静态时序分析只能对同步电路进行分析,而不能对异步电路进行时序分析。但是它却可以验证每一条路径,发现时序的重大问题,比如建立时间和保持时间冲突,slow path以及过大的时钟偏移。
静态时序分析的优缺点
静态时序分析可以大大提高仿真时间,并能100%覆盖所有的路径。它通过预先计算所有的延时来提高速度。包括内部门延时以及外部的线延时。静态时序分析并不是简单的把各个延时相加,而是引入真值表,分析各种输入情况下所有可能经过的路径,而且能识别flase path。但是由于在深亚微米的工艺条件下,静态时序分析不能完整的把所有影响延时的因素给包含进去,因此在关键路径方面,便可以用STA工具导出关键路径的spice网表,用门级或者管级仿真工具进行电路仿真,以确定时序的正确性。
Setup/hold time 是测试芯片对输入信号和时钟信号之间的时间要求。建立时间是指触发器的时钟信号上升沿到来以前,数据稳定不变的时间。输入信号应提前时钟上升沿(如上升沿有效)T时间到达芯片,这个T就是建立时间-Setup time。如不满足setup time,这个数据就不能被这一时钟打入触发器,只有在下一个时钟上升沿,数据才能被打入触发器。
保持时间是指触发器的时钟信号上升沿到来以后,数据稳定不变的时间。如果holdtime不够,数据同样不能被打入触发器。
tsetup <= tclk - tffpd (max)- tcomb(max)
tholdup <= tffpd (min) + tcomb (min)
将第二级信号放到最后输出一级输出,同时注意修改片选信号,保证其优先级未被修改。
同步电路的速度是指同步系统时钟的速度 , 同步时钟越快 , 电路处理数据的时间间隔越短 , 电路在单位时间内处理的数据量就愈大 。假设 Tco是输入数据被时钟打入到触发器到数据到达触发器输出端的延时时间(Tco= Tsetup+Thold);Tdelay是组合逻辑延时 。数据经Tco+ Tdelay到达第二个触发器 , 若需数据能被稳定的打入第二个触发器 , 则时钟周期需大于 Tmin=Tco+Tdelay+Tsetup,及最快时钟频率Fmax= 1/Tmin 。FPGA开发软件也是通过这种方法计算系统的最高运行速度。因为Tco和Tsetup 是由具体的器件工艺决定的 , 故设计电路时只能改变组合逻辑的延迟时间 Tdelay。由于一般同步电路都大于一级锁存,可以将较大的组合逻辑分解为较小的N块,通过适当的方法平均分配组合逻辑 ,然后在中间插入触发器,就可以避免两个触发器之间出现过大的延时,消除速度瓶颈,这样可以提高电路的工作频率。这就是 ”流水线 “ 技术的设计思想 , 及原设计速度受限部分用一个时钟周期实现 , 采用流水线技术插入触发器后 , 可以用 N个时钟周期实现,因此系统的工作速度可以加快,吞吐量加大。注意:流水线设计会在元数据通路上加入延时,另外硬件面积也会稍有增加。
竞争:当一个逻辑门的两个输入端的信号同时向相反方向变化,而变化的时间有差异的现象。冒险:在一定条件下门电路输出端的逻辑表达式简化成两个互补信号相乘或相加,即 L=A•Ā 或者 L=A+Ā, 由竞争而可能产生输出干扰脉冲的现象。
发现并消去互补相乘项,如 F=(A+B)(Ā+C)=AĀ+AC+ĀB+BC=AC+ĀB+BC增加乘积项以避免互补项相加, L=AC+ĀB=AC+ĀB+BC输出端并联电容 。亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
对异步信号进行同步处理;采用FIFO对跨时钟域数据通信进行缓冲设计;对复位电路采用异步复位、同步释放方式处理。状态图以信号流图的方式表达了电路的逻辑功能,更直观形象的表示出电路的状态转换过程。
触发器:flipflop,锁存器:latch,寄存器:register锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化。
触发器是边沿敏感的存储单元,数据存储的动作有某一信号的上升或者下降沿进行同步的。
寄存器用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。触发器是在时钟的沿进行数据的锁存的,而锁存器是用电平使能来锁存数据的。所以触发器的Q输出端在每一个时钟沿都会被更新,而锁存器只能在使能电平有效器件才会被更新。有一些教科书里的触发器实际是锁存器。在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是锁存器。
钟控D触发器其实就是D锁存器,边沿D触发器才是真正的D触发器,钟控D触发器在使能情况下输出随输入变化,边沿触发器只有在边沿跳变的情况下输出才变化。
两个锁存器可以构成一个触发器,归根到底还是dff是边沿触发的,而latch是电平触发的。锁存器的输出对输入透明的,输入是什么,输出就是什么,这就是锁存器不稳定的原因,而触发器是由两个锁存器构成的一个主从触发器,输出对输入是不透明的,必须在时钟的上升/下降沿才会将输入体现到输出,所以能够消除输入的毛刺信号。
都是时序逻辑,但latch受所有的输入信号控制,只要输入信号变化,latch就变化。也正因为如此,latch很容易出毛刺。flip-flop是触发器,只有在被时钟触发时才采样当前的输入,产生输出。如果使用门电路来搭建latch和ff,则latch消耗的门资源比ff要少。但是你用的如果是fpga,那么内部一般带DFF单元,反而用触发器更好。
行为级描述中latch一般是由于if货case逻辑表述不完全产生的。
异同:
1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。
2、latch容易产生毛刺(glitch),DFF则不易产生毛刺。
3、如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。
4、latch将静态时序分析变得极为复杂。一般的设计规则是:在绝大多数设计中避免产生latch。它会让您设计的时序完蛋,并且它的隐蔽性很强,非老手不能查出。latch最大的危害在于不能过滤毛刺。这对于下一级电路是极其危险的。所以,只要能用D触发器的地方,就不用latch。有些地方没有时钟,也只能用latch了。比如现在用一个clk接到latch的使能端(假设是高电平使能),这样需要的setup时间,就是数据在时钟的下降沿之前需要的时间,但是如果是一个DFF,那么setup时间就是在时钟的上升沿需要的时间。这就说明如果数据晚于控制信号的情况下,只能用latch,这种情况就是,前面所提到的latch timing borrow。基本上相当于借了一个高电平时间。也就是说,latch借的时间也是有限的。在if语句和case不全很容易产生latch,需要注意。VIA题目这两个代码哪个综合更容易产生latch:
代码1
always@(enable or ina or inb)
begin
if(enable)
begin
data_out = ina;
end
else
begin
data_out = inb;
end
end
代码2
input[3:0] data_in;
always@(data_in)
begin
case(data_in)
0 : out1 = 1b1;
1,3 : out2 = 1b1;
2,4,5,6,7 : out3 = 1b1;
default: out4 = 1b1;
endcase
end
答案是代码2在综合时更容易产生latch。
2分频:将D触发器的Q非端接到D端,Q端输出2分频。3分频:clk 接两个D触发器的cp端,Q1接D2, Q2的非与上Q1的非接到D1;Q1输出就是频率为clk的1/3 。此为00>10>01>00的计数器。
AB+AB. 以B为选择器控制端,A和A非为选择器输入端。 assign z = b?(~a):a;
X,Y接地址端,4个输入端分别接 ” 0, ~Z , Z, 1”
线与逻辑是两个或多个输出信号相连可以实现与的功能。在硬件上,要用 OC 门来实现(漏极或者集电极开路),为了防止因灌电流过大而烧坏 OC 门,应在 OC 门输出端接一上拉电阻(线或则是下拉电阻)。
①verilog
module count(clk,reset,load,date,out);
input load,clk,reset;
input[3:0] date;
output reg[3:0] out;
parameter WIDTH=4d7;
always@(clk or reset)
begin
if(reset) out<=4d0;
else if(load) out<=date;
else if(out==WIDTH-1) out<=4d0;
else out<=out+1;
end
endmodule
②利用74LVC161反馈清零法,即将Q 0 Q 1 Q 2 三路(0111=7)引脚与非后引入CR. 因该计数器还需预置初值,因此不采用反馈置 数法 。
模数转换,经取样、保持、量化、编码四个过程。
实现DAC转换的方法有:权电阻网络D/A转换,倒梯形网络D/A转换,权电流网络D/A转换、权电容网络D/A转换以及开关树形D/A转换等。
实现ADC转换的方法有:并联比较型A/D转换,反馈比较型A/D转换,双积分型A/D转换和V-F变换型A/D转换。
常用的电平标准,低速的有 RS232、RS485、RS422、TTL、CMOS、LVTTL、LVCMOS、ECL、ECL、LVPECL 等,高速的有 LVDS、GTL、PGTL、 CML、HSTL、SSTL 等。12V,5V,3.3V 等。 一般说来,CMOS 电平比 TTL 电平有着更高的噪声容限。C MOS可直接驱动 TTL, TTL 接到 CMOS 需要在输出端口加一上拉电阻 。
TTL 电平:逻辑1 对应 RS232 电平 -3V~-15V
TTL 电平 :逻辑 0 对应 RS232 电平 +3~+15V
长按识别图中二维码关注