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

    文章

    747

    浏览量

    41042
  • 组合逻辑
    +关注

    关注

    0

    文章

    45

    浏览量

    9993
  • and
    and
    +关注

    关注

    0

    文章

    30

    浏览量

    7083

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

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

收藏 人收藏

    评论

    相关推荐

    基于VHDL的组合逻辑设计

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

    时序逻辑电路有哪些 时序逻辑电路和组合逻辑电路区别

    产生相应的输出信号。本文将详细介绍时序逻辑电路的分类、基本原理、设计方法以及与组合逻辑电路的区别。 一、时序逻辑电路的分类 时序
    的头像 发表于 02-06 11:18 1057次阅读

    常用的组合逻辑电路

    组合逻辑电路和时序逻辑电路是数字电路中两种重要的逻辑电路类型,它们主要区别在于其输出信号的依赖关系和对时间的敏感性。
    的头像 发表于 02-04 16:00 1068次阅读

    组合逻辑电路之与或逻辑

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

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

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

    isnan函数的使用方法

    isnan函数是一种用于检查特定值是否为“非数字”的函数。在Python中,该函数属于math模块,并提供了一种简单的方法来区分数字和非数字。在本文中,我们将深入探讨isnan
    的头像 发表于 11-30 16:24 909次阅读

    python 排列组合c(m,n)怎么算

    排列组合是数学中的一个概念,用于计算从集合中选择一定数量元素进行排列或组合方法数。其中,C(m, n)表示从m个元素中选择n个元素进行排列组合
    的头像 发表于 11-29 16:36 720次阅读

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

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

    stm32单片机的16进制地址可以用10进制数表示吗?

    请问,stm32单片机的16进制地址可以用10进制数表示吗?
    发表于 11-03 07:55

    低通滤波器的传递函数简析

    滤波器的响应可以用s域传递函数表示;变量s来自拉普拉斯变换,代表复杂的频率。
    的头像 发表于 09-19 16:58 2722次阅读
    低通滤波器的传递<b class='flag-5'>函数</b>简析

    soc中的组合逻辑和时序逻辑应用说明

    芯片设计是现代电子设备的重要组成部分,其中组合逻辑和时序逻辑是芯片设计中非常重要的概念。组合逻辑和时序
    的头像 发表于 08-30 09:32 880次阅读

    组合逻辑电路分析和设计方法

    所谓组合逻辑电路的分析,就是根据给定的逻辑电路图,求出电路的逻辑功能。
    的头像 发表于 08-16 09:15 4705次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路分析和设计<b class='flag-5'>方法</b>

    在Artix 7 FPGA上使用Vivado的组合逻辑与顺序逻辑

    电子发烧友网站提供《在Artix 7 FPGA上使用Vivado的组合逻辑与顺序逻辑.zip》资料免费下载
    发表于 06-15 09:14 0次下载
    在Artix 7 FPGA上使用Vivado的<b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>与顺序<b class='flag-5'>逻辑</b>

    组合逻辑电路的相关知识

    本篇内容主要回顾第三章组合逻辑电路的知识,虽然前面提到过组合逻辑电路是数字电路中很重要的一部分,但是学习起来相对简单,主要是要学会掌握方法
    的头像 发表于 05-24 14:38 1331次阅读
    <b class='flag-5'>组合</b><b class='flag-5'>逻辑</b>电路的相关知识

    半导体技术之数电门电路

    三种基本运算(与、或、非),复合逻辑计算(与非、或非、与或非、异或、同或),逻辑代数的基本公式和常用公式,逻辑代数的基本定理(带入定理、反演定理、对偶定理),逻辑
    发表于 05-13 10:52 395次阅读
    半导体技术之数电门电路