ANG 发表于 2010-6-27 22:17:23

关于综合出锁存器的问题,请指教

看到很多地方在讲到编码风格的时候说,if语句中,如果没有在else子句写全,会综合出锁存器来。而锁存器是应该避免的。可是,如果在一个时钟驱动的进程中也会综合处锁存器吗?
如这个例子:
PROCESS(clk)
BEGIN
IF clk'EVENT AND clk= '1' THEN
IF addr_en = '1' THEN--没有将if……else……语句写全,会综合出锁存器吗?
in_data_addr <= '0' & vds & rgb_addr & row_addr & col_addr;
END IF;
END IF;
END PROCESS;

这个进程会综合处锁存器吗?按理说这个命名是有时钟驱动的,最多也就综合处寄存器吧?

longtime 发表于 2010-6-27 23:37:23

不会。。。。。D-FF的写法不就是这样吗?

HDL 发表于 2010-6-28 00:53:25

同意,组合电路中else要写全

ANG 发表于 2010-6-28 00:58:47

原帖由 equvalent 于 2006-9-16 23:54 发表<br>
同意,组合电路中else要写全 可是如果在组合电路中,难道还能综合出寄存器来吗?<br>
<br>
组合电路又没有时钟,应该只能综合出锁存器吧?

interige 发表于 2010-6-28 02:56:23

原帖由 andy_xu 于 2006-9-18 11:21 发表<br>
<br>
<br>
可是如果在组合电路中,难道还能综合出寄存器来吗?<br>
<br>
组合电路又没有时钟,应该只能综合出锁存器吧? 组合电路中的reg只是在用户编程的时候写起来方便,实际上组合电路中没有存储功能,<br>
只有线。也就是说如果if-else没有写全的话,当if的条件不满足的时候,<br>
输出的值不是原if的时候的值,而是x<br>
不定态。

CTT 发表于 2010-6-28 04:29:02

是不是说在进程中有了&nbsp;&nbsp;IF clk'EVENT AND clk= '1'&nbsp;&nbsp;之中的if语句,不用写全 也没关系吗??<br>
<br>
而在IF clk'EVENT AND clk= '1'&nbsp;&nbsp;之外的if语句是一定要写全的吗???

VVIC 发表于 2010-6-28 05:34:42

要看是时序逻辑还是组合逻辑<br>
看有没有存储吧<br>
这个是这么理解的,不知道对不,有没有高手出来给个详尽的解释啊^_^

CTT 发表于 2010-6-28 07:18:08

找个高手来考问下~~~

CHA 发表于 2010-6-28 08:52:08

if 和else语句的问题是个比较普遍的问题,下面是我的一些理解:<br>
1)如果用在时钟敏感的进程里面,if不一定要和else配对使用,这样代码一般会被综合成触发器(flip-flop);<br>
2)如果用在组合逻辑的描述里面,一般if和else需要配对使用,这样生成的电路为组合逻辑;<br>
3)有时,电路中需要锁存器这样的单元,那么if和else不需要配对使用。

longtime 发表于 2010-6-28 09:08:16

回楼主的问题:<br>
这样不会综合出锁存器,而是综合除了带同步使能的寄存器
页: [1] 2 3
查看完整版本: 关于综合出锁存器的问题,请指教