手册UG901,对vivado可综合的语句支持进行了描述,HDL包括:verilog-2001,system-verilog,VHDL;

verilog-2001扩展了对task和function的支持。

ug901手册中,章节7对支持的语法进行详细描述。

 Filename: functions_1.v
//
// An example of a function in Verilog
//
// File: functions_1.v
//
module functions_1 (A, B, CIN, S, COUT);
input [:] A, B;
input CIN;
output [:] S;
output COUT;
wire [:] S0, S1, S2, S3;
function signed [:] ADD;
input A, B, CIN;
reg S, COUT;
begin
S = A ^ B ^ CIN;
COUT = (A&B) | (A&CIN) | (B&CIN);
ADD = {COUT, S};
end
endfunction assign S0 = ADD (A[], B[], CIN),
S1 = ADD (A[], B[], S0[]),
S2 = ADD (A[], B[], S1[]),
S3 = ADD (A[], B[], S2[]),
S = {S3[], S2[], S1[], S0[]},
COUT = S3[];
endmodule
 Filename: task_1.v
// Verilog tasks
// tasks_1.v
//
module tasks_1 (A, B, CIN, S, COUT);
input [:] A, B;
input CIN;
output [:] S;
output COUT;
reg [:] S;
reg COUT;
reg [:] S0, S1, S2, S3; task ADD;
input A, B, CIN;
output [:] C;
reg [:] C;
reg S, COUT;
begin
S = A ^ B ^ CIN;
COUT = (A&B) | (A&CIN) | (B&CIN);
C = {COUT, S};
end
endtask always @(A or B or CIN)
begin
ADD (A[], B[], CIN, S0);
ADD (A[], B[], S0[], S1);
ADD (A[], B[], S1[], S2);
ADD (A[], B[], S2[], S3);
S = {S3[], S2[], S1[], S0[]};
COUT = S3[];
end endmodule
 Filename: asym_ram_tdp_read_first.v
// Asymetric RAM - TDP
// READ_FIRST MODE.
// asym_ram_tdp_read_first.v module asym_ram_tdp_read_first
(clkA, clkB, enaA, weA, enaB, weB, addrA, addrB, diA, doA, diB, doB); parameter WIDTHB = ;
parameter SIZEB = ;
parameter ADDRWIDTHB = ;
parameter WIDTHA = ;
parameter SIZEA = ;
parameter ADDRWIDTHA = ; input clkA;
input clkB;
input weA, weB;
input enaA, enaB;
input [ADDRWIDTHA-:] addrA;
input [ADDRWIDTHB-:] addrB;
input [WIDTHA-:] diA;
input [WIDTHB-:] diB;
output [WIDTHA-:] doA;
output [WIDTHB-:] doB; `define max(a,b) {(a) > (b) ? (a) : (b)}
`define min(a,b) {(a) < (b) ? (a) : (b)} function integer log2;
input integer value;
reg [:] shifted;
integer res;
begin
if (value < )
log2 = value;
else
begin
shifted = value-;
for (res=; shifted>; res=res+)
shifted = shifted>>;
log2 = res;
end
end
endfunction localparam maxSIZE = `max(SIZEA, SIZEB);
localparam maxWIDTH = `max(WIDTHA, WIDTHB);
localparam minWIDTH = `min(WIDTHA, WIDTHB);
localparam RATIO = maxWIDTH / minWIDTH;
localparam log2RATIO = log2(RATIO);
reg [minWIDTH-:] RAM [:maxSIZE-];
reg [WIDTHA-:] readA;
reg [WIDTHB-:] readB; always @(posedge clkB)
begin
if (enaB) begin
readB <= RAM[addrB] ;
if (weB)
RAM[addrB] <= diB;
end
end always @(posedge clkA)
begin : portA
integer i;
reg [log2RATIO-:] lsbaddr ;
for (i=; i< RATIO; i= i+ ) begin
lsbaddr = i;
if (enaA) begin
readA[(i+)*minWIDTH - -: minWIDTH] <= RAM[{addrA, lsbaddr}];
if (weA)
RAM[{addrA, lsbaddr}] <= diA[(i+)*minWIDTH- -: minWIDTH];
end
end
end assign doA = readA;
assign doB = readB;
endmodule

veriilog对常量、结构和编译指令的支持:

Verilog constant  
force Unsupported
release Unsupported
forever statements Unsupported
repeat statements Supported, but repeat value must be
constant
for statements Supported, but bounds must be static
delay (#) Ignored
event (@) Unsupported
wait Unsupported
named events Unsupported
parallel blocks Unsupported
specify blocks Ignored
disable Supported except in For and Repeat
Loop statements
Verilog Design Hierarchies
module definition Supported
macromodule definition Unsupported
hierarchical names Supported
defparam Supported
array of instances Supported
Verilog Compiler Directives
`celldefine `endcelldefine Ignored
`default_nettype Supported
`define Supported
`ifdef `else `endif Supported
`undef, `ifndef, `elsif Supported
`include Supported
`resetall Ignored
`timescale Ignored
`unconnected_drive
`nounconnected_drive
Ignored
`uselib Unsupported
`file, `line Supported

 

vivado对task和function的可综合支持的更多相关文章

  1. SV中的task和function

    SV中class的properties和methods默认都是public的,但是可以声明为local和protected. 一个properties声明为local类型的,则只在该class中的me ...

  2. (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)

    1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...

  3. Call to undefined function imagecreatefromjpeg() 让GD支持JPEG格式的图片扩展

    安装扩展支持jpeg格式: 第一步:首先下载文件: 版本v8: wget http://www.ijg.org/files/jpegsrc.v8b.tar.gz 版本v9: wget http://w ...

  4. Verilog HDL常用综合语法

    前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式.这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句. ①这里用Verilog基本要素进行的行为描述主要是针对 ...

  5. Verilog function的使用

    function的用法 function的标准写法如下: function  <返回值的类型或是范围>  (函数名): <端口说明语句> //input xxx <变量类 ...

  6. 串口通信:接受数据(仿真task写法)

    1.功能描述 设计一个串口数据接收模块.能够以设定的波特率(与发射端口速率匹配)接收数据,并输出保存到一个寄存器中. 2.过程描述 ①边沿检测器,识别出起始位时让接收使能端有效.这里需要排除边沿脉冲的 ...

  7. gulp-less解决遇到错误停止执行task

    来龙去脉 在用less+gulp开发时,有时候代码还没写完整,不小心保存了一下,然后gulp就开始执行gulp-less的task. 但是代码是有问题的,这时候会输出一个Potentially unh ...

  8. 实践基于Task的异步模式

    Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...

  9. gulp入坑系列(3)——创建多个gulp.task

    继续gulp的爬坑路,在准备get更多gulp的具体操作之前,先来明确一下在gulp中创建和使用多个task任务的情况. gulp所要做的操作都写在gulp.task()中,系统有一个默认的defau ...

随机推荐

  1. HTML第一章总结

    第一章总结 HTML那些事儿:Web Sever, Web Browser,HTML files 如果你要做网页,那你写了HTML文档就要上传到 Web Server 上 在客户使用 Web Brow ...

  2. 取代iframe框架

    一.frameset1. 属性①border设置框架的边框粗细.②bordercolor设置框架的边框颜色.③frameborder设置是否显示框架边框.设定值只有0.1:0 表示不要边框,1 表示要 ...

  3. 学习Py——自己模拟写的一个Range功能

    #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = "loki" # function: Modeled range ...

  4. Fetch的使用; Yarn命令集; NVM的管理;VueCLi3的使用;

    如果喜欢使用lower-level,使用标准的 fetch API. 好处是无需额外的加载一个外部资源.但没有被浏览器完全支持,需要使用polyfill.因此使用Axios的更多一些. 参考Axios ...

  5. mat 使用 分析 oom 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    概述 对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现.JVM 能够记录 ...

  6. Dedecmsv5.7整合ueditor 图片上传添加水印

    最近的项目是做dedecmsv5.7的二次开发,被要求上传的图片要加水印,百度ueditor编辑器不支持自动加水印,所以,找了很多资料整合记录一下,具体效果图 这里不仔细写dedecmsv5.7 整合 ...

  7. Python基础之模块以及5大模块的使用

    内容梗概: 1. 模块的简单认识 2. collections模块 3. time时间模块 4. random模块 5. os模块 6. sys模块 1.模块的简单认识定义:模块就是我们把装有特定功能 ...

  8. vue组件插槽

    vue中子组件内容如何定义为可扩展的呢,就是用slot插槽来实现.如下图 如果<slot></slot>标签有内容,那就默认显示里面的内容,父组件传了就会覆盖此默认的内容.

  9. leetcode-algorithms-32 Longest Valid Parentheses

    leetcode-algorithms-32 Longest Valid Parentheses Given a string containing just the characters '(' a ...

  10. HTML5 <li> <ol> <ul> 用法

    定义和用法 <li> 标签定义列表项目. <li> 标签可用在有序列表 (<ol>) 和无序列表 (<ul>) 中. HTML 与 XHTML 之间的差 ...