网站重新上线,多谢朋友们的关心
Dec 24
1. XST主要参考资料:XST User Guide (ISE安装目录doc中的xst.pdf)

2. 辅助参考资料:WP231 - HDL Coding Practices to Accelerate Design Performance

3. 特别注意之一:请给XST加时序约束。
通常我们会为工程添加UCF约束指定时序要求和管脚约束。但是UCF约束是给MAP,PAR等实现使用的,综合工具XST并不能感知系统的时序要求。而为XST添加XCF约束却是使实现结果拥有最高频率的关键。其原因是显而易见的:实现工具只能在综合网表的基础上布局布线,而综合工具却可以根据要求调整综合网表,使实现工具更容易满足时序要求。如果不将时序目标告知综合器,将导致我们对性能的要求得不到体现。
XCF约束语法与UCF类似并且在XST User Guide中有详细描述。其实常用的Period、Offest等约束和UCF的语法是一模一样的,可以直接使用在XCF中。
给设计添加XCF约束的方法是Synthesize - XST --> 右键 --> Synthesis Constraint File = 指定路径

4. 特别注意之二:仔细察看综合报告中的Warning。
切记要仔细查看综合报告中的所有Warning并确认是否是可以安全忽略的。综合器产生Error会使工具停止工作,但是Warning经常会被用户忽略。其实Waning可以提示很多潜在的逻辑问题,比如某些信号声明了,被使用了,却没有被赋值,或者综合器发现了Latch但却不是期望的结果等等。

5. 常用选项之一:keep_hierarchy - 保持层次。在初始设计/debug的时候很有用。XST根据层次来综合,不打破层次优化,所有的寄存器名字都以名字排列,UCF约束可以很方便得找到需要约束的对象。如果选择soft,则在综合时保持层次,而在map时工具会打破层次来优化,但是instance的名字还是保留的。
Tags: ,
Oct 17
经常用VHDL的Generate语句,却对Verilog的generate不太熟悉。
下面是查了XST User Guide后得知的Verilog中generate的语法:

1. generate语法有generate for, genreate if和generate case三种
2. generate for语句必须有genvar关键字定义for的变量
3. for 的内容必须加begin和end
4. 必须给for语段起个名字

例子:
引用
generate
genvar i;
  for (i=0; i<=7; i=i+1)
  begin : for_name
     adder add (a[8*i+7 : 8*i], b[8*i+7 : 8*i],
        ci[i], sum_for[8*i+7 : 8*i], c0_or[i+1]);
  end
endgenerate


更详细的用法请在XST User Guide中搜索generate。
Tags: ,
Jul 16
Kingbeful同学讨论了infer memory的问题。

Infer ROM/RAM,一般使用Language Template --> Verilog --> Synthesis Constructs --> Coding Examples --> RAM/ROM。

要对ROM/RAM做初始化,可以用readmemb/readmemh这两个system task。功能都是读取外部的文件来初始化内存。

XST, ISIM, ModelSim都支持readmemh/readmemb。

readmemb的基本格式是:
initial begin
   $readmemh("mem.data", my_memory, start_address, end_address);
end

其中,start_address和end_address都是可选项。

不写start_address的时候,默认从高位地址写起。
如果要从低位写起,start address = 0。

例子工程:


参考资料:
asic-world - 不过XST不支持数据文件中有任何其他字符,包括注释和下划线。
XST User Guide
Tags: , , ,
Jul 10
在Verilog中,可以使用`ifdef很方便地控制程序的结构,比如:

引用
`ifdef FPGA_IMP
module_A_instantiate (
..
..
);
`else
module_B_instantiate (
..
..
);
`endif


但是如果使用了这种结构,XST是不能自动认出工程的层次结构的,因此综合的时候有可能会报告某个文件找不到的错误。

解决方法是,手动编辑XST生成的xx.prj文件,把漏编译的文件名添加到xx.prj的头上就可以了。
Tags: , ,
May 14

BlackBox 不指定

RickySu , 20:53 , 技术经验 , 评论(3) , 引用(0) , 阅读(1574) , Via 本站原创
BlackBox是FPGA设计中一个重要的技巧,不过觉得Xilinx的文档没有很好地将它讲清楚。

BlackBox的主要想法就是把设计的某一个子模块单独综合,综合的结果作为一个黑盒子子模块,上层设计不再对这个模块进行优化,只能看到它的端口。

要让XST实现BlackBox,其实非常简单,将一个子模块单独综合后,会得到ngc文件或者edif文件。在使用这个网表时,在子模块的描述文件中只要包含端口信息而不要实现的信息(这个文件通常称为wrapper),这样XST就会自动寻找project目录下的网表文件了。不过HDL文件和网表文件的文件名得相同。
如果网表文件不在project目录中,就要在Translate的Search Macro Path属性中填写寻找的路径,多条路径可以以|分割。

写个简单的示例:
顶层文件top.v/vhd,子模块是ngc格式的网表module.ngc,子模块有一个仅描述了端口的wrapper文件module.v/vhd.
HDL中不用包括任何blackbox属性。综合器会自动加上的。

在Reference的页面中有for vhdl和verilog的详细例子。敬请参阅。

注1:
说到wrapper,因为综合工具综合时其实是不读ngc/edif网表的(分析时序除外),子模块的端口完全是靠wrapper告诉综合器的。而ngc/edif的网表是在translate(NgdBuild)的时候才将所有的网表组合为一个ngd文件的。

注2:
生成用于子模块的ngc网表时,要在XST属性中选择不添加IO Buffer。否则最后使用的时候由于这些不该有的buffer会在Translate的时候报错。

Reference:
Black Box support
Tags: , ,
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]