verilog,为啥设计组合电路时不能引入反馈
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog,为啥设计组合电路时不能引入反馈相关的知识,希望对你有一定的参考价值。
自己设计时从没考虑过这种问题,我觉得自己应该不会带的.....但是怎么才叫组合逻辑带有反馈?搜了一下完全没搜到。希望有人能帮我解释一下.....
1、组合电路为什么不能有反馈
2、写一小段带有反馈的组合电路(verilog语言)
感激不尽!
always @ (a)
a = a + 1;
组合逻辑“可以”有反馈 因为这段代码可以被编译和实现 是组合电路
但是编译器肯定给出警告 因为这段代码的结果没有实际意义 根本不知道结果是多少(加法会执行几次?)
但是并非所有的组合逻辑环都没有实际意义 有些特定结构的运算用组合反馈来实现的结果是确定的 并且会比不用反馈的节省逻辑资源 (可以在google搜索vlsi.cs.ucf.edu combinational circuit with feedback 读第一个pdf) 参考技术A
组合逻辑电路会不停产生连续动作,这就很难使用组合ATPG工具
可能会导致竞争和冒险,产生无法预计的电路动作
环路通常是与延迟相关的,任何ATPG算法都无法对其进行测试
ATPG:
Automatic Test Pattern Generation(ATPG)自动测试图形向量生成是在半导体电器测试中使用的测试图形向量由程序自动生成的过程。测试向量按顺序地加载与器件的输入脚上,输出的信号被收集并与预算好的测试向量相比较从而判断测试的结果。ATPG有效性是衡量测试错误覆盖率的重要指标。
具体的组合逻辑环实例如楼上写法
追问谢谢了,不过楼上的比较详细速度也快.....0v0
Verilog中的UDP
概述
Verilog HDL语言提供了一种扩展基元的方法,允许用户自己定义元件(User Defined Primitives,UDP)。通过UDP,可以把一块组合逻辑电路或者时序逻辑电路封装在一个UDP内,并把这个UDP作为一个基本的元件来使用。需要注意的是,UDP不能综合,只能用于仿真。
UDP的定义与调用
UDP定义的语法和模块定义类似,但由于UDP和模块同属于同级设计,因此,UDP定义不能出现在模块之内。UDP定义使用由关键词primitive和endprimitive封装起来的一段代码,这段代码定义了该UDP的功能。这种功能的定义是通过表来实现的,即在这段代码中有一段处于 关键词table和endtable之间的表,用户可以通过设置该表来规定UDP的功能。
UDP的定义格式如下:
primitive<元件名称>(<输出端口名>,<输入端口名1>,输入端口名1>...输入端口名n>);
输出端口类型声明(output);
输入端口类型声明(input);
输出端口寄存器 变量说明(reg);
元件初始状态说明(initial);
table
<table 表项1>;
<table 表项2>;
......
<table 表项n>;
endtable
endprimitive
与Verilog HDL中的模块相比,UDP具有以下特点:
(1)UDP的输出端口只能有一个,且必须位于端口列表的第一项。只有输出端口能定义为REG类型。
(2)UDP的输入端口可有多个,一般时序电路UDP的输入端口最多9个,组合电路UDP的输入端口可多至10个。
(3)所有端口变量的位宽必须是1比特。
(4)在table表项中,只能出现0,1,x这三种状态,z将被认为是x状态。
根据UDP包含的基本逻辑功能,可以将UDP分为组合电路UDP、时序电路UDP及混合电路UDP,这几类UDP的差别主要体现在table表项的描述上。
UDP的调用和verilog HDL中模块的调用方法相似,通过位置映射。其语法格式如下:
UDP名 例化名(连接端口1信号名,连接端口2信号名,连接端口3信号名,...);
UDP定义的全加器
组合逻辑电路的功能列表类似真值表,规定了不同的输入值和对应的输出值,表中每一行的形式是"output ,input1,input2...",排列顺序与端口列表中的顺序相同。组合电路UDP的输入端口可多至10个。如果某个输入,输出组合没有定义输出,那么就把这种情况的输出置位x。
3选1多路选择器
?代表不必关心相应变量的具体值。
UDP原语中可以使用的值
UDP还可以描述具有电平触发和边沿触发特性的时序电路。时序电路拥有内部状态序列,其内部状态必须用寄存器变量进行建模,该寄存器的值就是时序电路的的当前状态,它的下一个状态是由放在基本功能列表中的状态转换表决定的,而且寄存器的下一个状态就是这个时序电路UDP的输出值。所以时序电路UDP由两部分组成——状态寄存器和状态列表,定义时序电路UDP的工作也分为两部分——初始化状态寄存器和描述状态列表。
在时序电路的UDP描述中,01、0x、x1代表着信号的上升沿。
通过verilog hdl语言给出D触发器的UDP描述
表项(01)表示从0转换到1,表项(0x)表示从0转换到x,表项(?0)表示从任意值转换到0,表项(??)表示任意转换。对于未定义的转换,输出默认为x,假定D_Edge_FF为UDP定义,则它现在就能够像基本门一样在模块中使用。
版权所有权归卿萃科技 杭州FPGA事业部,转载请注明出处
作者:杭州卿萃科技ALIFPGA
原文地址:杭州卿萃科技FPGA极客空间 微信公众号
扫描二维码关注杭州卿萃科技FPGA极客空间
以上是关于verilog,为啥设计组合电路时不能引入反馈的主要内容,如果未能解决你的问题,请参考以下文章