当前位置:文档之家› 基于verilog_hdl语言的多功能波形发生器设计

基于verilog_hdl语言的多功能波形发生器设计

《基于V erilog HDL语言的多功能波形发生器设计》第1页共22页

基于Verilog HDL语言的多功能波形发生器设计

学生姓名:指导老师:

摘要:本文主要探索了应用EDA灵活可重复编程和方便在系统重构的特性,以Verilog HDL为设计语言,将硬件功能以软件设计来描述,提高了产品的集成度,缩短开发周期。所设计的波形发生器可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换并且频率可调;设计的频率计以1Hz为基准信号,测量的范围是1Hz—9999Hz,测量的结果以四位十进制的形式输出。能实现任意波形的输出并且能够测量外来信号的频率,这也是本文的设计思路。

关键词: DDS;;Verilog HDL;EDA;Max+PlusⅡ;波形发生器

Abstract:This article explores the application of EDA to facilitate flexible and reprogrammable and reconstruction in the system features to Verilog HDL design language, the hardware functions to software design to describe and improve product integration, shorten the development cycle. Waveform generator designed to produce sine wave (sina_wave), ramp (swat_wave), rectangular wave (squr_wave), triangular wave (trig_wave) four signals, to achieve signal conversion and frequency adjustable; designed to 1Hz frequency counter For the reference signal, measured in the range 1Hz-9999Hz, the measurement results in the form of four decimal output. which is the design idea of this article .

Key words: DDS; Verilog HDL;EDA; Max+PlusⅡ; a rbitrary waveform generator

目录

1 引言 (1)

2 课题背景及相关技术 (1)

3 理论基础 (2)

3.1 Verilog HDL语言概述 (2)

3.2 Max+plusII简介 (4)

4 EDA多功能波形发生器详细设计 (6)

4.1设计思路 (6)

4.2任意波形发生器的分块设计 (6)

5 任意波形发生器的仿真与实现 (8)

5.1指针控制模块的仿真与实现 (8)

5.2数字频率计的仿真与实现 (9)

5.3系统设计有待提高和改进的地方 (12)

6 小结 (13)

参考文献 (14)

附录 (15)

1 引言

随着数字电子技术迅猛发展,信号源作为常用的电子产品设计工具,其应满足精度高、速度快、分辨率高等要求。DDS是从20世纪70年代发展起来继直接频率合成和间接频率合成之后的第三代频率合成技术。Verilog HDL是一种允许设计者进行各种级别的逻辑设计,进行数字逻辑系统的仿真验证、时序分析、逻辑综合的硬件描述语言。并采用MAX+PlusⅡ软件进行画图,编译,仿真。

2 课程设计背景及相关技术

随着数字电子技术迅猛发展,信号源作为常用的电子产品设计工具,其应满足精度高、速度快、分辨率高等要求。DDS是从20世纪70年代发展起来继直接频率合成和间接频率合成之后的第三代频率合成技术。Verilog HDL是一种允许设计者进行各种级别的逻辑设计,进行数字逻辑系统的仿真验证、时序分析、逻辑综合的硬件描述语言。Quartus Ⅱ6. 0是Altera公司推出的CPLD /FPGA结构化ASIC开发设计软件。

信号发生器(signal generator),又称信号源或振荡器,是一种能在模拟域或数字域中以一定频率产生可复现的精确校准信号的电子测试仪器。根据输出信号波形的不同,信号发生器可以分为:函数信号发生器(正弦信号发生器、矩形信号发生器、三角波信号发生器等)、脉冲信号发生器、随机信号发生器及任意波形发生器等。任意波形发生器(Arbitrary Waveform Generator, AWG),是信号发生器的一种,是能够精确产生用户定义的任意波形的电子测试设备。不同于仅能产生有限简单波形的函数发生器,用户可以对任意波形发生器定义各种不同的复杂可变的波形信号。根据结构形式,任意波形发生器主要有两种:

* 独立控制式任意波形发生器

* 总线控制式任意波形发生器任意波形发生器的关键技术是频率合成技术,目前常用任意波形发生器的频率合成技术主要有DDS技术和可变时钟技术。早期的任意波形发生器仅能输出低频信号,随着数字技术的发展,其输出频率已能达到射频范围。

PLD(Programmable Logic Device)是可编程逻辑器件的总称,PLD基本上可以完成任何数字器件的功能,从高性能CPI到简单集成电路,均可以用PLD实现。通过传统的原理图输入,或是硬件语言的描述就可以自由地设计具备某种功能的数字系统:利用软件仿真功能,可以检验设计的正确性;利用PLD的在线修改能力,可以在不必改

动硬件电路的基础上进行修改设计。具备设计时间短,PCB面积小,系统的可靠性强等特点。目前,在通信、自动控制、信息处理等诸多领域发挥着重要的作用。

3 理论基础

3.1 V erilog HDL语言概述

电子设计自动化(EDA)的关键技术之一是要求用形式化方法来描述数字系统的硬件电路。V erilog HDL 硬件描述语言在电子设计自动化中扮演着重要的角色,他是EDA 技术研究的重点之一。

Verilog HDL是一种硬件描述语言(HDL:Hardware Discription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言。Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE 标准,即IEEE Standard 1364-1995。用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但Verilog HDL较自由的语法,也容易造成初学者犯一些错误,这一点要注意。

下面列出的是Verilog 硬件描述语言的主要能力:

(1)基本逻辑门,例如and 、or 和nand 等都内置在语言中。

(2)用户定义原语(UDP )创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。

(3)开关级基本结构模型,例如pmos 和nmos 等也被内置在语言中。

检查。

(5)可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模。

* Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。

* 能够描述层次设计,可使用模块实例结构描述任何层次。

* 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。

* Verilog HDL 不再是某些公司的专有语言而是IEEE 标准。

* 人和机器都可阅读Verilog 语言,因此它可作为EDA 的工具和设计者之间的交互语言。

* Verilog HDL 语言的描述能力能够通过使用编程语言接口(PLI )机制进一步扩展。PLI 是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。

* 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL )到算法级,包括进程和队列级。

* 能够使用内置开关级原语在开关级对设计完整建模。

* 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。

* Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。

* 在行为级描述中,Verilog HDL 不仅能够在RTL 级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述。

* 能够使用门和模块实例化语句在结构级进行结构描述。

* Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。

* Verilog HDL 还具有内置逻辑函数,例如& (按位与)和| (按位或)。

* 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。* 可以显式地对并发和定时进行建模。

* 提供强有力的文件读写能力。

* 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。

3.2 Max+plusII简介

Max+plusII(或写成Maxplus2或MP2) 是Altera公司推出的的第三代PLD开发系统(Altera第四代PLD开发系统被称为:Quartus,主要用于设计6万-100万门的大规模CPLD/FPGA)。使用MaX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MaX+PLUSII把这些设计转自动换成最终所需的格式。其设计速度非常快特别适合初学者使用。

通常可将Maxplus2设计流程归纳为以下7个步骤:

(1)使用文本编辑器输入设计源文件。在传统设计中,设计人员是应用传统的原理图输入方法来开始设计的。自90年代初,Verilog、VHDL、AHDL等硬件描述语言的输入方法在大规模设计中得到了广泛应用。

(2)前仿真(功能仿真)。设计的电路必须在布局布线前验证电路功能是否有效。

(3)设计编译。设计输入之后就有一个从高层次系统行为设计向门级逻辑电路设转化翻译过程,即把设计输入的某种或某几种数据格式(网表)转化为软件可识别的某种数据格式(网表)。

(4)优化。对于上述综合生成的网表,根据布尔方程功能等效的原则,用更小更快的综合结果代替一些复杂的单元,并与指定的库映射生成新的网表,这是减小电路规模的一条必由之路。

(5)布局布线。

(6)后仿真(时序仿真)需要利用在布局布线中获得的精确参数再次验证电路的时序。

(7)生产。布线和后仿真完成之后,就可以开始ASCI或PLD芯片的投产。

Max Plus II的设计流程可以用如下图3.1给出。

图3.1Max Plus II 设计流程

从图3.1可清晰了解到Max Plus II提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。他包括设计输入编辑、编译网表提取、数据库建立、逻辑综合、逻辑分割、适配、延时网表提取、编辑文件汇编以及编程下载9个步骤。

4 EDA多功能波形发生器详细设计

4.1设计思路

设计的思路主要是以实验室中常用的函数发生器为雏形,及既能输出任意波形,并且频

率可调,还可以测量外部信号的频率。实现这两种功能设计的方式有很多种,这里采用

EDA设计来实现,验证设计的芯片采用Cyclone系列,具体芯片可根据实验室的配置来确

定。语言采用Verilog HDL,软件以MAX+PlusⅡ为主。其中任意波形发生器的实现采用

模块设计,这样很好的利用了MAX+PlusⅡ软件中的LPM_ROM模块,能够达到最优设计;

频率计的功能完全采用HDL语言描述,最后的顶层文件采用模块设计来完成。最终的顶

层文件如下图所示:

图4.1顶层文件模块图

4.2任意波形发生器的分块设计

(1)Fre_measure模块:

图4.2 Fre_measure模块图

Fre_measure模块个引脚说明:

INCLK:系统的时钟信号。在计数测量部分,其被分频为1Hz信号;在动态扫描部分,其被分频为动态扫描脉冲。

RST:系统的复位时钟,高电平有效。

INCLK:输入的待测信号。

Qout[15:0]:若打算通过数码管静态显示,则Qout[15:12]为千位,Qout[11:8]为百位,Qout[7:4]为十位,Qout[3:0]为个位,都是十进制形式。

WARNING:超过量程时输出的警示信号。

DECODEOUT[6:0]:动态扫描显示时的译码输出,在扫描脉冲的作用下,循环的输出四位数据。

CTR_SEG[3:0]:四个数码管的未选信号,在扫描脉冲的作用下,与相应位的译码信号对应输出。

(2)Wave_gen模块:

图4.3 Wave_gen模块图

Wave_gen模块各引脚说明:

INCLK:输入的待测信号。

SELECT[1..0]:波形选择输入。

FREQ[3..0]:控制输出波形的频率。

ADDRESS[8..0]:输出地址指针。

(3)波形数据存储ROM模块

图4.4波形数据存储ROM模块

波形数据存储ROM模块个引脚说明:

Clock:输入时钟信号。

Address[8..0]:输入地址指针。

Q[7..0]:输出信号。

5 任意波形发生器的仿真与实现

要实现的功能:可产生正弦波(sina_wave)、锯齿波(swat_wave)、矩形波(squr_wave)、三角波(trig_wave)四种信号,能够实现信号的转换(select)并且频率可调。主要由三部分组成:地址指针控制模块,四种波形数据存储模块,D/A转换模块。前面2个模块在Max+plusII中实现,该部分的实现框图如下:

图4.5实现功能框图

5.1 指针控制模块的仿真与实现

该模块的功能采用Verilog HDL来描述,程序Wave_gen.v请见附件。程序实现的主要功能是:根据不同的波形选择(select[1:0]),来改变送入ROM中的地址指针address。四种波形一个周期的数据各占不同的16B,每次波形改变使address指向各段数据首地址。编译正确后将其创建为Wave_gen.bsf模块(见顶层文件中所示),然后采用图形编辑方式,完成波形发生器这部分电路的设计。。

该部分功能验证的波形仿真结果如下:

①产生正弦波(sina_wave)时送到DAC0832的数据:

图5.1 产生正弦波的仿真图

②产生锯齿波(swat_wave)时送到DAC0832的数据:

图5.2 产生锯齿波的仿真图

③产生矩形波(squr_wave)时送到DAC0832的数据:

图5.3 产生矩形波的仿真图

④产生三角波(trig_wave)时送到DAC0832的数据:

图5.4 产生三角波的仿真图

由仿真结果可知,改变select[1:0]的值,能够正确的将对应的波形数据送到DAC0832,从而完成了整体设计的第一部分。

5.2数字频率计的仿真与实现

要实现的功能:设计一个四位数字显示的频率计,标准基准时钟采用1Hz(即1s),可以测量1Hz—9999Hz的信号频率。完全采用文本设计,模拟的硬件功能有三部分组成:控制部分、计数测量部分、输出显示数据锁存部分。频率计的程序总体框图及内部部分,内部的握手信号等信息的框图表示如下:

图5.6 频率的程序总体框图

1、信号的定义与说明如下:

①:输入部分

input_fre: 输入的待测信号;

inclk:系统的时钟信号。在计数测量部分,其被分频为1Hz信号;在动态扫描部分,其被分频为动态扫描脉冲。在这里,inclk假设为实验室的4MHz;

rst:系统的复位时钟,高电平有效。

②:输出部分

Qout[15:0]: 若打算通过数码管静态显示,则Qout[15:12]为千位,Qout[11:8]为百位,Qout[7:4]为十位,Qout[3:0]为个位,都是十进制形式;

warning: 超过量程时输出的警示信号;

decodeout[6:0]: 动态扫描显示时的译码输出,在扫描脉冲的作用下,循环的输出四位数据;

ctr_seg[3:0]: 四个数码管的未选信号,在扫描脉冲的作用下,与相应位的译码信号对应输出。

③:中间握手信号

count_en: 计数允许信号;

count_clr: 在新的一次测量开始时,清除上一次的测量数据,是数码管上的显示数据随时得到更新;

load:计数数据锁存信号。

2、控制部分各信号的时序关系

输入的系统脉冲经过分频后得到1Hz的计数基准信号,在基准信号每两个时钟周期经行一次频率测量。该部分产生3个控制信号:count_en,count_clr,load。

count_clr对计数模块进行复位,持续半个时钟周期;count_en上升沿时刻计数部分开始对输入信号频率进行测量,测量时间恰为一个基准时钟(1Hz),这段时间对输入信号的脉冲进行计数,结果即为信号色频率。load即为产生锁存信号。各控制信号的时序关系如下图所示:

图5.7 各控制信号的时序关系图

3、计数部分的设计

通过控制部分送来的控制时序,计数部分可以在一个基准时钟周期内对输入的信号进行频率测量,在计数的同时通过程序控制,使输出都为BCD码。

4、锁存部分设计

在load信号的时序作用下,完成输出数据锁存。

5、动态扫描部分的设计

在扫描时序的作用下,送出每一位的译码数据(decodeout[6:0])及对应的字位选通控制信号(ctr_seg[3:0])。

该模块的功能采用Verilog HDL来描述,程序fre_measure.v请见附件。编译正确后将其创建为fre_measure.bsf模块,然后采用图形编辑方式,完成频率计这部分电路的设计。

该部分功能验证的波形仿真结果如下:

①:当input_fre设置为40Hz时,仿真的波形如下:

图5.8 40Hz仿真波形图

如上图所示,Qout显示数据为:0040,即40Hz。同时将input_fre与clk_1Hz对照比较,亦可数出clk_1Hz一个周期内input_fre为40(图中clk_1Hz半个周期内input_fre 为20)。同时译码输出为3F、66,分别代表0、4的字型码。

②:当input_fre设置为200Hz时,仿真的波形如下:

图5.8 200Hz仿真波形图

如上图所示,Qout显示数据为:0200,即40Hz。同时将input_fre与clk_1Hz对照比较,亦可数出clk_1Hz一个周期内input_fre为200(图中clk_1Hz半个周期内input_fre为100)。同时译码输出为3F、5B,分别代表0、2的字型码。

【说明】:为了仿真时减轻CPU的运算量,程序中的1Hz分频数据改为199(原数据是1999999),动态扫描时钟分频改为9(原数据是4999),不影响研究问题的实质。

由上面的仿真结果可知,频率计能够正确的测量出输入信号的频率,从而完成了整体设计的第二部分。

5.3系统设计有待提高和改进的地方

频率计的结果如果可以可用字符LCD显示,让EDA送出相应的LCD控制信号;频率计的测量范围可通过选择不同的基准频率(比如10Hz、100Hz、1KHz)来扩展,即可以实现“可选量程”的数字频率计;利用频率计电路来显示波形发生器的输出波形的频率及波形标识,这样就实现了实验室中函数发生器的雏形:能实现任意波形的输出及频率显示并且能够测量外来信号的频率,这也是本文最初的设计思路,那样设计就更加完美。

6 小结

本课题要求基于可编程逻辑器件,使用硬件描述语言VHDL编写一个汽车尾灯控制器芯片,并用Max Plus II软件进行仿真。根据自己对汽车尾灯的理解我设计了四大功能:一是检查功能,二是刹车功能,三是左转功能,四是右转功能。由此必需设计出五个大的模块:一是控制模块,此模块是总的控制系统,将其它模块的功能融合在一起,便于进行集中的控制和操作;二是检查模块,此模块是一个分模块,主要功能是对在汽车尾灯整个工作的过程中,在任一状态的任一时刻,检查汽车自身是否处于正常状态,各电路系统和车身安全是否良好。三是刹车模块,此模块也是一分模块,主要功能是当驾驶人员遇险需要刹车踩下刹车键时,尾灯有规律闪烁,提示后面驾驶人员和车辆注意。四是左转模块,主要功能是当驾驶人员需要转弯按下左转弯键时,尾灯有规律闪烁,提示后面驾驶人员和车辆注意。五是右转模块,此模块也是一分模块,主要功能是当驾驶人员需要转弯按下右转弯键时,尾灯有规律闪烁,提示后面驾驶人员和车辆注意。在整个电路设计完毕并仿真成功后发现,其实整个电路设计实现的功能还是比较实用和易于操作的,而自己也为此付出了许多:从根据课题要求查找相关资料,学习硬件语言,到自己能够独立编写小程序;从对Max Plus II软件的摸索,一次次修改程序,到仿真得到较满意的结果;从对截图工具的搜索下载,论文资料的搜集,到文字排版的学习。在设计过程中遇到了很多困难,在指导老师的指引和同学的帮助下,通过不断探索学习,使问题得到了一定的解决。终于使汽车尾灯控制器的控制,检查,刹车,右转等基本功能都实现了,美中不足的是汽车尾灯的各个仿真结果都有一定的延时。

通过本学期课程设计的学习,我从中学习到了很多东西,对可编程逻辑器件,VHDL语言,Max Plus II软件有了一定的了解,尤其是用VHDL语言编程和仿真。在本次设计中最大的收获是在不断地发现问题,分析问题,解决问题的过程中培养了自己的科研能力,为今后的学习工作做了一个良好的铺垫。

参考文献

[1]王金明.Verilog HDL程序设计教程.北京.人民邮电出版社,2004

[2] Altera 公司.Quartus II 7.2简易用户使用入门指南

[3]王金明.数字系统设计与Verilog HDL教程.第二版,2005

[4]曾繁泰.EDA工程理论与实践---SOC系统芯片设计.电子工业出版社,2004,6

附录:设计源程序清单

// 程序名称:基于V erilog HDL语言的多功能波形发生器设计

// 程序作者:王枫

// 最后修改日期:2010-12-31

Wave_gen.v程序如下:

module Wave_gen(address,inclk,select,freq);

output[8:0] address; //输出控制ROM的地址

input inclk; //系统始终,时间应该保证D/A能转换完毕input[1:0] select; //波形选择,具体值代表的波形见下面定义input[3:0] freq; //控制输出波形的频率

reg[7:0] Qout;

reg[8:0] address;

reg[7:0] k,m;

parameter sina_wave=2'b00,swat_wave=2'b01,

squr_wave=2'b10,trig_wave=2'b11;

always @(posedge inclk)

begin

case(select)

sina_wave:begin

if(select==1) address<=128;

if(select==2) address<=256;

if(select==3) address<=384;

if(freq==0||freq==1)

begin

if(address>=127) address<=0;

else address<=address+1;

end

else

begin

k<=127/freq;

m<=freq*k;

if(address>=m)

address<=0;

else

address<=address+freq;

end

end

swat_wave:begin

if(select==0) address<=0;

if(select==2) address<=256;

if(address<128) address<=128;

else

begin

if(freq==0||freq==1)

begin

if(address>=255) address<=128;

else address<=address+1;

end

else

begin

k<=127/freq;

m<=freq*k;

if(address>=(m+128))

address<=128;

else

address<=address+freq;

end

end

end

squr_wave:begin

if(select==0) address<=0;

if(select==1) address<=128;

if(select==3) address<=384;

if(address<256) address<=256;

else

begin

if(freq==0||freq==1)

begin

if(address>=383) address<=256;

else address<=address+1;

end

else

begin

k<=127/freq;

m<=freq*k;

if(address>=(m+256))

address<=256;

else

address<=address+freq;

end

end

end

trig_wave:begin

if(select==1) address<=128;

if(select==3) address<=384;

if(address<384) address<=384;

else

begin

if(freq==0||freq==1)

begin

if(address>=511) address<=384;

else address<=address+1;

end

else

begin

k<=127/freq;

m<=freq*k;

if(address>=(m+384))

address<=384;

else

address<=address+freq;

end

end

end

endcase

end

endmodule

fre_measure.v程序如下:

module

fre_measure(Qout,warning,ctr_seg,decodeout,inclk,rst,input_fre); input inclk,rst,input_fre;

output[15:0] Qout;

output warning;

output[3:0] ctr_seg;

output[6:0] decodeout;

reg[3:0] ctr_seg,out_seg;

reg[6:0] decodeout;

reg[15:0] Qout,temp;

reg clk_1Hz,count_en,load,warning,temp1,clk_scan; reg[1:0] state_scan;

reg[21:0] count;

reg[16:0] count2;

always @( posedge inclk )

begin

if(count==1999999) //假设inclk为4M,分频得到1Hz信号

begin

count=0;

clk_1Hz=!clk_1Hz;

end

else

begin

count=count+1;

clk_1Hz=clk_1Hz;

end

end

always @(posedge clk_1Hz) //控制部分设计

begin

if(rst)

begin count_en=0; load=1; end

else

begin

count_en=~count_en;

load=~count_en;

end

end

assign count_clr=~clk_1Hz&load;

always @(posedge input_fre or posedge count_clr) //计数部分设计 begin

if(count_clr==1)

begin temp<=0;temp1<=0; end

else

begin

if(count_en==1)

begin

if(temp==16'h9999)

begin temp<=0;temp1<=1; end

else

begin

if(temp[3:0]==9)

begin

temp[3:0]<=0;

if(temp[7:4]==9)

begin

temp[7:4]<=0;

if(temp[11:8]==9)

begin

temp[11:8]<=0;

相关主题
文本预览
相关文档 最新文档