FPGA中带优先级的if else if与不带优先级的case的探讨
我们知道在书本上都说让我们尽量使用不带优先级的的数据选择器,今天我们就来探讨一下二者的区别。
例子1:带优先级的的数据选择器,综合成功,且没有任何警告。
module detection_prio
#(
parameter NUM = ,
parameter DSIZE =
)
( input [:] sel, input [NUM*DSIZE-:] din,
output reg[DSIZE-:] dout
); always@(*)begin
if(sel == )
dout = din[*DSIZE+:DSIZE];
else if(sel==)
dout = din[*DSIZE+:DSIZE];
else if(sel==)
dout = din[*DSIZE+:DSIZE];
else if(sel==)
dout = din[*DSIZE+:DSIZE]; end endmodule
我们观察一下其RTL视图与路径时序分析报告,最长路径为LUT6加输入输出的buff延迟为1.103。


接着我们观察一下低层的Technology Schematic视图,我们可以看出来这个数据选择器的每一个输出其实是有一个6输入的LUT6构成的,同样从资源消耗图上我们也可以看出来其实是有8个LUT构成的。


例子2,不带优先级的case
module detection_prio
#(
parameter NUM = ,
parameter DSIZE =
)
( input [:] sel, input [NUM*DSIZE-:] din,
output reg[DSIZE-:] dout
); always@(*)begin
case(sel)
:begin dout = din[*DSIZE+:DSIZE]; end
:begin dout = din[*DSIZE+:DSIZE]; end
:begin dout = din[*DSIZE+:DSIZE]; end
:begin dout = din[*DSIZE+:DSIZE]; end
default:begin end
endcase;
end endmodule
同样观察RTL等,可以看出在这种情况下,二者生产的电路是一摸一样的。




这里你可能会有疑问了,明明第一个是带有优先级的,为什么会是一摸一样的电路呢?
回答这个问题,首先抛开if els if case等代码形式,我们探讨一下我们为什么需要优先级,什么情况下有优先级和没有优先级是一样的的输出。
很简单,当判断的条件里出现两个或者多个条件成立的话,我们就需要优先级来确定我们需要选择哪个。换句话说,当所有判断条件有且仅有一个成立的情况下,我们就不需要优先级,因为结果也仅有一个。这时编译器就会根据里面的算法优化给你优化成一个较好的电路结构,来完成你所需要的功能。
FPGA中带优先级的if else if与不带优先级的case的探讨的更多相关文章
- FPGA中改善时序性能的方法_advanced FPGA design
本文内容摘自<advanced FPGA design>对应中文版是 <高级FPGA设计,结构,实现,和优化>第一章中的内容 FPGA中改善时序,我相信也是大家最关心的话题之一 ...
- FPGA中的delay与latency
delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路 ...
- FPGA中的INOUT接口和高阻态
除了输入输出端口,FPGA中还有另一种端口叫做inout端口.如果需要进行全双工通信,是需要两条信道的,也就是说需要使用两个FPGA管脚和外部器件连接.但是,有时候半双工通信就能满足我们的要求,理论上 ...
- FPGA中的时序分析(四)
常用约束语句说明 关于Fmax 上述是实现Fmax的计算公式,clock skew delay的计算如下图, 就是两个时钟的差值.到头来,影响Fmax的值的大小就是组合逻辑,而Fmax是针对 ...
- 【转】关于FPGA中建立时间和保持时间的探讨
时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...
- FPGA中浮点运算实现方法——定标
有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一 ...
- Altera FPGA中的pin进一步说明
最近END china上的大神阿昏豆发表了博文 <FPGA研发之道(25)-管脚>,刚好今天拿到了新书<深入理解Altera FPGA应用设计>第一章开篇就讲pin.这里就两者 ...
- FPGA中的除法运算及初识AXI总线
FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...
- 【转载】FPGA 中的latch 锁存器
以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...
- FPGA 中三角函数的实现
FPGA 中三角函数的实现
随机推荐
- Mac编译RocketMQ 4.1.0
参考:https://my.oschina.net/jayronwang/blog/861396 1. 前提先安装并设置好maven,jdk,git,这个网上有很多教程,就不讲了 2. 下载rocke ...
- L2-026 小字辈(dfs)
本题给定一个庞大家族的家谱,要请你给出最小一辈的名单. 输入格式: 输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号.随后第二行 ...
- 机器学习入门-BP神经网络模型及梯度下降法-2017年9月5日14:58:16
BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...
- html模板导出pdf文件
package com.crc.commonreport.util; import java.awt.Insets; import java.io.ByteArrayOutputStream; imp ...
- Git 操作简介
安装完成创建用户和邮箱 git config --global user.name "username"git config --global user.email "t ...
- 多个表左联,要返回全部的结果,解决不能用where的问题
qb.leftJoin('info_student', 'grouping_class_student.studentId', 'info_student.id'); qb.leftJoin('gro ...
- 分析easyswoole3.0源码,服务启动为例(一)
swoole已经升级到4了,主要的特性是更好的支持协程,easyswoole也为了更好支持协程推出了es3.我本地环境是php7.2.9 centos7 在github下载最新的3.0的demo.地址 ...
- [转]JSOUP 抓取HTTPS/HTTP网页,校验问题
针对一般的http请求是不需要的校验的.但是https安全校验过总过不去.最后找到以下方法,终于成功. 让我们的站点信任所有站点,不需要引包,系统自带ssl证书校验,话不多数,贴代码. /** * 信 ...
- appnium启动报错Encountered internal error running command: Error: Error occured while starting App. Original error: Permission to start activity denied.
说明写错了activity 首先查看一下activity,使用命令 打开被测app,输入命令adb shell dumpsys window | findstr mCurrentFocus 看似这个a ...
- 服务管理之mysql基础
目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...