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

    文章

    958

    浏览量

    45475
  • 组合逻辑
    +关注

    关注

    0

    文章

    48

    浏览量

    10400
  • and
    and
    +关注

    关注

    0

    文章

    37

    浏览量

    7769

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    SN54LS181、SN54S181、SN74LS181、SN74S181算术逻辑单元/函数发生器详解

    SN54LS181、SN54S181、SN74LS181、SN74S181算术逻辑单元/函数发生器详解 在电子设计领域,算术逻辑单元(ALU)是实现各种算术和逻辑运算的核心部件。今天我
    的头像 发表于 04-23 15:15 149次阅读

    SN54AS181B与SN74AS181A算术逻辑单元/函数发生器:特性、应用与设计考量

    SN54AS181B与SN74AS181A算术逻辑单元/函数发生器:特性、应用与设计考量 在电子设计领域,算术逻辑单元(ALU)和函数发生器是实现数字运算和
    的头像 发表于 04-23 09:40 318次阅读

    探索 SN54LS181、SN54S181、SN74LS181 和 SN74S181 算术逻辑单元/函数生成器

    探索 SN54LS181、SN54S181、SN74LS181 和 SN74S181 算术逻辑单元/函数生成器 在电子工程师的日常设计工作中,选择合适的芯片是实现高效、可靠电路的关键。今天,我们就来
    的头像 发表于 04-22 16:40 185次阅读

    村田电感LQH系列型号表示方法

    村田电感LQH系列型号采用结构化编码规则,由12位字符组成,遵循 “LQ+结构+尺寸+应用+类别+电感值+精度+特征+电极+包装” 的逻辑。以下以型号 LQH32MN331K23L 为例,拆解其含义
    的头像 发表于 04-07 15:08 93次阅读
    村田电感LQH系列型号<b class='flag-5'>表示</b><b class='flag-5'>方法</b>

    函数指针介绍

    ; 取地址运算符 不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。 调用函数指针的方式也
    发表于 01-21 08:11

    函数指针及指针函数的区别

    = fun(a);   注意指针函数函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含
    发表于 12-12 06:34

    车载功放选型避坑:别被 “参数表” 骗了!CD7377CZ/CD7388 的场景适配真相

    设计,避开了多数芯片的 “参数好看、装车拉胯” 陷阱。作为华润微授权代理商,深智微科技带你撕开参数表的伪装,看懂真正的选型逻辑。 避坑点 1:别迷信 “大功率”,喇叭阻抗才是隐藏关键 最易踩的坑 :看到 CD7388 的 41W 功率就盲目下单,结果用它推 4Ω 原
    的头像 发表于 12-11 10:09 816次阅读

    结构体声明与定义

    int year;//入学年份,用无符号整数表示 unsigned int years;//学制,用无符号整数表示 }; int main(void) { /** *在main函数中声明结构体
    发表于 12-11 07:52

    检查函数返回值的错误和异常处理方法

    检查函数返回值:这是最常见也最基本的错误处理和异常处理方法,就是在调用一个函数后,检查其返回值是否符合预期或是否表示出错或失败。如果出错或失败,则根据返回值或者全局变量errno(定义
    发表于 12-11 06:48

    定点数表示实数的方法以及定点数在硬件上的运算验证

    本篇主要介绍定点数表示实数的方法以及定点数在硬件上的运算验证 为什么选定点数 32位单精度浮点数: 32位的单精度浮点数为例,IEE754标准规定,一个flaot类型的浮点数X可以
    发表于 10-28 08:13

    电压放大器驱动的混凝土组合结构界面损伤高灵敏检测方法研究

    钢-混组合结构无损检测技术,可用于指导MASW方法的实际工程应用。 测试设备: ATA-2041高压放大器、采集卡、示波器、任意函数波形发生器。 实验过程: 图:MASW试验检测系统 搭建MASW检测系统,MASW检测系统的硬件
    的头像 发表于 08-05 11:42 844次阅读
    电压放大器驱动的混凝土<b class='flag-5'>组合</b>结构界面损伤高灵敏检测<b class='flag-5'>方法</b>研究

    C语言中的内联函数与宏

    在C编程中,内联函数和宏都用于避免函数调用的开销并编写可复用的逻辑部分,但它们在工作方式和安全性方面存在显著差异。
    的头像 发表于 07-25 15:10 2071次阅读
    C语言中的内联<b class='flag-5'>函数</b>与宏

    深入理解C语言:函数—编程中的“积木块”艺术

    在编程的世界里,函数就像建筑中的“积木块”——它们是构建复杂程序的基石。通过灵活组合这些模块,开发者能打造出功能强大且结构清晰的代码。函数之所以成为C语言的核心,正是因为它解决了编程中的三大关
    的头像 发表于 06-30 17:26 2057次阅读
    深入理解C语言:<b class='flag-5'>函数</b>—编程中的“积木块”艺术

    实用电子电路设计(全6本)——数字逻辑电路的ASIC设计

    门电路、逻辑压缩、组合电路、Johnson计数器、定序器设计及应用等,并介绍了实现最佳设计的各种工程设计方法。 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 05-15 15:22

    WP4000变频功率分析仪的精度表示与常规仪表精度表示方法有什么不同?

    WP4000变频功率分析仪的精度表示与常规仪表精度表示方法有什么不同呢? 一 相对误差与引用误差的概念 相对误差是指测量所造成的绝对误差与被测量真值之比,一般以百分数表示。 由于被测量
    的头像 发表于 05-13 09:58 789次阅读