前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇组合电路的设计范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
中图分类号: TP331.1 文献标识码: A 文章编号:
1 组合逻辑电路的分析
组合逻辑电路的分析过程如下:
(1)由给定的逻辑电路图,写出输出端的逻辑表达式;
(2)列出真值表;
(3)从真值炭概括出逻辑功能;
(4)对原电路进行改进设计,寻找最佳方案。
举例说明分析过程如下:
已知逻辑电路如图1所示,分析其功能。
解:第一步:写出逻辑表达式。由前级到后级写出各个门的输出函数
第二步:如出真值表,如表2所示。
第三步;逻辑功能描述。真值表已经全面地反映了该电路的逻辑功能。下面用文字描
述其功能。达一步对初学者有一定的困难,但通过多练习,多接触逻辑学问题,也不难
掌握。
由真值表可以看出,在输入三变量中,只要有两个以上变量为1,则输出为1,故该电路可概括为:三变量多数表决器。
第四步;检验该电路设计是否最简,并改进。
画出卡诺图,化简结果与原电路一致,说明原设计合理,无改进的必要。
(图1) (图2)
2组合逻辑电路的设计
电路设计的任务就是根据功能设计电路。一般按如下步骤进行:
(1)将文字描述的逻辑命题变换为真值表,这是十分重要的一步。作出真值表前要仔
细分析解决逻辑问题的条件,作出输入、输出变量的逻辑规定,然后列出真值表。
(2)进行函数化简,化简形式应依据选择什么门而定。
(3)根据化简结果和选定的门电路,画出逻辑电路。
(例2)设计三变量表决器,其中A具有否决权。
解第一步:列出真值表。
设A、B、C分别代表参加表决的逻辑变量,F为表决结果。对于变量我们作如下规
定:A、B、C为1表示赞成,为0表示反对。F=1表示通过,F=0表示被否决。真值表如
图3所示。
第二步:函数化简。
我们选用与非门来实现。画出卡诺图,其化简过程如图4所示,逻辑电路如图5所示。
(图3)
(图4)(图5)
参考文献:
1、罗朝杰.数字逻辑设计基础.北京:人民邮电出版社,1982.
2、(美)纳尔逊(Neslon,V.P.),等.数字逻辑电路分析与设计.英文影印本.
华大学出版社,1997.
3、王毓银.脉冲与数字电路.3版.北京:高等教育出版社,1999.
关键词:口袋实验室;数字逻辑;组合逻辑电路;嵌入式系统
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)28-0268-03
口袋实验室,又称无墙实验室,就是让学生人手一个迷你“口袋实验箱”,上课带来、下课带走,课程结束时归还。学生有了一个小的实验平台,就可以结合课程内容,随时随地进行课程实验;同时,激荡在学生头脑中的创新想法可以即时得到验证,激发他们主动学习的兴趣。
口袋实验室这种形式使实验设备突破了实验室的限制、实验课时的限制,能够把最新的技术补充到学生的课余学习中,让学生随时随地都能进行实验,从而最大程度地实现了实验室的开放。
目前口袋实验室理念在国内多所高校已得到广泛的认可和贯彻,如清华大学、北京大学、哈尔滨工业大学、复旦大学、同济大学、上海交通大学、东南大学、华中科技大学等都建起了数量、规模各异的口袋实验室。
本组合逻辑电路设计就是基于Xilinx(赛灵思公司)Basys3口袋实验室的。在性能更好的NEXYS4或ZYBO实验板上也可实现。
1 口袋实验室之核心硬件Basys3
Basys3 实验板(见图1)是一款采用Xilinx最新7系列的数字电路入门级开发平台,该平台主芯片为Xilinx Artix系列中的最小型号 XC7A35T。它包含5200个slice资源,相当于33,280个逻辑单元。每个slice包含4个6输入查找表(LUT),8个触发器 。容量为1800kb的块状RAM 以及5个时钟管理单元,每个单元带有一个锁相环。Basys3同时也是一款入门级的FPGA实验板,专门针对Vivado Design Suite而设计,具有Xilinx Artix-7 FPGA架构。Basys3包含了所有Basys系列板卡的标准功能:完备的硬件规格,大 量的板载IO设备,所有需要FPGA支持的电路,以及免费的开发工具,上手即用。
采用Basys3 可以实施更贴近嵌入式方向专业要求的数字逻辑实验项目,形成符合嵌入式方向专业要求的数字逻辑实验课程。可解决现有《数字逻辑》实验课程的教学要求与嵌入式方向专业要求相比有些偏低的问题。同时可以解决现有面向嵌入式方向的基础实验课程实验平台各异,实验内容不够贯通的问题。
2 口袋实验室之核心软件Vivado
赛灵思在全球业界第一个发货和量产28nm 7系列器件后,2012年又推出了“Vivado”这一全新的FPGA设计套件,很可能在将来取代已经面世18年之久的赛灵思ISE设计套件。Vivado的推出,不仅仅是让设计的界面更加漂亮(如图2所示),更重要的是它带给行业的那种体现在设计手段和设计方法上的的创新。众所周知,对于电子设计工程师来说,一方面要求FPGA能实现所有的数字系统功能,包括:数字逻辑、嵌入式系统和数字信号处理等等;另一方面又要求基于FPGA的设计就像他们使用“C”语言给CPU、MCU编程那样的简单。Vivado将这两个看起来相互矛盾的梦想变成了现实。
在Vivado 2014.3环境下如同前期的ISE环境,可以非常方便地运用Verilog HDL语言的编程开发流程,包括源程序的输入、编译、模拟仿真及程序下载。
通过学习Verilog硬件描述语言,以及利用Verilog HDL进行数字电路设计和FPGA开发的方法。可让学生初步掌握代表当今数字逻辑设计前沿的FPGA开发的设计流程。除基本组合逻辑电路实验外,还可以追加时序逻辑电路的设计实验、。
3 口袋实验室之组合逻辑电路设计实验
本实验所用口袋实验室为Basys3电路板,板上的LED灯是共阴极的连接方式,当输入高电平‘1’时,LED亮;当拨动开关靠近数字标称端输出为低电平‘0’。
3.1 简单门电路的实现
在数字电路中,二输入与门电路、或门电路、非门电路、与非门电路、或非门电路和异或门电路的逻辑表达式如下所示,真值表如表1。
下面分别给出这些门电路的行为描述方式(Behavioral)和逻辑寄存器传输描述方式(Register Transfer Level,RTL)。可以看出,行为描述方式和逻辑表达式十分接近,而寄存器传输描述方式则是以真值表为依据进行编写的。 具体操作步骤如下:
(1) 利用向导,建立一个新项目,工程名为expe1,顶层文件名也指定为gate。
(2) 新建一个Verilog HDL文件。
(3) 在Verilog HDL文件中输入程序:
a 行为描述方式源程序:
module gate(a,b,c1,c2,c3,c4,c5,c6);
input a,b;
output c1,c2,c3,c4,c5,c6;
assign c1=a&b;
assign c2=a|b;
assign c3=~a;
assign c4=~(a&b);
assign c5=~(a|b);
assign c6=a^b;
endmodule
b 寄存器传输描述方式源程序:
module gate(a,b,c1,c2,c3,c4,c5,c6);
input a,b;
output c1,c2,c3,c4,c5,c6;
reg c1,c2,c3,c4,c5,c6;
always@(a or b) begin
case({a,b})
2'b00:
begin
c1
end
2'b01:
begin
c1
end
2'b10:
begin
c1
end
2'b11:
begin
c1
end
default:
begin
c1
end
endcase
end
endmodule
(1) 进行语法检查和综合编译。
(2) 编写testbench,进行时序仿真。
(3) 分配管脚,生成*.bit文件(管脚分配可参照后续实验结果部分)。
(4) 下载。
3.2 三态门电路的实现
在数字电路中,三态门电路是在普通门电路的基础上附加控制电路构成的。三态门主要用于可编程逻辑器件管脚的双向口设置。三态门的逻辑电路图如图3所示,真值表如表2。
根据三态门的逻辑电路图和真值表,不难看出三态门电路的基本工作原理是:当控制端口的输入使能信号EN=’1’,那么直接将输入端口的数据送到输出端口上;当控制端口的输入使能信号EN=’0’,那么这时输出端口呈高阻状态。 具体操作步骤如下:
(1) 利用向导,建立一个新项目,工程名为expe2,顶层文件名也指定为tri_gate。
(2) 新建一个Verilog HDL文件。
(3) 在Verilog HDL文件中输入程序:
module tri_gate(din,en,dout);
input din,en;
output dout;
reg dout;
always@(din or en) begin
if(en==1) dout
else dout
end
endmodule
(4) 进行语法检查和综合编译。
(5) 进行时序仿真。
(6) 重新分配管脚,生成*.bit文件(管脚分配可参照实验结果部分)。
(7) 下载。
3.3 实验结果
1) 两输入与门电路的管脚分配表和实验结果对照表见表3、表4。
2) 二输入或门电路、非门电路、与非门电路、或非门电路和异或门电路的管脚分配表和实验结果对照表见表5、表6。
3) 三态门电路的管脚分配表和实验结果对照表见表7、表8。
4 结束语
本组合逻辑电路设计是基于Xilinx(赛灵思公司)Basys3口袋实验室实现的,主要内容为简单门电路和三态门电路。在此口袋实验室的电路板上还可以实现编码/译码器,比较器,全加器等组合逻辑功能。项目中使用的口袋实验室由于其优秀的软、硬件平台,在本科教学中有多方面的应用价值。
1)在Vivado 2014.3环境下,可推动Verilog HDL基本语法的学习,有利于学生掌握Verilog HDL编程设计的基础。 而Verilog HDL和VHDL并称为业界最流行的两种硬件描述语言,其重要性不言而喻。
2)在本科嵌入式方向的《数字逻辑》、《计算机组成原理》、《计算机系统结构》三门课程间有一条衔接与贯通的主线:即由计算机组成基础部件到单/多周期CPU和中断/IO处理CPU,再到基本流水线CPU。本实验平台可直接应用于这三门课程。不仅能节约学生熟悉实验平台的时间,而且同一实验平台有利于他们温故而知新。
3)让嵌入式方向的学生开始学习满足较高专业需求的实验内容。打通面向嵌入式方向的基础实验课程的教学内容,有利于学生较系统、深刻地掌握满足专业要求的软硬件知识,锻炼他们的系统设计能力。
参考文献:
[1] 白中英,谢松云等.数字逻辑[M].6版.北京:科学出版社,2013.
[2] RichardE.Haskell著,郑利浩译.FPGA数字逻辑设计教程―Verilog[M].北京:电子工业出版社,2013.
[3] 何宾.Xilinx FPGA设计权威指南:Vivado集成设计环境[M].北京:清华大学出版社,2014.
关键字:数字电路;组合逻辑电路;时序逻辑电路
中图分类号:TN79文献标识码:A 文章编号:1673-0992(2010)06A-0042-01
众所周知,近年,科学技术的不断进步带动许多行业发生了翻天覆地的变化,电子信息行业走在了科学发展的前列,表现尤为突出的是数字电子技术,科学进步的浪潮中它迅速前进,已成为当前发展最快的学科之一,数字逻辑器件已从60年代的小规模集成电路(SSI)发展到目前的中、大规模集成电路(MSI、LSI)及超大规模集成电路(VLSI)。那么,逻辑器件的变化也会影响整个数字逻辑电路的发展。
一、数字电路的状态
数字电路顾名思义就是对数字信号进行算术运算和逻辑运算的电路,它只有两个状态就是0和1。在数字电路中,低电平用0表示,高电平用1表示,有时低电位也用字母L(Light)表示,而高电位用字母H(High)表示。另外在对0和1理解时,还会有时间限制,因为数字0、1表示电路状态,结合时间看电路时,要明白电路工作时序。
二、数字逻辑电路的基本定律
数字电路的设计在生活中使用非常广泛,但是怎样设计出符合要求的电路,这就是一门技术活了。因此理解数字电路设计,重点在基本概念和基本方法上。数字设计中逻辑代数基本定律、组合逻辑和时序逻辑的概念是分析和设计数字系统的基础,也是设计大规模集成芯片的基础,所以我们在说数字电路设计之前就要先了解逻辑代数的基本知识定律。逻辑代数是英国数学家乔治.布尔(Geroge . Boole)于1847年首先进行系统论述的,也称布尔代数。 所研究的是两值变量的运算规律,即0,1表示两种不同的逻辑状态,称这种只有两种对立逻辑状态的逻辑关系为二值逻辑。在逻辑代数中我们最先了解的就是进制的转换,计算机系统中一般二进制、八进制、十进制、十六进制是了解最多的,转换这些进制也是最容易的,掌握其中的计算方法就能得到。
三、数字电路设计―组合逻辑和时序逻辑
在做数字电路设计时主要就是组合逻辑电路设计和时序逻辑电路设计。从一方面说,这两种电路的设计是数字电路中的一个最基本的也是最重要的部分,只有会做这两种电路的设计才算是对数字电路入门了。所以我们先对这两种设计作下简单的介绍。
如果说逻辑电路设计是数字电路的最基础的组成部分,那么门电路就是带动这些部分运转的重要元素,就像是一部机器,门电路就是机器中的零件,大家都知道零件在机器的运转中起着不容小觑的作用,如果在某个部位因为一个小零件的出错,可能会导致整个机器出故障。逻辑电路中最基本的门电路通常是与门、或门、非门。与门是逻辑与运算的单元电路;或门是逻辑或运算的单元电路;非门,也叫反相器,是实现逻辑非运算的电路。在实际的应用中并不是把它们直接使用,而是将它们组合成复合逻辑运算与非、或非、与或非、异或、同或等常用的门来实现其功能。我们在日常生活中见得最多的就是交通灯的控制,就是用组合逻辑电路设计成的。在组合逻辑电路的设计中,利用门电路的组合完成的很多电路的设计,编码器、译码器就是组合逻辑电路中的器件,组成的液晶显示器LCD,数码显示器LED。
时序逻辑电路中,主要的零件就是集成触发器,在各种复杂的数字电路中不但需要对二值信号进行算术运算和逻辑运算,还经常需要将这些信号和运算结果保存起来,因此需要使用记忆功能的基本逻辑单元,而这种能储存信号的基本单元电路就是触发器。迄今为止,人们已经研制出了很多种触发器电路,根据电路结构形式的不同,可以分为基本RS触发器、同步RS触发器、主从触发器、边沿触发器等。这些触发器的研制都是在前一种触发器的基础上改进而来的,通俗的说是后人在前人的研究发明中不断提炼出的新器件。因此同步触发器是建立在基本RS触发器的基础上的,基本RS触发器输入信号可以直接控制触发器的状态翻转,而在实际应用中往往要求在约定脉冲信号到来时,触发器才能翻转,所以才有同步RS触发器的出现。但是同步RS触发器有空翻现象,不能正常计数,因此人们又研制了主从触发器,同样为了克服主从触发器的一次性变化,就有了边沿触发器的产生。
四、数字集成电路
在很多人看来,数字集成电路是非常空洞的东西,因为只是一块芯片,却能实现如此多的功能。那在数字集成电路中主要有哪些电路呢?常用的数字集成电路一般有CMOS电路和TTL电路两种。CMOS电路有消耗功率低,工作电压范围广和噪声容限大的特点,虽然在CMOS电路的输入端已经设置了保护电路,但由于保护二极管和限流电阻的几何尺寸有限,它们所能承受的静电电压和脉冲功率均有一定限度。CMOS集成电路在储存运输、组装和调试过程中难免会接触到某些带静电高压的物体,所以一般要对输入的静电进行保护,另外CMOS还会出现电路锁定效应,一般为了使用安全和方便,人们一直在研究从CMOS电路本身的设计和制造上克服锁定效应方法。当然,集成电路一般的要求都非常高,它需要预先对芯片进行设计,编制一定的程序,而我们往往使用现成的电路,对它只做了一定的分析。
通过对数字电路的基本知识的解读,当然这只是很浅的一方面。而数字电路涉及到的一些专用的集成电路。由于专用集成电路(ASIC)是近期迅速发展起来的新型逻辑器件,这些器件的灵活性和通用性使它们已成为研制和审计数字系统的最理想器件。因此数字电路的发展在今后还有很大的空间,但是在发展的同时,数字电路的基础的知识是不会改变的,只会在原来的基础上得到更大的改进,这需要新新的电子人来改进数字电路的不足地方,将它所存在的每一个缺点进行弥补,使各个部分它的作用发挥到最大。
数字电路在实际运用中将越来越广泛,现在在要求普及的数字电视已经进入了千家万户,数字化已经成了必然的趋势。但是任何技术知识,基础都是最根本,最主要的,数字电路的组成刚好是是基础。数字化的时代已经到来,打好基础知识是数字电路发展的前提条件。
关键字:FPGA;高速低功耗; 方法措施
FPGA的功耗高度依赖于用户的设计,没有哪种单一的方法能够实现这种功耗的降低,如同其它多数事物一样,降低功耗的设计就是一种协调和平衡艺术,在进行低功耗器件的设计时,人们必须仔细权衡性能、易用性、成本、密度以及功率等诸多指标。
FPGA设计的总功耗包括静态功耗和动态功耗两个部分。其中,静态功耗是指逻辑门没有开关活动时的功率消耗,主要由泄漏电流造成的,随温度和工艺的不同而不同。静态功耗主要取决于所选的FPGA产品。
动态功耗是指逻辑门开关活动时的功率消耗,在这段时间内,电路的输入输出电容完成充电和放电,形成瞬间的轨到地的直通通路。与静态功耗相比,通常有许多方法可降低动态功耗。
为提高FPGA的数据处理速度及降低芯片功耗,逻辑电路设计应重点采用以下措施:
(1)采用流水线,降低芯片功耗,提高系统时钟。流水线是一种设计技巧,它在很长的组合逻辑路径中插入寄存器,寄存器虽增加了运算周期数,却能大大减少组合逻辑延时,提高整个系统工作频率。有流水线电路在占用资源略有增加情况下,工作速度是没有流水线电路的2倍多,可见,少量资源换来了芯片工作速度的成倍增加。
(2)按面积优化组合逻辑,减小组合逻辑的复杂性,从而减少组合电路需要的逻辑门数量,逻辑门数的减少,意味着芯片功耗的降低。流水线的使用已经保证芯片具有足够高的处理速度,各个寄存器间的组合逻辑不再以速度为优化目标进行设计,考虑到功耗要求,应以最少的逻辑门数实现该功能。
(3)以原理图描述功能模块的数据流,以VHDL语言的行为语句描述控制流。这种逻辑电路设计思想,充分利用原理图设计直观、形象和VHDL输入法简单明了的优势,既可以获得具有高效率流水线结构的同步电路,又能够大大缩短设计时间。
(4)在电路设计过程中,应使用“自底向上”与“自顶向下”设计相结合、“逻辑设计”与“功能仿真”交替进行的设计技巧,以保证逻辑电路的层次化、模块化以及功能的正确性。首先把逻辑复杂的功能模块,分割为几个相对简单的小模块;然后分别设计这些小模块,进行功能仿真,发现错误,修改设计,再仿真……,直到功能完全正确;再实例化小模块,组成功能复杂的大模块,依旧重复功能仿真、修改设计的过程;再实例化这些大模块,构成更上层模块……,最后获得功能完全正确的逻辑电路。
(5)在时钟网络上减少开关动作也可大幅降低功耗。多数可提供独立全局时钟的FPGA是分割为几部分的,若一个设计间歇地采用部分逻辑,就可关掉其时钟以节省功耗。最新FPGA中的PLL可禁止时钟网络并支持时钟转换,因此既可关掉时钟也可转换为更低频率的时钟。更小的逻辑部分能够潜在地使用本地/局域时钟来替代全局时钟,因此不必使用不相称的大型时钟网络。
(6)对易受干扰的设计而言,减少意外的逻辑干扰可大幅降低动态功耗。意外干扰是在组合逻辑输出时产生的暂时性逻辑转换。减少这种效应的一个方法是重新考虑时序设计,以平衡时序关键路径和非关键路径间的延迟。用户可在软件工具的帮助下应用这种方法,例如某软件可通过组合逻辑移动寄存器的位置,以实现平衡时序。另外一种方法是引入流水线结构,以减少组合逻辑深度,流水线还有助于增加速度。第二种方法对无意外干扰设计的效果不明显,相反还可能增加功耗。
方便快捷的精确功率估算工具,不仅有助于设计工程师对功率进行定量评估,同时也有助于加快产品设计进度。如果在初期功率评估工具和数据表中没有实际数据,设计工程师就不能在设计阶段走得更远。获取初期评估数据工具,可使设计人员在设计开始之前就进行功率估算。此外作为设计规划,工程师可将布局和布线设计加载到更精确的功率评估持续当中,从而得到一个更精准的功耗描述。最好的评估工具可使仿真文件无缝集成到电源工具中,因而能够获得开关功率的精确描述;若不能进行仿真,则该工具也能自动给出FPGA设计的评估参数。
参考文献:
(西安邮电大学电子工程学院,陕西西安710121)
摘要:为了高效地利用Verilog HDL语言中always行为建模语句设计集成电路,采用比较和举例论证的方法,总结出always语句中事件控制敏感信号对设计仿真的影响。always语句中敏感信号分为时钟边沿信号和电平信号,对于敏感信号为时钟边沿信号,仿真结果直观简单;但是对于敏感信号为电平信号,敏感信号必须是所有的输入和判断语句的信号,否则仿真结果不确定。
关键词 :Verilog HDL;always语句;敏感信号;时钟边沿信号;时钟电平信号
中图分类号:TN911.6?34;TP312 文献标识码:A 文章编号:1004?373X(2015)15?0032?03
收稿日期:2015?02?26
基金项目:陕西省教育厅专项科研基金(2013JK0626);西安邮电大学青年教师科研基金资助项目(101?1215;101?0473)
0 引言
硬件描述语言(Hardware Description Language,HDL)是一种用形式化方法来描述数字电路和系统的语言。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的,两种HDL 均为IEEE 标准。但是Veriolg 语言的很多规定与C语言相似,代码简单,有大量支持仿真的语句与可综合语句,对于初学者设计简单的数字系统,更容易学习和掌握[1]。所以,Verilog HDL语言在大规模集成电路和现场可编程门阵列设计中得到了广泛的应用[2?4]。
在集成电路设计中,Verilog语言中的always语句经常用来描述时序逻辑电路和组合电路。always语句是一种结构化的过程语句,是行为级建模的基本语句,它的语句格式为:always@(敏感事件列表),敏感事件可以是时钟边沿信号也可以是电平信号,分别对应时序逻辑电路和组合逻辑电路[5]。敏感事件列表中可以包含多个敏感事件,只要所列举的任意一种情况发生,都将激活事件控制,各个敏感事件之间是“或”的关系;但不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。而且,按照语法要求,在always块中只能给寄存器变量赋值。
在实际应用中,敏感信号为时钟边沿信号,仿真综合结果一般正确。但是当敏感信号为电平信号时,情况就会变得复杂,仿真综合结果会变得不确定。文献[6]对always敏感信号与仿真结果的这种不确定性问题也进行了肯定,但是并没有进一步的分析。本文对always语句中的事件控制敏感信号出现的各种情况进行对比探讨,发掘always语句中敏感信号分别为时钟边沿信号和电平信号的差异,并通过仿真图形去验证。
1 敏感信号为时钟边沿信号
Always语句中的敏感信号如果为时钟边沿敏感事件,一般用来表示时序逻辑电路,时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与之前的输入有关。从电路行为上讲,不管输入如何变化,仅当时钟的沿(上升沿或下降沿)到达时,才有可能使输出发生变化[7]。这里以经常用到的D触发器为例,其仿真图如图1所示。
上面所述的D 触发器,赋值语句为q<=a|b,等式右端为wire型变量。再举个多敏感信号的时序逻辑电路的例子,比如带有清零端的16 分频,其仿真图如图2所示。
只要在always块的敏感信号表中定义有效的时钟沿,敏感词的作用立竿见影,然后使用过程赋值语句对信号赋值,就可以实现时序逻辑电路。
2 敏感信号为电平信号
always语句中的敏感信号如果为电平敏感事件,一般用来表示组合逻辑电路,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路。从电路行为上看,其特征就是输出信号的变化仅仅与输入信号的电平有关,不涉及对信号跳变沿的处理[8]。always电平敏感信号列表,必须将所有的输入信号和条件判断信号都列在信号列表中。有时不完整的信号列表会造成不同的仿真和综合结果,因此需要保证敏感信号的完备性。在实际的PLD 器件开发中,EDA 工具都会默认将所有的输入信号和条件判断语句作为触发信号,增减敏感信号列表中的信号不会对最终的执行结果产生影响,因此如果期望在设计中通过修改敏感信号来得到不同的逻辑,是不能实现的,这也是经常犯错的地方,这是因为仿真器在工作时不会自动补充敏感信号表。如果缺少信号,则无法触发和该信号相关的仿真进程,也就得不到正确的仿真结果。这里以一个2?4译码器为例,其仿真图如图3所示。
如果想用一个敏感信号来控制逻辑变化,比如当enable信号的电平发生变化时,再去译码,程序如下,仿真图如图4所示。
由图4 可以看出,这并不是所需的结果,这就是前面所说的,系统自动将所有的输入作为了敏感信号。
因此,在应用always块语句表述组合逻辑电路时,一定要注意敏感信号的完整性,要求触发为所有内部用到的信号,可以用always@(*),此时,综合工具和仿真工具会自动将所有的敏感信号自动加入敏感信号列表。
前面已经提到过always敏感信号不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。在设计中,一些初学的设计者经常在时钟的上升沿和下降沿都进行计数器加1,以为这样能实现倍频,仿真结果如图5所示。
从图5中可以发现并没有出现想要的结果,而是呈现出了高阻态。将直接加1运算改为直接的赋值语句,程序如下,仿真结果如图6所示。
从图6中可以看出,cnt8这个变量存储的是最后一次赋值,这时当always敏感信号为电平信号,系统默认为组合逻辑电路,虽然将信号定义为reg 型,但只是为了满足always 模块中的信号必须定义为reg 型的语法要求,最终的实现结果中并没有寄存器,在图5中出现高阻态,因为cnt8=cnt8+1是计数器,是时序逻辑电路。
3 结论
本文对Verilog语言中always块语句中的敏感信号进行了对比探讨,得到如下结论:
(1)如果敏感信号是时钟边沿触发信号,表示的是时序逻辑电路,而且在描述时序电路的always 块中的reg型信号都会被综合成寄存器,而且时序逻辑的敏感信号列表只需要加入所用的时钟触发沿即可。
(2)如果敏感信号是电平触发信号,表示的是组合逻辑电路,这里一定要注意敏感信号的完整性,即所有的输入和判断语句的信号都要加为敏感信号,否则,得不到想要的设计结果。
(3)在组合逻辑电路描述中,将信号定义为reg型,只是为了满足always模块中的信号必须定义为reg 型的语法要求,最终实现结果中并没有寄存器。
参考文献
[1] PALNITTKAR S.Verilog HDL 数字设计与综合[M].夏宇闻,胡燕祥,刁岚松,译.2版.北京:电子工业出版社,2009.
[2] 孙继荣,李志蜀,王莉,等.程序切片技术在软件测试中的应用[J].计算机应用研究,2007,24(5):210?213.
[3] 宁佐林,邱智亮.PCI桥接IP Core 的Verilog HDL 实现[J].电子科技,2006,19(4):43?46.
[4] 赵东,耿卫东,吴春亚,等.用FPGA 实现OLED 灰度级显示[J].光电子? 激光,2002,13(6):554?558.
[5] 罗杰.Verilog HDL与数字ASIC设计基础[M].武汉:华中科技大学出版社,2008.
[6] PADMANABHAN T R,SUNDARI B B T. Design through Verilog HDL [M]. New York:John Wiley & Sons,2013.
[7] CILETTI M D. Advanced digital design with the Verilog HDL [M]. 2nd ed. Beijing:Electronic Industry Press,2010.