每天进步一点点------基础实验_07_锁存器 :锁存器器及透明锁存器各一
2013-08-08 18:39
260 查看
1. latch是电平触发,无法实现同步操作,与我们正常的时序逻辑电路设计思路不符。
2. latch会对输入电平敏感,受布线延迟影响较大,比较容易导致输出有毛刺产生。
3. latch会导致静态时序分析和DFT会很复杂。
4. 在ASIC中使用latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。
latch的好处:
因为使用latch可以timing borrow,在高速电路设计中(timing会很紧),有时候就需要用latch。
这次讲一下latch。
latch的危害已经说过了,这里不再多说,关键讲一下如何避免。
1)在组合逻辑进程中,if语句一定要有else!并且所有的信号都要在if的所有分支中被赋值。
这个是绝对会产生latch的。
正确的应该是
另外需要注意,下面也会产生latch。也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。
但如果是时序逻辑进程,则不存在该问题。
2)case语句的default一定不能少!
原因和if语句相同,这里不再多说了。
需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。
3)组合逻辑进程敏感变量不能少也不能多
这个问题倒不是太大,verilog2001语法中可以直接用 * 搞定了。
顺便提一句,latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO。不过在我们平时的设计中,对latch还是要尽可能的敬而远之。
2. latch会对输入电平敏感,受布线延迟影响较大,比较容易导致输出有毛刺产生。
3. latch会导致静态时序分析和DFT会很复杂。
4. 在ASIC中使用latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。
latch的好处:
因为使用latch可以timing borrow,在高速电路设计中(timing会很紧),有时候就需要用latch。
这次讲一下latch。
latch的危害已经说过了,这里不再多说,关键讲一下如何避免。
1)在组合逻辑进程中,if语句一定要有else!并且所有的信号都要在if的所有分支中被赋值。
always @( * ) begin if ( sig_a == 1'b1 ) sig_b = sig_c; end
这个是绝对会产生latch的。
正确的应该是
always @( * ) begin if ( sig_a == 1'b1 ) sig_b = sig_c; else sig_b = sig_d; end
另外需要注意,下面也会产生latch。也就是说在组合逻辑进程中不能出现自己赋值给自己或者间接出现自己赋值给自己的情况。
always @( * ) begin if ( rst == 1'b1 ) counter = 32'h00000000; else counter = counter + 1; end
但如果是时序逻辑进程,则不存在该问题。
2)case语句的default一定不能少!
原因和if语句相同,这里不再多说了。
需要提醒的是,在时序逻辑进程中,default语句也一定要加上,这是一个很好的习惯。
3)组合逻辑进程敏感变量不能少也不能多
这个问题倒不是太大,verilog2001语法中可以直接用 * 搞定了。
顺便提一句,latch有弊就一定有利。在FPGA的LE中,总存在一个latch和一个D触发器,在支持DDR的IOE(IOB)中也存在着一个latch来实现DDIO。不过在我们平时的设计中,对latch还是要尽可能的敬而远之。
/********************************************************************************* * Company : * Engineer : 空气微凉 * * Create Date : 00:00:00 22/03/2013 * Design Name : * Module Name : * Project Name : * Target Devices : * Tool versions : * Description : * http://www.cnblogs.com/kongqiweiliang/ * Dependencies : * * Revision : * Revision : 0.01 - File Created * Additional Comments : ********************************************************************************/ `timescale 1ns/1ps `define UD #1 /*******************************************************************************/ module LATCH_N ( //Interface package input iDAT ,// input iDAT_EN ,// output reg oDAT // ); //------------------------------------------------------------------------------- always@(*)begin if(iDAT_EN == 1'h1) oDAT = iDAT; else oDAT = iDAT; end //------------------------------------------------------------------------------- endmodule
相关文章推荐
- 每天进步一点点------基础实验_02_多路解复用器 :4通道8位带三态输出
- 每天进步一点点------基础实验_03_编码器 :8位输入3位输出编码器
- 每天进步一点点------基础实验_11_移位寄存器 :线性反馈移位寄存器
- 每天进步一点点------基础实验_04_优先编码器:8位输入3位输出高位优先
- 每天进步一点点------基础实验_12_有限状态机 :Moore型序列检测器
- 每天进步一点点------基础实验_05_译码器 :3位输入8位输出译码器
- 每天进步一点点------基础实验_06_优先译码器 :优先译码器
- 每天进步一点点------基础实验_01_多路复用器 :4通道8位带三态输出
- 每天进步一点点------基础实验_08_触发器 :D、T触发器各一
- 每天进步一点点------基础实验_13_有限状态机 :Mealy型序列检测器
- 每天进步一点点------基础实验_09_计数器 :摸4、8、16计数器各一
- 每天进步一点点------基础实验_10_移位寄存器 :常见普通移位寄存器
- 每天进步一点点:(14) SELinux基础
- 每天进步一点点------时序分析基础与时钟约束实例(五)几种进行时序约束的方法
- 每天进步一点点------时序分析基础与时钟约束实例(一)
- 每天进步一点点------时序分析基础与时钟约束实例(二)
- 每天进步一点点------时序分析基础与时钟约束实例(四)IO口时序(Input Delay /output Delay)
- 每天进步一点点------时序分析基础与时钟约束实例(三)
- 每天进步一点点——linux——rpm
- 每天进步一点点