FPGA随记——小说 可综合和不可综合

2024-09-07 19:12
文章标签 综合 小说 fpga 不可 随记

本文主要是介绍FPGA随记——小说 可综合和不可综合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当然我在网络上找到了些可综合和不可综合的解释 感觉也很有参考价值:

https://wenda.so.com/q/1378362174074040

综合就是把你写的rtl代码转换成对应的实际电路。
比如你写代码assign a=b&c;
EDA综合工具就会去元件库里拿一个二输入与门出来,然后输入端分别接上b和c,输出端接上a

假如你写了很多这样的语句
assign a=b&c;
assign c=e|f;
assign e=x^y;
……
综合工具就会像搭积木一样的把你这些“逻辑”电路用一些“门”电路来搭起来。当然,工具会对必要的地方做一些优化,比如你写一个电路assing a=b&~b,这样工具就吧a恒接为0了,而不会去给你找一个与门来搭这个电路。
所以,“综合”要做的事情有:编译rtl代码,从库里选择用到的门器件,把这些器件按照“逻辑”搭建成“门”电路。
不可综合,是指找不到对应的“门”器件来实现相应的代码。

由于在正式代码中看到了#8 这种写法,所以单独查看了#能否被综合

关于Verilog 的“#”能够被综合的情况
可以综合的情况:
1、在Verilog中,# 是一个延迟操作符,用于在仿真中指定一个时间延迟。然而,# 操作符是否可以被综合,取决于它用在何处以及如何使用。

可以综合的情况:
时钟边沿延迟:当 # 操作符用于时钟边沿触发的 always 块中,并且与时序逻辑相关时,它可以被综合。例如,在触发器的输出中使用 # 来表示时钟延迟是可综合的。

always @(posedge clk) begin
    reg_out <= #1 reg_in; // 可综合,表示一个时钟周期的延迟
end

2、有限的延迟值:如果 # 后面跟的是一个有限的整数值,这通常表示一个固定的延迟,这样的用法在某些综合工具中可能被视为可综合的。

不能被综合的情况:
任意延迟:如果 # 后面跟的不是一个整数值,或者是一个表达式,这通常被视为不可综合的,因为它不能直接映射到硬件。

1、任意延迟:如果 # 后面跟的不是一个整数值,或者是一个表达式,这通常被视为不可综合的,因为它不能直接映射到硬件。

always @(posedge clk) begin
    reg_out <= #(some_expression) reg_in; // 通常不可综合
end

2、非时钟边沿:如果 # 操作符用于非时钟边沿触发的 always 块中,它通常被认为是不可综合的。

always @(some_signal) begin
    reg_out <= #1 reg_in; // 可能不可综合,取决于上下文
end

3、编译器指令:# 也可以用于编译器指令,如 define 和 ifdef,这些指令在编译阶段就被处理,与综合无关。

还看到了一个inital模块也用在正式代码里面,也没有报错。

然后综合得到如下电路:

我一直误解为这些不可综合的语句是不能出现在设计里面,只能出现在仿真里面的。我以为如果出现在设计里面了也会被忽略掉。但是我发现 initial 里面的语句实际中确实起了作用,它初始化了counter,我把代码(sof)下载到FPGA开发板进 确实是从0开始计数的。然后我咨询了公司的研发工程师,他是这样解答的:

initial 是不可综合,但是这里只是赋了一个初值(初始化寄存器的值)。没有行为描述。说的不可综合是指的不能生成实际的电路,不是说设计里面写了 initial 会报错 或者被忽略。

这里initial之所以不能综合,是因为它只能执行一次,而always会根据时钟条件无限次触发,所以always里面语句就像硬件电路,来一个时钟,执行一次。而initial就像是初始化程序,最开始把变量初始化,执行一次后不能再执行,直到再次复位。

这里综合的含义是指能生成对应的硬件电路,而这里的initial就像是一个纯软件的初始化。

你提到的有些设计会被忽略是因为综合器认为这个地方是无效的,没有必要的,所以忽略掉,不生成电路,自动优化掉。

这个感觉倒是也符合intial的定义和作用,但是没有行程电路。确实也没办法行程电路,软件还是聪明。

这篇关于FPGA随记——小说 可综合和不可综合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145912

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

STL经典案例(四)——实验室预约综合管理系统(项目涉及知识点很全面,内容有点多,耐心看完会有收获的!)

项目干货满满,内容有点过多,看起来可能会有点卡。系统提示读完超过俩小时,建议分多篇发布,我觉得分篇就不完整了,失去了这个项目的灵魂 一、需求分析 高校实验室预约管理系统包括三种不同身份:管理员、实验室教师、学生 管理员:给学生和实验室教师创建账号并分发 实验室教师:审核学生的预约申请 学生:申请使用实验室 高校实验室包括:超景深实验室(可容纳10人)、大数据实验室(可容纳20人)、物联网实验

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

MySQL脏读、不可重复读、幻读(虚读)

事务的特性: 原子性:指处于同一个事务中的多条语句是不可分割的。一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如转账,转账前两个账户余额之和为2k,转账之后也应该是2K。隔离性:指多线程环境下,一个线程中的事务不能被其他线程中的事务打扰持久性:事务一旦提交,就应该被永久保存起来。 事务隔离性问题: 如果不考虑事务的隔离性,会出现以下问题: 脏读:指一个线程中的事务读取到

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

综合DHCP、ACL、NAT、Telnet和PPPoE进行网络设计练习

描述:企业内网和运营商网络如上图所示。 公网IP段:12.1.1.0/24。 内网IP段:192.168.1.0/24。 公网口PPPOE 拨号采用CHAP认证,用户名:admin 密码:Admin@123 财务PC 配置静态IP:192.168.1.8 R1使用模拟器中的AR201型号,作为交换路由一体机,下图的WAN口为E0/0/8口,可以在该接口下配置IP地址。 可以通过

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节,涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件,最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂的时钟管理。通过LabVIEW的FPGA模块和NI硬件,可以快速完成开发和部署,尤其适用于复杂控制与高性能数据处理系统。 1. FPG

FPGA开发:条件语句 × 循环语句

条件语句 if_else语句 if_else语句,用来判断是否满足所给定的条件,根据判断的结果(真或假)决定执行给出的两种操作之一。 if(表达式)语句; 例如: if(a>b) out1=int1; if(表达式)         语句1; else         语句2; 例如: if(a>b)out1=int1;elseout1=int2; if(表达式1) 语句1; els

FPGA开发:模块 × 实例化

模块的结构 对于C语言,其基本单元为函数。与此类似,Verilog的基本设计单元称之为"模块"(block)。对于整个项目的设计思想就是模块套模块。 一个模块由两个部分组成:一部分描述接口,一部分描述逻辑功能。 每个Verilog模块包含4个部分:端口定义、IO说明、内部信号声明、功能定义。且位于module和endmodule之间,如下: module block(a,b,c);inpu

Tensorflow lstm实现的小说撰写预测

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增加了多个门来控制输入与输出。原理方面的知识网上很多,在此,我只是将我短暂学习的tensorflow写一个预测小说的demo,如果有错误,还望大家指出。 1、将小说进行分词,去除空格,建立词汇表与id的字典,生成初始输入模型的x与y d