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 ...
随机推荐
- Redisson实现分布式锁(二)
本次基于注解+AOP实现分布式锁(招式与前文基于注解切换多数据源相同),话不多说,直接上样例: 首先自定义注解:设计时需要考虑锁的一般属性:keys,最大等待时间,超时时间,时间单位. package ...
- p1468 Party Lamps
就是模拟.同一个开关按2下相当于没按,那么,如果一共按0下,就是没按,按1下就是4个开关的1个,按2下可能相当于实际按了0下或按2下,按3下实际按了1下或3下,之后如果是奇数,相当于按1或3下,偶数相 ...
- InputSream转为String
public static String convertStreamToString(InputStream is) { /* * To convert the InputStream to Stri ...
- MySql之行记录的详细操作,创建用户以及库表的授权
一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- Git创建新项目
1. git init 2. git remote add origin 3. git pull origin --allow-unrelated-histories 4. git push orig ...
- python记录_day09 初识函数
一.认识函数 函数:对动作或者功能的封装 格式: 函数声明 def 函数名(): 函数体 函数调用 函数名() #定义函数 def xiao(): print("你的笑像一 ...
- Wannafly挑战赛23B游戏
https://www.nowcoder.com/acm/contest/161/B 题意:两个人van游戏,n堆石子,每次只能取这堆石子数目的因子个数,没得取的人输,问第一个人的必胜策略有多少种 题 ...
- shiro中JSP标签
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮. 导入标签库 <%@taglib prefix="shiro" uri=& ...
- UI基础五:简单的OP组件POPUP搜索帮助
需求:给一个配置表,需要根据配置表来弹出选择框,并将选择的数据添加到SALES ORDER的项目 BSP_WD_CMPWB 新建组件:ZHSI_JPMPG 新建视图,适用VALUE NODE 参考表Z ...
- IQueryable 与 IEnumberable 接口的区别
IQueryable 与 IEnumberable 接口的区别是: IEnumberable<T> 泛型类在调用自己的 SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了, ...