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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 13683|回复: 27

[原创] 让人蛋疼的Xilinx->ISE->XST综合器,看到这个结果哥Hold住了!!

[复制链接]
发表于 2011-9-14 14:58:13 | 显示全部楼层 |阅读模式

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

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

x
干了这么多年FPGA设计,头一回用Xilinx的FPGA。一个项目需要把一个成熟的设计移植到Xilinx平台,该模块已经设计成熟在Altera平台上以及ASIC上应用,功能完全正确(PS:该设计所有的模块全部自主化,不存在任何IP,RAM、乘法器、加法器等全部自己设计,用Modelsim、Nc仿真没问题,用DC,Syn Pro以及QuartusII的综合器综合一点问题没有)。没想到移植后用XST综合发现两个让人蛋疼的问题,查了我2天。
问题1:所有的单端口RAM全部综合出错,写完再读出来全是0。同样是RAM模型,别的综合工具怎么就没问题???换了IP就行了。
问题2:有关加法器的问题,大家请看以下代码:
module add_sub(clk,add_or_sub,data_a,data_b,result);
input clk;
input add_or_sub;
input[3:0]data_a;
input[3:0]data_b;
output[3:0]result;
reg [3:0]result;
always @(posedge clk)
if(add_or_sub)
result<=data_a+data_b;
else
result<=data_a-data_b;
endmodule
我的本意这是一个有符号数的加减法器,这里不考虑溢出的问题,实际中不会溢出。其实加法器无所谓有符号还是无符号,只要以补码形式就都能兼容。比如“0111”+"1010",以无符号数算是7+10=17,取低四位是1,完全正确(溢出不考虑)。如果是有符号数就是(+7)+(-6)=1,也完全正确!对于减法实际还是用加法实现的,只要把被减数按位取反再加1即可。因此像Syn Pro以及QuartusII的综合器都是用一个二选一选择器实现,一路是两个数直接加,另一路是data_b按位取反再加1后再和data_a相加。可是狗血的XST综合后加法功能正确减法就不对!非要将申明成“input signed [7:0]data_a----"减法功能才正确。不都是支持Verilog-2001的吗??为什么差距这么大??在此B4一下Xilinx!!!用的ISE软件版本是10.1。
发表于 2011-9-14 15:23:54 | 显示全部楼层
synpro转ISE
发表于 2011-9-14 16:14:03 | 显示全部楼层
我做过xilinx到lattice的移植,确实很头疼。XST跟其他综合器的要求是不一样的。例如说,xilinx下的通过variable的方式用TO_X01(INIT)方式复位在lattice下不可行。
发表于 2011-9-14 17:13:14 | 显示全部楼层
本帖最后由 solarwafer 于 2011-9-14 17:22 编辑

dd.JPG
XST没有错误,你做的是网表仿真,里面有glbl,glbl会有一段系统复位时间。在这段时间内,不管你输入什么,输出都是0,一旦过了这段时间,结果就是对的。
一定要hold住。
 楼主| 发表于 2011-9-14 20:38:06 | 显示全部楼层
楼上,说错误是我们同事告诉我的,当时应该是行为级仿真,这个明天确认一下!!但是我的确看到,你要不申明是有符号的,在RTL-VIEW里用的是无符号加法器,如果申明是有符号的用的就是有符号加法器!还有不知道你用的ISE是什么版本,今天我用12.1综合看了一下RTL级用的又是加减器实现的。
发表于 2011-9-15 09:45:35 | 显示全部楼层
本帖最后由 solarwafer 于 2011-9-15 09:47 编辑

回复 5# canoeeda


    RTL仿真与你用什么综合器没有关系啊,ps:我用的是ISE10.1,你发的RTL我没有更改。
 楼主| 发表于 2011-9-16 19:34:01 | 显示全部楼层
今天确认了第二个问题是我同事弄错了,她自作主张把output[3:0]result;
改成了output[4:0]result;
扩展一位,如果不申明成signed型减法就错了。

第一个问题是千真万确的错了!
发表于 2011-9-17 08:35:44 | 显示全部楼层
回复 7# canoeeda


    呵呵,Xilinx是不大可能出错的,出错了,还是找自己的原因比较好
 楼主| 发表于 2011-9-17 20:35:37 | 显示全部楼层
第二个问题是我没把好关,但第一个问题怎么解释??怎么不出错????考,单端口RAM就错了!!!千真万确!!!,用syn pro 综合就不错!!!用altera自己的综合器也不错!!如果ISE你不能综合那你报错啊,一个警告都没有!!那个ram的模型是IC foundry 提供的,我的500万门的ASIC就用的是这个模型!!楼上的哪个软件都不可能没有bug!MS还天天打BUG呢!切
发表于 2011-9-18 08:28:32 | 显示全部楼层
软件是有bug,但那种bug不会出现在这种基本问题上,大多出现在ip(不是ram,而是ddr,pcie等IP),
如果你是用rtl推断出ram,一定要按照相应综合器的语法例子(xst有xst的语法,synplify有synplify的语法),还有就是ram的结构。 不要动不动就怪综合器。那个ram文件没有更新,那是因为你没有按照操作要求做。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-30 05:56 , Processed in 0.024101 second(s), 8 queries , Gzip On, MemCached On.

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