在vivado中使用attribute
之前最常用的一个attribute就是mark_debug了,语法如下:(*mark_debug="ture"*)。
今天又学到几个新的,原文在这里:http://china.xilinx.com/support/answers/54357.html
一、PARALLEL_CASE (Verilog Only)
Parallel case is valid only for Verilog designs. This attribute forces a case statement to be built as a parallel multiplexer. This also prevents the case statement from being transformed into a prioritized if-elsif cascade.
This attribute can only be controlled through the Verilog RTL.
Example:
(* parallel_case *)
casex select
'b1xxx: res = data1;
'bx1xx: res = data2;
'bxx1x: res = data3;
'bxxx1: res = data4;
endcase
二、TRANSLATE_OFF/TRANSLATE_ON
TRANSLATE_OFF and TRANSLATE_ON instructs the Synthesis tool to ignore blocks of code. This can be useful to ignore source code that is not relevant for Synthesis, such as simulation code.
These attributes are given within a comment in RTL code. The comment should start with one of the following keywords:
- synthesis
- synopsys
- pragma
TRANSLATE_OFF starts the section of code to be ignored, and TRANSLATE_ON ends the section to be ignored. These attributes cannot be nested.
Be careful with the types of code that are included between the translate statements.
If it is code that affects the behavior of the design, a simulator could use that code, and create a simulation mismatch.
Verilog Example
// synthesis translate_off ...Code to be ignored... // synthesis translate_on
VHDL Example
-- synthesis translate_off ...Code to be ignored... -- synthesis translate_on
三、USE_DSP48
The use_dsp48 attributes allows a user to control how the Synthesis tool deals with arithmetic structures.
By default, mults, mult-add, mult-sub, and mult-accumulate type structures go into DSP48 blocks. Adders, subtractors, and accumulators can also go into these blocks, but by default are implemented with the fabric instead of using DSP48 blocks.
If this attribute is not specified, the default behavior is for Vivado Synthesis to determine the correct behavior.
This attribute overrides the default behavior and forces these structures into DSP48 blocks, and is placed in the RTL on signals, architectures and components, entities and modules, with the following priority:
- Signals
- Architectures and components
- Modules and entities
Accepted values for this attribute are "yes" and "no."
Verilog Example
(* use_dsp48 = "yes" *) module test(clk, in1, in2, out1);
VHDL Example
attribute use_dsp48 : string; attribute use_dsp48 of P_reg : signal is "no";
重点说一下USE_DSP48,这句话可以放在模块的前面,也可以放在reg声明的前面,如下:
一、放到模块前面
(*use_dsp48="yes"*)module COUNTER(
input clk,
input rst,
output [:] cnt
); reg [:] cnt_tmp = 'b0; always @(posedge clk,posedge rst)
if(rst)
cnt_tmp <= 'b0;
else
cnt_tmp <= cnt_tmp + 'b1; assign cnt = cnt_tmp; endmodule
综合后的资源占用如下:

二、放到寄存器声明前面
module COUNTER(
input clk,
input rst,
output [:] cnt
); (*use_dsp48="yes"*)reg [:] cnt_tmp = 'b0; always @(posedge clk,posedge rst)
if(rst)
cnt_tmp <= 'b0;
else
cnt_tmp <= cnt_tmp + 'b1; assign cnt = cnt_tmp; endmodule
综合后的资源占用如下,可以看到跟放到模块前面的资源使用情况是一样的。但这只是针对计数器这么一个简单的模块,如果你的模块中还有其它更复杂的逻辑,那么建议使用第二种方法,只对某些特定的逻辑使用DSP单元。

三、对比不使用DSP
// (*use_dsp48="yes"*) 默认加法不使用DSP
module COUNTER(
input clk,
input rst,
output [:] cnt
); reg [:] cnt_tmp = 'b0; always @(posedge clk,posedge rst)
if(rst)
cnt_tmp <= 'b0;
else
cnt_tmp <= cnt_tmp + 'b1; assign cnt = cnt_tmp; endmodule
综合后的资源占用:

在vivado中使用attribute的更多相关文章
- 浅析C#中的Attribute(转)
最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [Attribu ...
- 关于C# 中的Attribute 特性
关于C# 中的Attribute 特性 作者: 钢钢 来源: 博客园 发布时间: 2011-01-09 23:30 阅读: 13921 次 推荐: 12 原文链接 [收藏] 摘要:纠结地说 ...
- C#中的Attribute
最近用到了,所以静下心来找些资料看了一下,终于把这东西搞清楚了. 一.什么是Attribute 先看下面的三段代码: 1.自定义Attribute类:VersionAttribute [Attribu ...
- C#中的Attribute和Java中的Annotation
在之前的博客中介绍过C#的Attribute(特性),简单的说,特性主要就是利用反射技术,在运行期获取关注类的相关标注信息,然后利用这些标注信息对关注的类进行处理,最近因为工作的原因,需要看一下Jav ...
- 设置ISE/vivado中默认文本编辑器为gvim
ise windows版,添加方式 ISE下点击菜单Edit -> Preferences -> Editor. 在Editor选项框里选择Custom,在Command line syn ...
- Tcl在Vivado中的使用
http://blog.chinaaet.com/detail/36014 Vivado是Xilinx最新的FPGA设计工具,支持7系列以后的FPGA及Zynq 7000的开发.与之前的ISE设计套件 ...
- 在Vivado中调用ModelSim生成FSM的状态转移图
如果我们已经书写了一段FSM代码,现在想倒过来把它转换成为状态转移图,方便我们直观地检查我们书写的状态对不对(在写论文什么的画图太麻烦的时候,有个自动生成的是多方便啊!),应该怎么弄呢?通过在Viva ...
- 关于VO中的Attribute的问题
对于新手来说,有些时候会遇到VO中的Attribute的各种问题; 总结如下:1,你页面上输入了值,但是点击保存之后值并不能存到数据库,这个是因为该字段在VO中不是基于EO的 2,你将一个VO中的E ...
- 从Unity中的Attribute到AOP(七)
本章我们将依然讲解Unity中的Attribute,继续命名空间在UnityEngine里的. PropertyAttribute,这个特性主要来控制变量或者类在Inspector里面的显示方式.和P ...
随机推荐
- mouseover事件与mouseenter事件的区别
不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件.对应mouseout 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件.对应mouseleave 被触发的 M ...
- 水池进水与放水问题:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.........(多线程应用)
package demo2; class Pooll { /**1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口. * 要求,进水与放水不能同时进行. 水 ...
- lvs的dr模式分析(二)
#vim /etc/init.d/lvsdrrip #!/bin/bash #DR server VIP=192.168.46.200 case "$1" in start) ...
- PLC数据访问
PLC是很多机床设备上都有的控制中心,和PLC通信是很多做工厂管理系统的必经之路. 一年前有个项目需要和PLC(西门子S200)通信,不仅读取里面的数据,还需要写数据需要控制机床的运行,当时不大了解, ...
- 总结.NET 中什么时候用 Static
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数.当类中没有依赖对象标识的数据或行为时,就可以使用静态类.静态类成员是可独立于任何对象标识的数据和行为,即无论对象发生什么更改,这些数据和函 ...
- python 发邮件-带附件-文本-html
#!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...
- Beta版本冲刺——day4
No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 站立式会议 今日计划表 人员 工作 ...
- CSS 后代选择器
后代选择器(descendant selector)又称为包含选择器. 后代选择器可以选择作为某元素后代的元素. 根据上下文选择元素 我们可以定义后代选择器来创建一些规则,使这些规则在某些文档结构中起 ...
- 配置点云库PCL时遇到的问题
配置PCL基本参照PCL中国官网教程 http://www.pclcn.org/study/shownews.php?lang=cn&id=34 配置点云库时遇到的问题(基于win8 64位, ...
- 待研究:insert客商账户触发器增加条件提示为空
增加客商时候重名不给保存,增加修改条件提示找不到