我们知道在书本上都说让我们尽量使用不带优先级的的数据选择器,今天我们就来探讨一下二者的区别。

例子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的探讨的更多相关文章

  1. FPGA中改善时序性能的方法_advanced FPGA design

    本文内容摘自<advanced FPGA design>对应中文版是 <高级FPGA设计,结构,实现,和优化>第一章中的内容 FPGA中改善时序,我相信也是大家最关心的话题之一 ...

  2. FPGA中的delay与latency

    delay和latency都有延迟的意义,在FPGA中二者又有具体的区别. latency出现在时序逻辑电路中,表示数据从输入到输出有效经过的时间,通常以时钟周期为单位. delay出现在组合逻辑电路 ...

  3. FPGA中的INOUT接口和高阻态

    除了输入输出端口,FPGA中还有另一种端口叫做inout端口.如果需要进行全双工通信,是需要两条信道的,也就是说需要使用两个FPGA管脚和外部器件连接.但是,有时候半双工通信就能满足我们的要求,理论上 ...

  4. FPGA中的时序分析(四)

    常用约束语句说明 关于Fmax      上述是实现Fmax的计算公式,clock skew delay的计算如下图, 就是两个时钟的差值.到头来,影响Fmax的值的大小就是组合逻辑,而Fmax是针对 ...

  5. 【转】关于FPGA中建立时间和保持时间的探讨

      时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...

  6. FPGA中浮点运算实现方法——定标

    有些FPGA中是不能直接对浮点数进行操作的,仅仅能採用定点数进行数值运算.对于FPGA而言,參与数学运算的书就是16位的整型数,但假设数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一 ...

  7. Altera FPGA中的pin进一步说明

    最近END china上的大神阿昏豆发表了博文 <FPGA研发之道(25)-管脚>,刚好今天拿到了新书<深入理解Altera FPGA应用设计>第一章开篇就讲pin.这里就两者 ...

  8. FPGA中的除法运算及初识AXI总线

    FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...

  9. 【转载】FPGA 中的latch 锁存器

    以下这篇文章讲述了锁存器的一些概念和注意事项.原文标题及链接: FPGA 中的latch 锁存器 - 快乐至永远上的博客 - 与非博客 - 与网 http://www.eefocus.com/liuy ...

  10. FPGA 中三角函数的实现

    FPGA 中三角函数的实现

随机推荐

  1. openstack swift curl 常用操作

    上传文件 curl -v -X PUT -H 'X-Auth-Token: AUTH_tkd9276f23b3404c67b8a6be45da881d6e' http://127.0.0.1:8080 ...

  2. Android 自定义的圆角矩形ImageView 工具类

    上图看效果 自定义圆角矩形ImageView工具类 package com.wechaotou.utils; import android.content.Context; import androi ...

  3. 25. Reverse Nodes in k-Group (JAVA)

    Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k  ...

  4. Babel 配置选项

    comments 是否去掉注释,true(默认)/false.

  5. net core中动态给log4net添加日志类型

    private static object m_Lock = new object(); /// <summary> /// 根据类型获取对应的日志操作类 /// </summary ...

  6. 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)

    当前现阶段学习经常使用的路由交换设备主要来自于思科.华为和华三三家,这三家的设备操作配置大致类似,却又不尽相同.因为实体设备通常都非常昂贵,所以作为学习,我们通常会使用它们提供的模拟器.华为的模拟器是 ...

  7. Java几种常用JSON库性能比较

    本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能. 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才是最值得相信的. JSON ...

  8. css三列布局之双飞翼pk圣杯

    三列布局:两边定宽,中间自适应! 看到这个问题,我第一眼想的就是两边定宽float左右,中间加一个margin宽度自适应或者直接设一个overflow:hidden触发bfc机制,这样也可以,看上去也 ...

  9. 直接插入排序(js版)

    直接插入排序(从小到大) 基本思想:将一个记录插入到已经排好序的有序表中,得到一个新的,记录数加1的有序表. function insertSort(arr){ var i,j,temp=0; for ...

  10. Angular中不同的组件间传值与通信的方法

    主要分为父子组件和非父子组件部分. 父子组件间参数与通讯方法 使用事件通信(EventEmitter,@Output): 场景:可以在父子组件之间进行通信,一般使用在子组件传递消息给父组件: 步骤: ...