0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用函数表示组合逻辑的方法

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-12-21 09:18 次阅读

数字门级电路可分为两大类:组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点,在后面会作为单独的主题处理。

组合逻辑描述了门级电路,其中逻辑块的输出直接反映到该块的输入值的组合,例如,双输入AND门的输出是两个输入的逻辑与。如果输入值发生变化,输出值将反映这一变化,组合逻辑的RTL模型需要反映这种门级行为,这意味着逻辑块的输出必须始终反映该逻辑块当前输入值的组合。

SystemVerilog有三种在可综合RTL级别表示组合逻辑的方法:连续赋值语句、always程序块和函数。接下来几篇文章将探讨每种编码风格,并推荐最佳实践编码风格。

425b3fb4-80cc-11ed-8abf-dac502259ad0.png

使用函数表示组合逻辑

当编码正确时,函数的行为和综合就像组合逻辑一样。

最佳实践指南7-7
将RTL模型中使用的函数声明为自动automatic

为了表示组合逻辑行为,每次调用函数时都必须计算一个新的函数返回值。如果调用了静态函数,但没有指定返回值,则静态函数将隐式返回其上一次调用的值。这是锁存逻辑的行为,而不是组合逻辑。通过将RTL模型中使用的所有函数声明为自动函数(automatic),可以避免这种编码错误。

例7-2定义了一个使用Russian Peasant Multiplication算法(一系列加法和移位运算)计算乘法运算的函数。该函数被定义在一个包中,任何模块都可以使用该乘法器算法。

SystemVerilog会推断出一个与函数名称和数据类型相同的变量,示例7-2中的代码就是利用了这一点。函数名multiply_f被用作临时变量来保存for循环中的中间计算结果,函数名中存储的最终值在函数退出时成为函数返回值。

图7-2显示了综合该函数的结果,以及从连续赋值语句调用该函数的模块。

示例7-2:定义乘法运算的算法函数

//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
packagedefinitions_pkg;
timeunit1ns;timeprecision1ns;

//RussianPeasantMultiplicationAlgorithm
functionautomatic[7:0]multiply_f([7:0]a,b);
multiply_f=0;
for(inti=0;i<=3; i++) begin 
      if (b == 0) continue; // all done, finish looping
      else begin 
         if (b & 1) multiply_f += a;
         a <<= 1;  // multiply by 2
         b >>=1;//divideby2
end
end
endfunction
endpackage:definitions_pkg
//`end_keywords

//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
modulealgorithmic_multiplier
importdefinitions_pkg::*;
(inputlogic[3:0]a,b,
outputlogic[7:0]result
);
timeunit1ns;timeprecision1ns;

assignresult=multiply_f(a,b);

endmodule:algorithmic_multiplier
//`end_keywords
图7-2:示例7-2的综合结果:作为组合逻辑的函数

42abd94c-80cc-11ed-8abf-dac502259ad0.png

最佳实践指南7-8
在可能的情况下,使用SystemVerilog运算符,如*,而不是使用循环和其他编程语句。

算法乘法器的示例7-2还说明了为什么在乘法和除法等复杂运算中最好使用SystemVerilog运算符。如果在示例7-2中使用了乘法运算符(*),则综合编译器可以将该运算符映射到ASICFPGA的最有效的乘法器。

设计工程师在使用算术运算符或算法来表示复杂操作时需要谨慎。RTL模型不是在具有大量内存资源的通用计算机上运行的软件程序。RTL模型是门级实现的抽象。所表示的功能需要在物理上适合目标ASIC或FPGA,并且在时间上在有限的数量或时钟周期内。之前的文章有详细介绍了在RTL模型中使用算术运算符(如乘法和除法)的指导原则。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 锁存器
    +关注

    关注

    8

    文章

    904

    浏览量

    41441
  • 组合逻辑
    +关注

    关注

    0

    文章

    47

    浏览量

    10032
  • and
    and
    +关注

    关注

    0

    文章

    32

    浏览量

    7242

原文标题:使用函数表示组合逻辑

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    时序逻辑电路的功能表示方法有哪些

    复杂逻辑功能的关键组成部分。它们能够存储信息,并根据输入信号和当前状态产生输出。时序逻辑电路的设计和分析对于理解和实现数字系统至关重要。 2. 时序逻辑电路的基本概念 2.1 时序逻辑
    的头像 发表于 08-28 11:41 438次阅读

    逻辑函数的化简方法有哪两种

    逻辑函数的化简是数字电路设计中的重要步骤,它有助于减少电路中的门数量,提高电路的性能和可靠性。逻辑函数的化简方法主要可以分为两大类: 公式化
    的头像 发表于 08-22 16:40 495次阅读

    组合逻辑电路输出状态取决于哪些因素

    组合逻辑电路的输出状态主要取决于以下因素: 核心因素 输入信号的现态 :组合逻辑电路的输出状态在任何时刻仅由其当前输入状态的逻辑
    的头像 发表于 08-11 11:24 787次阅读

    组合逻辑电路的基本概念、组成及设计方法

    组合逻辑电路是一种数字电路,其输出状态完全取决于当前输入状态。这种电路没有记忆功能,即不包含存储元件。组合逻辑电路广泛应用于数字系统中,如计算机、通信设备和控制系统等。
    的头像 发表于 08-11 11:22 929次阅读

    组合逻辑电路的结构特点是什么?

    组合逻辑电路是一种基本的数字电路,它由逻辑门组成,用于实现各种逻辑功能。组合逻辑电路的结构特点主
    的头像 发表于 08-11 11:14 756次阅读

    常用的组合逻辑电路有哪些

    组合逻辑电路是数字逻辑电路的一种,其特点是输出只依赖于当前的输入状态,而与输入信号的变化历史无关。组合逻辑电路广泛应用于数字系统中,如计算机
    的头像 发表于 07-30 14:41 1138次阅读

    组合逻辑电路逻辑功能的测试方法

    一、引言 组合逻辑电路是数字电路中的重要组成部分,它仅由逻辑门电路(如与门、或门、非门等)和输入/输出端组成,不包含任何存储元件。组合逻辑
    的头像 发表于 07-30 14:38 881次阅读

    组合逻辑控制器是什么设备

    逻辑运算和控制功能。在本文中,我们将详细介绍组合逻辑控制器的基本概念、工作原理、应用领域和设计方法。 基本概念 1.1 什么是组合
    的头像 发表于 06-30 10:29 501次阅读

    组合逻辑控制器的基本概念、实现原理及设计方法

    广泛应用于计算机、通信、控制等领域。 本文将详细介绍组合逻辑控制器的基本概念、实现原理、设计方法、应用场景等方面的内容,以帮助读者全面了解组合逻辑
    的头像 发表于 06-30 10:26 1451次阅读

    组合逻辑控制器的工作原理是什么

    基本概念、设计方法、实现技术以及应用领域。 组合逻辑控制器的基本概念 1.1 组合逻辑的定义 组合
    的头像 发表于 06-30 10:15 803次阅读

    组合逻辑控制器是用什么实现的

    组合逻辑控制器是一种用于控制和管理复杂系统中各个组件之间交互的逻辑设备。它可以应用于各种领域,如计算机科学、通信、自动化控制等。在这篇文章中,我们将详细探讨组合
    的头像 发表于 06-30 10:11 455次阅读

    基于VHDL的组合逻辑设计

    电子发烧友网站提供《基于VHDL的组合逻辑设计.ppt》资料免费下载
    发表于 03-11 09:23 2次下载

    组合逻辑电路之与或逻辑

    逻辑电路由多个逻辑门组成且不含存储电路,对于给定的输入变量组合将产生确定的输出,则这种逻辑电路称为组合
    的头像 发表于 02-04 11:46 1518次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路之与或<b class='flag-5'>逻辑</b>

    if嵌套函数的正确输入方法

    输入方法是在if语句内部创建一个新的函数。这个函数可以是一个匿名函数或者是一个有名称的函数,具体取决于你的需求和偏好。下面是一个if嵌套
    的头像 发表于 11-30 16:50 1320次阅读

    python中计算排列组合函数有哪些

    阶乘函数factorial(n)和计算组合数的函数comb(n, k)。可以使用math.factorial(n)计算n的阶乘,它返回一个整数值,表示n的阶乘。而math.comb(n
    的头像 发表于 11-29 16:33 3464次阅读