vivado对task和function的可综合支持
手册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对常量、结构和编译指令的支持:
|
vivado对task和function的可综合支持的更多相关文章
- SV中的task和function
SV中class的properties和methods默认都是public的,但是可以声明为local和protected. 一个properties声明为local类型的,则只在该class中的me ...
- (原创)task和function语法的使用讨论(Verilog,CPLD/FPGA)
1. Abstract function和task语句的功能有很多的相似之处,在需要有多个相同的电路生成时,可以考虑使用它们来实现.因为个人使用它们比较少,所以对它们没有进行更深的了解,现在时间比较充 ...
- Call to undefined function imagecreatefromjpeg() 让GD支持JPEG格式的图片扩展
安装扩展支持jpeg格式: 第一步:首先下载文件: 版本v8: wget http://www.ijg.org/files/jpegsrc.v8b.tar.gz 版本v9: wget http://w ...
- Verilog HDL常用综合语法
前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式.这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句. ①这里用Verilog基本要素进行的行为描述主要是针对 ...
- Verilog function的使用
function的用法 function的标准写法如下: function <返回值的类型或是范围> (函数名): <端口说明语句> //input xxx <变量类 ...
- 串口通信:接受数据(仿真task写法)
1.功能描述 设计一个串口数据接收模块.能够以设定的波特率(与发射端口速率匹配)接收数据,并输出保存到一个寄存器中. 2.过程描述 ①边沿检测器,识别出起始位时让接收使能端有效.这里需要排除边沿脉冲的 ...
- gulp-less解决遇到错误停止执行task
来龙去脉 在用less+gulp开发时,有时候代码还没写完整,不小心保存了一下,然后gulp就开始执行gulp-less的task. 但是代码是有问题的,这时候会输出一个Potentially unh ...
- 实践基于Task的异步模式
Await 返回该系列目录<基于Task的异步模式--全面介绍> 在API级别,实现没有阻塞的等待的方法是提供callback(回调函数).对于Tasks来说,这是通过像ContinueW ...
- gulp入坑系列(3)——创建多个gulp.task
继续gulp的爬坑路,在准备get更多gulp的具体操作之前,先来明确一下在gulp中创建和使用多个task任务的情况. gulp所要做的操作都写在gulp.task()中,系统有一个默认的defau ...
随机推荐
- 【转】 H.264编码原理以及I帧B帧P帧
转自:http://www.cnblogs.com/herenzhiming/articles/5106178.html 前言 ----------------------- H264是新一代的编码标 ...
- ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析
理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统 ...
- IntelliJ IDEA 第一个 Scala 程序
IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序. 通常这个程序只是简单的输出 Hello World. 创建一个新工程 在文件下面选择新建, ...
- PHP多种序列化/反序列化的方法(serialize和unserialize函数)
serialize和unserialize函数 这两个是序列化和反序列化PHP中数据的常用函数. <?php $a = array('a' => 'Apple' ,'b' => 'b ...
- First Bad Version leetcode java
问题描述: You are a product manager and currently leading a team to develop a new product. Unfortunately ...
- 关于*[pylint]E1101:Module 'xxx' has no 'xxx' member* 简单而有效的解决办法
关于 pylint 的 *E1101* 错误: 概念: %s %r has no %r member Function %r has no %r member Variable %r has no % ...
- shiro中SSL
对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.keystore 使用JDK的keyt ...
- python:extend (扩展) 与 append (追加) 之间的天与地
>>> li = ['a', 'b', 'c'] >>> li.extend(['d', 'e', 'f']) >>> li ['a', 'b', ...
- leetcode-algorithms-33 Search in Rotated Sorted Array
leetcode-algorithms-33 Search in Rotated Sorted Array Suppose an array sorted in ascending order is ...
- Qt动态布局
QVBoxLayout *m_pvLayout = NULL: QWidget *m_pWidgetPlay = NULL: m_pvLayout = new QVBoxLayout(this); m ...