首页 > 其他分享 >Verilog 组合电路常见错误和always块的使用原则

Verilog 组合电路常见错误和always块的使用原则

时间:2024-07-19 09:00:08浏览次数:16  
标签:gt always 电路 b0 Verilog eq 赋值

一、组合电路常见错误

1、变量在多个always块中连续赋值

reg y;
reg a, b, clear;
always @ *
    if(clear) y = 1'b0;
always @ *
    y = a&b;
//每个always块是电路的一部分,y在两个电路上输出,不能综合

2、不完整的敏感信号列表

always @(a,b)
    y = a&b;
//如果忘记包含b,就会变成如下

always @a
    y = a&b;
//这样可以通过综合,但是对b不敏感,会导致仿真和综合结果不一样

3、不完整分支和不完整赋值

  • 问题现象:组合电路的输出仅仅是由当前输入的取值决定的,而不依赖于任何内部存储的状态。具体来说,组合电路不包含存储元件,如触发器等。它的输出只与当前时刻的输入信号有关,而与之前的输入历史或内部状态无关。
  • 原因:always块中,综合出组合电路的意外存储器。Verilog标准指定always块变量没有赋值则会保持原来的值,在综合时,这将导致内部状态(通过闭合反馈电路)或存储原件的产生存储原件(锁存器)的产生
  • 方法:为了防止always块中,综合出组合电路的意外存储器,所有**输出信号**在任何时候都应该赋与恰当的值
//若 a>b 时为真时,若eq没有赋值,则会保持之前的值,从而会综合出锁存器

//方法一 加上else分支并明确赋值
always @*
    if(a>b)
        begin
            gt = 1'b1;
            eq = 1'b0;         
        end
	else if(a == b)
        begin      
            gt = 1'b0;
            eq = 1'b1;         
        end
	else
    	begin
            gt = 1'b0;
            eq = 1'b0;         
        end

//方法二 在always起始部分给每个变量赋默认的值
always @*
	begin
    	gt = 1'b0;
		eq = 1'b0; 
        if(a>b)
        	gt = 1'b1;
        else
            eq = 1'b1 ; 
    end

二、组合电路always块的使用原则

1、只在1个always块中对变量进行赋值;
2、组合电路采用阻塞赋值的方式
3、在敏感信号列表中使用“ @* ”自动包含全部所有的输入信号不管用没用到
4、确保包含if-else和case语句的所有分支;
5、确保所有分支的输出都被赋值
6、一种满足4和5的方法在always块开始时给输出赋默认值
7、full case和parallel case用代码描述,不用软件指令和属性
8、了解不同控制结构综出的电路的类型
9、思考生成的硬件电路

标签:gt,always,电路,b0,Verilog,eq,赋值
From: https://blog.csdn.net/qin_li/article/details/140527754

相关文章

  • 基于FPGA的MSK调制解调系统verilog开发,包含testbench,同步模块,高斯信道模拟模块,误
    1.算法仿真效果本程序系统是《m基于FPGA的MSK调制解调系统verilog开发,并带FPGA误码检测模块和matlab仿真程序》的的升级。 升级前原文链接 增加了完整的AWGN信道模型的FPGA实现,可以在testbench里面设置SNR,分析不同SNR对应的FPGA误码率情况。 vivado2019.2仿真结果如下(......
  • SciTech-EECS-电路设计- PCB设计-AD软件的“原理图绘制”
    原理图的绘制及检查在绘制原理图前,必须确认所有Components(元器件)的Symbol(原理图符号封装)和PCBPackage(PCB封装)都已可用。如果AD软件或第三方没提供设计所需Components的完整封装,则设计者在绘制原理图前,要定制没有提供的Components的完整封装.如果Altium、......
  • 1016、基于数电电路交通灯数码管显示系统设计(Proteus仿真+元器件清单+配套资料等)
    毕设帮助、开题指导、技术解答(有偿)见文未一、设计功能1、通过纯数电硬件电路实现,两个方向通行时间分别为40s和55s,黄灯时间为5s,具有夜间模式,所有黄灯闪烁。2、通过数码管显示相关的信息二、Proteus仿真图资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源......
  • SciTech-EECS-电设计- PCB设计-电路设计与仿真系统 + SPICE 仿真描述与模型
    电路设计与仿真系统用户可以通过"仿真系统"轻松的观察“电路行为”的“即时状态”。是因为“电子电路设计与仿真系统”集成了原理图编辑器,仿真引擎,波形显示等功能,"仿真系统"通常也会涵盖“扩展模型”以及电子“元器件库”:"扩展模型"主要包括IC(集成电路)专用的"晶......
  • 电路仿真软件使用七大技巧,让你秒变电子工程师!
    在电子工程领域,电路仿真软件无疑是工程师们不可或缺的工具。但是,你是否已经充分掌握了这些软件的使用技巧,让它们在项目中发挥最大效能呢?今天,就让我们一起来揭秘电路仿真软件使用的七大技巧,助你秒变电子工程师!一、选择合适的仿真软件首先,我们要明确自己的需求和目标。不同的电......
  • SciTech-EECS-PCB设计- PCB布线-电路原理图设计
    PCB电路板设计,首先要完成电路原理图设计.第一步,介绍原理图绘制环境的设置,并深入讨论原理图绘制.原理图绘制流程原理图设计规划环境参数设置(原理图绘制的)所需元器件库的安装绘制原理图导出原理图的设计到PCB设计项目。原理图绘制流程“原理图”作为“电子系统设计......
  • SpinalHDL之VHDL 和 Verilog 生成
    本文作为SpinalHDL学习笔记第十六篇,记录使用SpinalHDL代码生成Verilog/VHDL代码的方法。SpinalHDL学习笔记总纲链接如下:SpinalHDL学习笔记_spinalhdlblackbox-CSDN博客目录:1.从SpinalHDL组件生成VHDL和Verilog2.生成的VHDL和Verilog3.VHDL和Verilog属性......
  • 数字电路仿真实验【使用Multisim软件仿真】
    基本逻辑门电路功能测试与门仿真7408TTL2输入端四与门与门逻辑功能测试仿真电路及逻辑转换仪面板图与非门仿真7400TTL2输入端四与非门与非门逻辑功能测试仿真电路及逻辑转换仪面板图编码器电路功能测试通过4532BP优先编码器(8-3线编码器)功能表测试其逻辑功......
  • systemverilog的关联数组
    关联数组定义在SystemVerilog中,关联数组(AssociativeArrays)是一种非常灵活的数据结构,它可以使用任意类型的键(key)来索引数组中的元素。这使得关联数组特别适合于实现类似哈希表(hashtables)或字典(dictionaries)的功能,其中键可以是字符串、数字或其他复杂类型。data_typearray......
  • 数字电路-建立时间和保持时间详解
    对于数字系统而言,建立时间(setuptime)和保持时间(holdtime)是数字电路时序的基础。数字电路系统的稳定性,基本取决于时序是否满足建立时间和保持时间。我自己在初学时一度很难理解清楚他们的概念,在这里用笔记的方式尽量详细解释建立时间和保持时间的要点。1. 基本概念    ......