当前位置: 首页 > news >正文

FPGA基础 -- Verilog语言要素之系统任务和系统函数

Verilog 语言中的**系统任务(System Tasks)系统函数(System Functions)**是调试与建模中非常关键的组成部分,它们以 $ 开头,由仿真器实现,不能综合,但在仿真和验证过程中扮演重要角色。


一、系统任务 vs 系统函数

特征系统任务(System Tasks)系统函数(System Functions)
调用方式类似过程调用($display(...)像函数调用(x = $clog2(y)
是否返回值无返回值有返回值
是否可综合一般不可综合,仅用于仿真一般不可综合(少数例外)
使用目的打印、读写文件、时间控制等计算表达式、获取值

二、系统任务(System Tasks)详解

1. 仿真输出类任务

$display, $monitor, $write, $strobe
系统任务功能示例
$display一次性格式化输出一行,换行$display("A=%0d", A);
$write类似 $display不换行$write("Processing");
$strobe在当前时间步骤最后执行输出$strobe("At end: %b", data);
$monitor自动追踪变化,一次性启动,多次触发$monitor("A=%b B=%b", A, B);

推荐用法$display 更适合调试数据变化;$monitor 更适合追踪信号变化。


2. 文件操作

系统任务功能示例
$fopen, $fclose打开/关闭文件fd = $fopen("log.txt");
$fdisplay, $fwrite写入文件内容$fdisplay(fd, "Result=%d", res);
$readmemh, $readmemb从文件初始化 memory(ROM/内存)$readmemh("mem.txt", mem_array);

✅ 通常在测试平台中读取初始化数据(ROM,寄存器文件)。


3. 时间控制与仿真管理

系统任务功能示例
$finish停止仿真,退出$finish;
$stop暂停仿真(等待用户手动继续)$stop;
$time返回当前仿真时间(无单位)$display("Time=%0t", $time);
$realtime返回浮点数形式的时间(有单位)$display("Time=%f", $realtime);
$timeformat设置仿真时间显示格式$timeformat(-9, 2, " ns", 20);

三、系统函数(System Functions)详解

1. 数学与逻辑函数

系统函数功能示例
$clog2(x)返回 log₂(x) 的上整(ceil)值$clog2(17) → 5
$signed(x)将无符号数转为有符号数y = $signed(8'b10000000);
$unsigned(x)将有符号数转为无符号数y = $unsigned(-1);
$bits(x)返回变量所占位宽$bits(data[7:0]) → 8
$random返回伪随机数x = $random(seed);

2. 字符串操作函数

系统函数功能示例
$sformat格式化为字符串$sformat(str, "val=%0d", x);
$sscanf从字符串中提取数据$sscanf(str, "%d", val);
$strlen, $stoi, $itor字符串操作$strlen("abc") → 3

3. Verilog-2001 新增常用函数

系统函数功能示例
$isunknown(x)判断是否包含 x/zif ($isunknown(data)) ...
$countones(x)统计1的个数(部分工具支持)$countones(8'b10101010) → 4

四、综合限制说明

绝大多数系统任务与系统函数 不可综合(non-synthesizable),只用于仿真、测试平台、调试信息输出。综合工具会忽略这些语句,因此在 RTL 代码(非 testbench)中应尽量避免使用它们,除非明确是用于 FPGA 测试的特殊用途。


五、使用场景总结

场景推荐系统任务/函数
调试波形、观察变量值$display, $monitor, $strobe
仿真结束/暂停$finish, $stop
初始化内存$readmemh, $readmemb
生成随机数据$random
字符串格式化$sformat, $sscanf
时钟周期统计$time, $realtime

相关文章:

  • C++11 User-Defined Literals:从入门到精通
  • java 设计模式_行为型_22模板模式
  • web项目部署配置HTTPS遇到的问题解决方法
  • 【友加畅捷】T1飞跃版账套隐藏设置
  • 数据赋能(280)——过程管理——反馈机制
  • Spring 框架核心功能全解
  • 计算机网络期末速成 网络层 判断及单选题
  • 深度学习实战111-基于神经网络的A股、美股、黄金对冲投资策略(PyTorch LSTM)
  • MyBatis 模糊查询终极教程:安全高效的搜索实现
  • NLP学习路线图(五十一):PyTorch/TensorFlow
  • 论文笔记:Repetition Improves Language Model Embeddings
  • 人工智能100问☞第48问:GPT是怎么生成文本的?
  • Attention Backend的认识
  • 【完整源码+数据集+部署教程】水位面图像分割系统源码和数据集:改进yolo11-EMSC
  • 【C++】unordered_map和unordered_set的使用
  • 物理学 | 本质 / 体系 / 应用 / 教育启示
  • Java 中 DataSource-数据源 的基础介绍
  • day33 MLP神经网络的训练
  • FPGA基础 -- Verilog HDL 结构风格的描述
  • 企业级 Vue3 项目 iframe 封装方案
  • 电视台网站建设方案.doc/重庆森林电影高清在线观看
  • 唐山seo优化/站长工具seo综合查询广告
  • 湖北智能网站建设推荐/廊坊首页霸屏排名优化
  • 做律师网站/网站测速
  • 网站模版好建设吗/网站收录查询网
  • 济南开发网站/长春seo外包