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

例子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. webpack多入口优化

    最近接手的项目是公司之前搭的多页面应用脚手架,然后到现在入口页面大大小小超过半百了,然后每次更新完配置之后,重启页面就贼拉卡,实在太影响开发效率了,于是开始优化呗. 最开始发现如果你想要让加载速度变快 ...

  2. 基于centos7+nginx+uwsgi+python3+django2.0部署Django项目

    0.序言 本文讲解如何基于centos7+nginx+uwsgi+python3+django2.0把windows上的本地项目部署到云服务器上. 本文服务器上的django项目和虚拟环境的路径将建立 ...

  3. 100-days: twenty-one

    Title: Not so fantastic(<口>极好的,棒的): can Japan end its love affair(喜爱,热爱) with plastic(塑料)? A : ...

  4. Nevertheless 和 Nonetheless,你用对了吗?

    本文转自:https://www.sohu.com/a/229443257_338773 Nevertheless 以及 nonetheless 都可以表示转折.很多人很多课程也提到这两者基本上可以交 ...

  5. Python学习笔记4基本数据类型

    start:16:00 1.Python基本数据类型 (1)数字类型及其操作 整数类型 浮点数类型 浮点数间运算存在不确定尾数,不是bug 复数类型 数值运算操作符 (2)数值运算函数    . 2. ...

  6. docker mysql 主主同步

    转发自:https://blog.csdn.net/money9sun/article/details/85099134 第一步:安装docker   https://www.cnblogs.com/ ...

  7. VMware 中安装KVM,模块不加载

    # yum -y install qemu-kvm libvirt virt-install bridge-utils 通过以上命令在VMWare中centos7安装KVM模块 安装后使用 #lsmo ...

  8. celery 应用

    开启服务 #日志 级别 celery -A write_file worker -l info file name :write_file.pyfrom celery import Celery ce ...

  9. 移值UCOS2到M4核与M3核的区别

    之前移值过ucos2到stm32f2系列的单片机,这个单片机是属于arm的m3内核的.最近在学习永磁同步电机的控制,对于这个电机的控制,有比较多的数学计算,甚至于还有浮点的运算.所以用到了stm32f ...

  10. 某app的安全性分析过程

    交互过程如下,可以发现问题很多 http://www.ixxxx.com//api/index/app图片验证码:{"data":{"imgCode":&quo ...