在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4549|回复: 12

[求助] 哪位高手指导一下,为什么synplify综合成锁存器

[复制链接]
发表于 2010-8-19 15:15:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我觉得用尽了手段,没办法做成组合逻辑,不管怎么样,synplify都顽固的坚持是锁存器哪位高手指导一下,为什么synplify综合成锁存器
以下是代码:
always @ ( * )
begin
  flash_read_data=1'b0;
  fifo_write_data=1'b0;
  read_status=1'b0;
  flash_chip_erase=1'b0;
  flash_block_erase=1'b0;
  flash_sector_erase=1'b0;
  write_addr=1'b0;
  case({s_stb_i&s_cyc_i,s_addr_i[2:0],s_we_i})//synthesis full_case parallel_case
   5'b1_000_0: flash_read_data=1'b1;
   5'b1_000_1: fifo_write_data=1'b1;//Ö»ÊÇдÈ뻺³åÇø
   5'b1_001_0: read_status=1'b1;
   5'b1_010_1: write_addr=1'b1;//²Ù×÷µØÖ·ÔÝ´æ
   5'b1_011_1: flash_chip_erase=1'b1;
   5'b1_100_1: flash_block_erase=1'b1;
   5'b1_101_1: flash_sector_erase=1'b1;
   default:
    begin
     flash_read_data=1'b0;
     fifo_write_data=1'b0;
     read_status=1'b0;
     flash_chip_erase=1'b0;
     flash_block_erase=1'b0;
     flash_sector_erase=1'b0;
     write_addr=1'b0;
    end
      
  endcase
end


综合结果:

@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal write_addr, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal read_status, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal flash_read_data, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal flash_chip_erase, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal flash_block_erase, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal fifo_write_data, probably caused by a missing assignment in an if or case stmt
@W: CL118 :"D:\ledtx\txsource\txsource\spiif.v":233:2:233:5|Latch generated from always block for signal flash_sector_erase, probably caused by a missing assignment in an if or case stmt
 楼主| 发表于 2010-8-19 15:17:27 | 显示全部楼层
//后面是中文注释,synplify没正确显示,
发表于 2010-8-19 15:32:53 | 显示全部楼层
你这个代码写的太奇怪了
用几个assign语句就可以了
发表于 2010-8-19 16:02:25 | 显示全部楼层
每个需要改值的信号,在case每个条件后都被赋值一下,看看这样好使吗
 楼主| 发表于 2010-8-19 17:20:09 | 显示全部楼层
我把代码重新贴一下:

always @ ( * )
begin
  flash_read_data=1'b0;
  fifo_write_data=1'b0;
  read_status=1'b0;
  flash_chip_erase=1'b0;
  flash_block_erase=1'b0;
  flash_sector_erase=1'b0;
  write_addr=1'b0;
  case({s_stb_i&s_cyc_i,s_addr_i[2:0],s_we_i})//synthesis full_case parallel_case
   5'b1_000_0: flash_read_data=1'b1;
   5'b1_000_1: fifo_write_data=1'b1
   5'b1_001_0: read_status=1'b1;
   5'b1_010_1: write_addr=1'b1;
   5'b1_011_1: flash_chip_erase=1'b1;
   5'b1_100_1: flash_block_erase=1'b1;
   5'b1_101_1: flash_sector_erase=1'b1;
   default:
    begin
     flash_read_data=1'b0;
     fifo_write_data=1'b0;
     read_status=1'b0;
     flash_chip_erase=1'b0;
     flash_block_erase=1'b0;
     flash_sector_erase=1'b0;
     write_addr=1'b0;
    end
      
  endcase
end
发表于 2010-8-19 20:30:09 | 显示全部楼层
汗,你的代码写的真牛叉
发表于 2010-8-20 08:40:38 | 显示全部楼层
每一个信号都用一个always块来写,没必要用case吧
 楼主| 发表于 2010-8-20 11:13:39 | 显示全部楼层
谢谢各位指导。
 楼主| 发表于 2010-8-20 11:17:23 | 显示全部楼层
我想知道这样为什么不行?
发表于 2010-8-20 13:54:46 | 显示全部楼层
只保留case block,肯定就不会有latch.
否则从逻辑上看你就不是个组合逻辑.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 09:08 , Processed in 0.027264 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表