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 中三角函数的实现
随机推荐
- Unity3d项目入门之Rolling Ball
下面通过分析制作一个简单的收集特定物体的滚球游戏来入门unity,包括操作面板和C#脚本的编写导入,创建Game Object和给Object添加组件等等. 一 初始设置 在Assert下创建主场景M ...
- myhaits if test判断字符串
判断参数是否为字符串0 <if test='Type=="0"'><!-- 注意单双引号 --> <include refid="selec ...
- FortiGate 服务License注册步骤
1. 产品服务license文档 购买服务后,用户会收到一份PDF文档<Service Registration Document>,内有如下内容: 2. 登陆 https://suppo ...
- 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...
- win10操作系统上,wireshark抓取https。
今天试了下使用wireshark抓https的包 一.记录如下: 配置一个环境变量SSLKEYLOGFILE为D:\Temp\sslog.log(这个文件需要自己去创建). 去下载一个chrome浏览 ...
- mysql查询时间段内的数据
https://blog.csdn.net/ls1645/article/details/79118464
- 一篇文章说清楚mysql索引
索引是什么? 索引是为了加速对表中数据行的检索而创建的一种分散的数据存储结构 为什么要使用索引? 索引能极大的减少数据存储引擎需要需要扫描的数据量: 索引能够把随机IO变为数序IO: 索引能够帮助我们 ...
- python3 第三十章 - 内置函数之Dictionary相关
Python字典包含了以下内置函数: 序号 函数及描述 实例 1 len(dict)计算字典元素个数,即键的总数. >>> dict = {'Name': 'cnblogs', 'A ...
- VB 读取列表文件名
Private Sub Command1_Click()Dim d As String, s As String If Dir(App.Path & "\down", vb ...
- jquery基础知识随笔
<html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...