news 2026/5/8 20:13:52

FPGA应用开发和仿真【2.0】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA应用开发和仿真【2.0】

2.15 生成块

初学者可跳过此节,当觉得在模块中重复写类似的有规律的内容比较烦琐时,再来学习本节。

代码2-42 8位格雷码到二进制码转换

生成块可根据一定的规律,使用条件生成语句、循环生成语句等,重复构造生成块的内容,等效于按照规律重复书写了生成块中的内容。考虑代码2-42。

该代码描述了一个将8位格雷码转换到二进制码的组合逻辑,可以看到书写了8行很有规律的持续赋值。试想,如果需要像这样描述64位格雷码到二进制码的转换呢?如果需要参数化位数呢?生成块可完成类似的需求。

生成常用形式如下:

这与过程中的for语句形式相似,不过,循环条件所用的变量必须使用genvar关键字定义,循环步进和条件必须只由生成变量决定。

if生成语句和case生成语句的形式与过程中的if语句和case语句相似,不过,所有的条件表达式必须是常量表达式。

生成语句中的生成内容与模块中能包含的内容基本一致,生成内容中还可以再嵌套其他生成语句。

如果使用生成块,代码2-42可参数化,改写为代码2-43。

代码2-43 参数化位数的格雷码到二进制码转换

2.16 任务和函数

任务和函数将一些语句实现的一定功能封装在一起,以便重复使用。任务和函数都只能在过程块中调用。

任务定义的一般形式:

其中的static和automatic关键字用于指定任务和函数的生命周期,使用automatic关键字的任务和函数中的变量均为局部变量,在每次任务或函数调用时均会重新初始化,可被多个同时进行的过程调用,或被递归调用,类似于编程语言的可重入。FPGA开发工具一般只支持automatic类型的任务和函数。

任务和函数本身类似于顺序块,因而在顺序块中能使用的语句(过程赋值、流程控制等)都能在任务和函数中使用。

任务中可以有时序控制(延时、事件),而函数中不能有。

代码2-44是任务和函数的例子。

代码2-44 任务和函数示例

第4行的任务gen_reset用于在reset上产生复位信号,第14行的函数用于求输入x的底2对数。

2.17 包

包(package)用来封装一些常用的常量变量定义、数据类型定义、任务和函数定义等,在需要使用时,可使用import关键字导入。

包定义的形式是:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 2:22:19

es可视化管理工具助力精准数据检索实践

用好ES可视化工具,让数据检索像查快递一样简单你有没有过这样的经历?系统突然报警,日志炸了屏,几十台服务器的输出堆在终端里,而你要从百万行记录中找出那个致命的error——靠grep和tail -f硬扛,眼睛快瞎了…

作者头像 李华
网站建设 2026/5/1 6:09:05

单精度浮点数转换误区:IEEE 754常见陷阱与规避策略

单精度浮点数转换的“隐形坑”:从 IEEE 754 看懂那些年我们踩过的数值陷阱你有没有遇到过这样的情况?明明写的是0.1 0.2,结果却死活不等于0.3?一个整数16777217转成float后莫名其妙变成了16777216?循环加0.1f到1.0f&a…

作者头像 李华
网站建设 2026/4/30 13:53:35

YOLOFuse检测结果用于MATLAB数据分析:跨平台协作路径

YOLOFuse检测结果用于MATLAB数据分析:跨平台协作路径 在智能监控系统日益复杂的今天,工程师们常常面临一个看似简单却极具挑战的问题:如何将深度学习模型的检测输出,无缝接入传统工程分析工具?尤其是在夜间巡检、低光环…

作者头像 李华
网站建设 2026/5/3 22:42:44

一文说清理想二极管在多电源选择中的作用

理想二极管如何让多电源切换“零损耗”?揭秘现代高可靠供电系统的核心设计你有没有遇到过这样的场景:一台关键服务器突然断电,重启后数据丢失;或者工业设备在电网波动时意外停机,造成生产线中断。这些看似偶然的故障&a…

作者头像 李华
网站建设 2026/5/4 1:44:34

YOLOFuse极地科考站安保:野生动物接近预警

YOLOFuse极地科考站安保:野生动物接近预警 在南极洲的漫长极夜里,气温低至-50℃,狂风卷着暴雪呼啸而过。一座孤立的科考站静静伫立在冰原之上,无人值守的监控系统正默默运转——突然,热成像画面中出现一个缓慢移动的高…

作者头像 李华
网站建设 2026/5/1 9:58:05

逆向分析某手游基于异常的内存保护

总结 通过mprotect设置内存为 PROT_NONE 并使用sigaction注册信号处理接管访问被保护内存的SIGSEGV 随后在sigsegv_handler进行了一系列解析指令、模拟执行指令、回写解密数据的操作: 1、解析异常地址并判断是否属于被保护范围,解析ARM引发SIGSEGV的指…

作者头像 李华