longtim 发表于 2010-6-26 01:26:17

这段verilog代码为什么会综合出锁存器

本帖最后由 fpgaw 于 2010-7-13 13:38 编辑

代码是这样的:
//CPU read data from RX_BUF and SR register
always @(sfr_addr or sfr_rd or RX_BUF or SR)
begin
if ( sfr_addr==7'b0011_000 )
begin
sfr_data_in = 8'h0;
case ( {sfr_addr,sfr_rd} )
2'b01 : sfr_data_in = RX_BUF ;
2'b11 : sfr_data_in = SR ;
default : sfr_data_in = 8'h0;
endcase
end
end

用DC综合时给出了这样的警告信息:DEFAULT branch of CASE statement cannot be reached.我想不明白这是为什么?请大家帮我看看吧

interi 发表于 2010-6-26 03:23:33

if 后面没有else就会综合成锁存器的吧

longtim 发表于 2010-6-26 05:13:09

同意楼上的观点
        http://bbs.vibesic.com/images/smilies/default/smile.gif

        http://bbs.vibesic.com/images/smilies/default/smile.gif

interi 发表于 2010-6-26 06:54:39

被你们见笑了,一直没注意后面忘写else分支了,但有一点还是不明白,就是:DEFAULT branch of CASE statement cannot be reached,请大家帮我分析以下

FFT 发表于 2010-6-26 08:32:21

sfr_data_in = 8'h0; 这就是defaultcase了吧<br>
所以后面的这句&nbsp; &nbsp;default : sfr_data_in = 8'h0; 实际上是unreachable的

usb 发表于 2010-6-26 09:04:38

else 是多余的,或者去掉 sfr_data_in = 8'h0

ngtim 发表于 2010-6-26 10:04:40

就是default这个分支和前面的重叠了嘛。

CCIE 发表于 2010-6-26 10:55:01

学习了 ,不错

Sunlife 发表于 2015-6-24 10:45:16

if 后面没有else就会综合成锁存器的吧
页: [1]
查看完整版本: 这段verilog代码为什么会综合出锁存器