|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
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。 |
|