No.6 Verilog 其他论题
可以调用其它任务和函数。
任务的定义格式:
task[automatic] task_id;
[declarations]
procedural_statement
endtask
**任务可以没有参变量,也可以有多个参变量,包括input,output,inout。
示例:
module esoc;
parameter MAX = ;
task reverse_bits;
input [MAX-:] data_in;
output [MAX-:] data_out;
integer k; begin
for(k=; k<MAX; k=k+)
data_out[MAX--k] = data_in[k];
end
endtask
...
endmodule
**任务可以在其范围内声明任何变量,但仅限于其范围内使用,为局部变量。
**关于automatic:
任务可以被声明为automatic类型。在这样的任务中,任务内部声明的所有局部变量在每一次任务调用时都进行动态分配,
即在任务调用中的局部变量不会对两个单独或者并发的任务调用产生影响。而在静态(非自动类型)任务中,在每一次任
务调用中的局部变量都使用同一个存储空间。借助于关键字automatic就可以把任务指定为automatic类型。
task automatic rotate;
integer mac;
...;
endtask
格式:task_id[(expr1, expr2, expr3, ...)]; 必须按定义的顺序匹配。
示例:
module golobal_var;
reg[:]qram[:];
integer index;
reg check_bit; task get_parity;
input [:]address;
output parity_bit;
parity_bit = ^qram[address];
endtask initial
for(index=; index<=; index = index+)
begin
get_parity(index, check_bit);
$display("Parity bit of memory word %d is %b.",index, check_bit);
end
endmodule
**系统任务
*显示任务:
(a)显示、读写 :$display, $write
(b)选通:$strobe
(c)监控:$monitor
*文件传输
(a)打开、关闭文件:$fopen, $fclose
输出到文件:$fdisplay, $fwrite, $fstrobe, $fmonitor, $fflush
从文件读取数据:$readmemb, $fread...
integer file_pointer = $fopen(file_name, mode);
$fclose(file_pointer);
mode:
"r","rb":打开文件并从文件的头开始读。如果文件不存在就报的错。
"w","wb":打开文件并从文件的头开始写。如果文件不存在就创建文件。
"a","ab":打开文件并从文件的末尾开始写。如果文件不存在就创建文件。
"r+","r+b","rb":打开文件并从文件的头开始读写。如果文件不存在就报的错。
"w+","w+b","wb":打开文件并从文件的头开始读写。如果文件不存在就创建文。
"a+","a+b","ab":打开文件并从文件的末尾开始读写。如果文件不存在就创建文件。
"b"是在打开二进制文件时引用。
(b)时间标度:
显示模块的时间单位和时间精度:$printtimescale
指定如何报告时间信息:$timeformat
$timeformat(units_number, precision, suffix, numeric_filed_width);
(c)仿真任务:
使仿真器退出仿真环境:$finish
仿真中止:$stop
不能调用任何其它任务,输入必须至少有一个,不允许有inout,output的声明;可以调用其它函数。
**定义:
function [automatic][signed]
[range_of_type] function_id; //function_id为返回的值
input_declaration
other_declarations
procedural_statement
endfunction
//或
function [automatic][signed]
[range_of_type] function_id(input_declaration);
other_declarations
procedural_statement
endfunction
**函数的调用:
格式:func_id(expr1, expr2, expr3, ...)
**系统函数
(a)仿真时间函数:$time, $stime, $realtime; // 返回64位,32位,实型仿真时间
(b)转换函数:
$rtoi(real_value) $itor(integer_value),
$realtobits(real_value) $bitstoreal(bit_value),
$signed(value) $unsigned(value)
(c)概率分布函数:$random ...
(d)字符串格式化:$swrite, $sformat, $sscanf
(3)禁止语句
**禁止语句是过程性语句,只能出现在always和initial中,禁止语句可以终止任务或程序块的执行,能够用于硬件中断和全局复位的建模。
*格式:
disable task_id;
disable bolck_id;
(4)命名事件
命名事件是Verilog的另一种数据类型(其他两种是变量和线网)。
声明格式:event ready, done;
使用格式:->ready; ->done;
示例:异步状态机
event state1, state2, state3;
//复位状态
initial begin
->state1;
end
always@(state1)begin
->state2;
end
always@(state2)begin
->state3;
end
always@(state3)begin
if(input_a) ->state2;
else ->state1;
end
No.6 Verilog 其他论题的更多相关文章
- Verilog学习笔记简单功能实现(二)...............全加器
先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有: Xi Yi Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...
- Verilog HDL模型的不同抽象级别
所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...
- Verilog学习笔记基本语法篇(十二)········ 编译预处理
h Verilog HDL语言和C语言一样也提供编译预处理的功能.在Verilog中为了和一般的语句相区别,这些预处理语句以符号"`"开头,注意,这个字符位于主键盘的左上角,其对应 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]
一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...
- 基于Verilog HDL整数乘法器设计与仿真验证
基于Verilog HDL整数乘法器设计与仿真验证 1.预备知识 整数分为短整数,中整数,长整数,本文只涉及到短整数.短整数:占用一个字节空间,8位,其中最高位为符号位(最高位为1表示为负数,最高位为 ...
- system verilog中的跳转操作
在verilog中,使用disable声明来从执行流程中的某一点跳转到另一点.特别地,disable声明使执行流程跳转到标注名字的声明组末尾,或者一个任务的末尾. verilog中的disable命令 ...
- system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...
- 一段比较有意思的代码——介绍system verilog中的新增幅值语句
system verilog中新加了很多幅值语句,虽然都只适用于阻塞幅值,但是在某些场合中非常实用. 下面是一段有意思的代码,覆盖了一些用法. package definitions; typedef ...
随机推荐
- 795. Number of Subarrays with Bounded Maximum
数学的方式 是对于所有的字符分成简单的三类 0 小于 L 1 LR 之间 2 大于R 也就是再求 不包含 2 但是包含1 的子数组个数 不包含2的子数组个数好求 对于连续的相邻的n个 非2类数 就有 ...
- python3.6.4安装错误0x80072efd
是因为翻不了墙,请求URL错误,所以报错那么去掉Download debug sysbom选项
- iotop实时监控磁盘io
介绍 Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. iotop 是一个用来监视磁盘 I/O 使用状况 ...
- 实习面试总结(只写了昨天腾讯的面试和拿到offer的一个小公司, 有空再把前面的补上吧)
一个月来面了大大小小的公司有近10个,还是总结一下吧,希望对大家有点用处. 我想说的是,大学四年,如果不会继续读研深造,那么你需要做的不仅仅是疯狂的做项目,或者单独的学算法. 最好的方式就是都了解一点 ...
- PipeCAD 简介
PipeCAD 简介 PipeCAD的定位是中小型项目的管道设计软件,主要有管道建模.设备建模以及管道ISO图及平面图功能.程序的操作方式尽量参考PDMS,考虑灵活性.易于使用.如果用来和国内其他管道 ...
- (视频分辨率介绍)混淆的概念:SIF与CIF、4CIF与D1
http://www.microjie.com/index.php/professional-knowledge/82-standards-parterns/26-profession-knowled ...
- MFC 双缓存绘图
在SDI应用程序中,当我们需要时刻动态刷新界面的时候,如果我们一直使用,UpdateAllView()那么就会出现屏幕不停闪烁.闪屏非常严重,特别是一直在动态刷新的时候.并且在闪屏的过程中 我们根本就 ...
- mysql load date to Hbase
一.mysql迁移数据进hbase需要配置好配置文件 用sqoop 命令进行迁移 二. 配置文件内容: import--connectjdbc:mysql://172.18.32.99:3306/te ...
- mysql 安装失败 start service执行不下去
简单说一下自己安装mysql的经历坑点,新手应该都会遇到.新买了一个电脑,第一次安装的情况:在网上下载好几个不同的mysql,安装都在最后一步执行的时候,执行不下去,最后打开客户端,就是闪一下就消失了 ...
- mysql建表设置格式
建表时必须设置字段编码格式为COLLATE utf8_bin,表示查询时该字段内容区分大小写,如果不需要区分大小写,可以设置为COLLATE utf8_ genera_ci,表示忽略大小写