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

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

3天内不再提示

Verilog HDL描述的组合逻辑环在FPGA实现时到底有什么问题?

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-12-12 10:01 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

课堂上给大家介绍代码规范的时候,反复强调不能出现组合逻辑环,具体就是组合逻辑所有的else语句要写全,case语句也要写全,但组合逻辑环到底有什么危害?下面就详细举例说明。

01

什么是组合逻辑环?

组合逻辑反馈环路是数字同步逻辑设计的大忌,它最容易因振荡、毛刺、时序违规等问题引起整个系统的不稳定和不可靠。组合逻辑反馈环路是二种高风险的设计方式,主要原因如下:

1.组合反馈环的逻辑功能完全依赖于其反馈环路上组合逻辑的门延时和布线延时等,如果这些传播延时有任何改变,则该组合反馈环单元的整体逻辑功能将彻底改变,而且改变后的逻辑功能很难确定。

2.组合反馈环的时序分析是无穷循环的时序计算,综合、实现等EDA 工具迫不得已一般必须主动割断其时序路径,以完成相关的时序计算。而不同的EDA工具对组合反馈环的处理方法各不相同,所以组合反馈环的最终实现结果有很多不确定因素。

3.通常的综合工具在处理组合逻辑反馈问题时,将产生Latch,这将对时序造成许多问题。

在用Verilog HDL进行可综合电路设计时,有很多情况都有可能产生组合逻辑环。

•在组合逻辑的组合进程中, 条件语句描述时应该指定所有条件下所有输出的状态,以避免锁存。比如if/case语句的所有分支必须定义全部的输出才可能避免出现锁存。

•在设计中,应该尽量避免使用锁存!因为锁存要占去大量的触发器资源,而且会对电路带来某种不稳定的隐患。

•所谓的latch,其实质是组合电路中有反馈!反馈的形成是利用到了前一个状态。

具体举例如下:

213094e0-79b7-11ed-8abf-dac502259ad0.jpg

2142d362-79b7-11ed-8abf-dac502259ad0.jpg

总结如下:

•组合电路描述中,条件判断语句必须指明所有条件分支情况下,被赋值信号的值。

•分支不完整,意味着电路需要在某种电平状态下,让被赋值的信号“保持原值”,这只能使用锁存电路实现。

02

一个实例

设计代码如下:

// **************************************************************

// COPYRIGHT(c)2015, Xidian University

// All rights reserved.

//

// IP LIB INDEX :

// IP Name :

// File name :

// Module name :

// Full name :

//

// Author : Liu-Huan

// Email : assasin9997@163.com

// Data :

// Version : V 1.0

//

// Abstract :

// Called by :

//

// Modification history

// -----------------------------------------------------------------

//

//

//

// *****************************************************************

// *******************

// TIMESCALE

// *******************

`timescale 1ns/1ps

// *******************

// INFORMATION

// *******************

//*******************

//DEFINE(s)

//*******************

//`define UDLY 1 //Unit delay, for non-blocking assignments in sequential logic

//*******************

//DEFINE MODULE PORT

//*******************

module TOP (

input clk ,

input rst

) ;

//*******************

//DEFINE LOCAL PARAMETER

//*******************

//parameter(s)

parameter IDLE = 5'b0_0001 ;

parameter S1 = 5'b0_0010 ;

parameter S2 = 5'b0_0100 ;

parameter S3 = 5'b0_1000 ;

parameter S4 = 5'b1_0000 ;

//*********************

//INNER SIGNAL DECLARATION

//*********************

//REGS

(* mark_debug = "true" *)reg [4:0] c_state ;

(* mark_debug = "true" *)reg [4:0] n_state ;

reg [3:0] cnt ;

(* mark_debug = "true" *) reg [3:0] led ;

//WIRES

//*********************

//INSTANTCE MODULE

//*********************

//*********************

//MAIN CORE

//*********************

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

cnt <= 4'b0 ;

end

else begin

cnt <= cnt+1'b1 ; 

end

end

// 三段式状态机 验证 第二段 if无else的异常跳转

// 第一段 状态转移

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

c_state <= IDLE ; 

end

else begin

c_state <= n_state ;

end

end

// 第二段 计算下一状态

always @ (*) begin

case ( c_state )

IDLE : begin

if ( cnt == 'b0 )

n_state = S1 ;

end

S1 : begin

if ( cnt == 'd2 )

n_state = S2 ;

end

S2 : begin

if ( cnt == 'd4 )

n_state = S3 ;

end

S3 : begin

if ( cnt == 'd8 )

n_state = S4 ;

end

S4 : begin

if ( cnt == 'd15 )

n_state = IDLE ;

end

default : begin

n_state = IDLE ;

end

endcase

end

// 第三段 输出

always @(posedge clk or posedge rst) begin

if (rst == 1'b1) begin

led <= 4'b0 ;

end

else begin

case ( n_state )

IDLE : led <= 4'b0 ;

S1 : led <= 4'd1 ;

S2 : led <= 4'd2 ;

S3 : led <= 4'd3 ;

S4 : led <= 4'd4 ;

default : begin

led <= 4'd0 ;  

end

endcase

end

end

endmodule


仿真激励代码如下:

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company:

// Engineer:

//

// Create Date: 2017/12/11 2030

// Design Name:

// Module Name: test

// Project Name:

// Target Devices:

// Tool Versions:

// Description:

//

// Dependencies:

//

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

//

//////////////////////////////////////////////////////////////////////////////////

module test ;

reg clk ;

reg rst ;

initial begin

clk = 1'b0 ;

rst = 1'b1 ;

# 100

rst = 1'b0 ;

end

always # 5 clk = ~clk ;

TOP U_TOP (

.clk ( clk ) ,

.rst ( rst )

) ;

endmodule


上面组合逻辑环的代码已经用红色字体显示。

先看前仿真结果:

2157f9ea-79b7-11ed-8abf-dac502259ad0.jpg

看不太清?让我们再看一张图。

2163d15c-79b7-11ed-8abf-dac502259ad0.png

状态跳变正常,n_state[4:0]按照1、2、4、8、16、1......的顺序重复跳变,没有任何问题。

但在用FPGA工具(如vivado)进行综合时,会报警告:

216f4186-79b7-11ed-8abf-dac502259ad0.jpg

但是上板抓取信号,发现状态机异常跳转,如下图所示。

21809cc4-79b7-11ed-8abf-dac502259ad0.png

此时的n_state[4:0]信号跳变状态为:1、2、4、8、9、1......,出现了9这样的一个状态!

此时,水落石出!出现组合逻辑环会给电路带来严重问题!

而上面的例子是显而易见的,一眼就能看出来,还有一些组合逻辑环,是在写代码时不小心引入的,并且是由多个always模块组成的,这种组合逻辑环在综合的时候也会报warning,必须要修改掉之后才能继续后续工作。否则,等真正上板调试时,规模稍微大点的设计如果要定位到这个错误估计也得花掉好几天的时间,所以代码规范至关重要!

03

组合逻辑环的好处

在实际芯片设计中,也是不允许出现组合逻辑环的。但组合逻辑环能够减少电路逻辑资源,降低电路功耗,具有很多优点。但是其难以被静态时序分析工具分析和计算,且难以生成功能验证向量和自动测试图形向量.针对此问题,很多人都提出了多种组合逻辑环转化方法,以解决硬件描述语言以及高级语言逻辑综合阶段所面临的组合逻辑环拆分问题。


审核编辑 :李倩


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

    关注

    1665

    文章

    22575

    浏览量

    640877
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114837
  • eda
    eda
    +关注

    关注

    72

    文章

    3165

    浏览量

    184136

原文标题:Verilog HDL描述的组合逻辑环在FPGA实现时到底有什么问题?

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CPU、GPU、NPU到底有什么区别? 嵌入式/工控/选型一次讲透!!

    CPU、GPU、NPU到底有什么区别?嵌入式/工控/选型一次讲透做嵌入式开发、折腾工控板、调试端侧AI的朋友,几乎都纠结过同一个问题:同样是芯片,为什么有的板子胜在CPU稳定、有的赢GPU显示
    的头像 发表于 05-25 14:40 51次阅读
    CPU、GPU、NPU<b class='flag-5'>到底有</b>什么区别?  嵌入式/工控/选型一次讲透!!

    电路里的“光学魔法”:光耦到底有多神奇?

    电路里的“光学魔法”:光耦到底有多神奇?
    的头像 发表于 05-08 17:34 451次阅读
    电路里的“光学魔法”:光耦<b class='flag-5'>到底有</b>多神奇?

    工程师高培解读XilinxVivadoFPGA设计进阶与AI自动编程

    编程的总结,以下围绕八个核心模块展开技术要点,供FPGA开发者参考。 一、理解FPGA底层结构 用好Vivado,需要对FPGA内部结构清晰认识。LUT(查找表)
    的头像 发表于 04-22 16:29 254次阅读
    工程师高培解读XilinxVivado<b class='flag-5'>FPGA</b>设计进阶与AI自动编程

    到底有多小?

    想知道硅到底有多小;CPU 并不比 Wii 上的百老汇芯片大,但功能却无限强大,哈哈。
    发表于 03-25 06:51

    5G SA和NSA到底有啥不一样

    平时刷手机,只要稍微留意过 5G 设备或者运营商的信息,SA 和 NSA 这两个词应该不陌生。大家也知道它们跟 5G 有关,但真要问起它俩到底有什么区别,好像一下子也说不太明白。
    的头像 发表于 03-14 14:10 2737次阅读

    Verilog HDL语法学习笔记

    Verilog HDL 语 言 最 初 是 作为 Gateway Design Automation 公 司 ( Gateway DesignAutomation 公司后来被著名的 Cadence Design Systems 公司收购)模拟器产品开发的硬件建模语言。
    的头像 发表于 03-04 15:04 5960次阅读
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>语法学习笔记

    FPGA 入门必看:Verilog 与 VHDL 编程基础解析!

    很多开发者第一次接触FPGA,都会有同样的疑问:FPGA是硬件,不是软件,怎么写程序?答案就是用硬件描述语言(HDL),最常用的就是Verilog
    的头像 发表于 01-19 09:05 842次阅读
    <b class='flag-5'>FPGA</b> 入门必看:<b class='flag-5'>Verilog</b> 与 VHDL 编程基础解析!

    自动驾驶中毫米波雷达到底有何作用?

    毫米波雷达、超声波雷达等感知硬件,更像是一个配角,成为自动驾驶技术实现的辅助硬件。那自动驾驶中毫米波雷达到底有何作用?
    的头像 发表于 12-10 17:07 2143次阅读
    自动驾驶中毫米波雷达<b class='flag-5'>到底有</b>何作用?

    复杂的软件算法硬件IP核的实现

    Compiler)将算法编译转化为可综合的 Verilog 文本,进而通过 FPGA 硬件上实现算法。 1.C to Hardware 技术简介 AltiumDesign
    发表于 10-30 07:02

    如何利用Verilog HDLFPGA实现SRAM的读写测试

    本篇将详细介绍如何利用Verilog HDLFPGA实现SRAM的读写测试。SRAM是一种非易失性存储器,具有高速读取和写入的特点。
    的头像 发表于 10-22 17:21 4646次阅读
    如何利用<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>SRAM的读写测试

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了HDL Coder如
    发表于 10-22 06:48

    基于FPGA开发板TSP的串口通信设计

    本文详细介绍基于Terasic FPGA开发板TSP(又名C5P和OSK)和其板载CP2102N USB-UART桥接芯片的串口通信系统设计与实现。系统采用Verilog HDL编写U
    的头像 发表于 10-15 11:05 4970次阅读
    基于<b class='flag-5'>FPGA</b>开发板TSP的串口通信设计

    使用VerilogFPGA实现FOC电机控制系统

    自动驾驶、电动滑板车、无人机甚至工业自动化领域,高性能电机控制是不可或缺的核心技术。而如果你对硬件足够的热情,你会发现:传统用 MCU 实现 FOC(Field-Oriented Control,磁场定向控制)也能“搬”到
    的头像 发表于 08-21 15:27 5737次阅读
    使用<b class='flag-5'>Verilog</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b>上<b class='flag-5'>实现</b>FOC电机控制系统

    电磁干扰“江湖三兄弟”:EMC、EMI、EMS 到底有啥区别?

    电磁干扰“江湖三兄弟”:EMC、EMI、EMS 到底有啥区别?
    的头像 发表于 08-20 15:16 3245次阅读
    电磁干扰“江湖三兄弟”:EMC、EMI、EMS <b class='flag-5'>到底有</b>啥区别?

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)

    漫画科普 | 功率放大器到底有哪些应用?带你解锁功放经典应用场景!(一)
    的头像 发表于 06-20 20:00 1183次阅读
    漫画科普 | 功率放大器<b class='flag-5'>到底有</b>哪些应用?带你解锁功放经典应用场景!(一)