硬件描述语言VHDL

2024-09-10

硬件描述语言VHDL(共3篇)

硬件描述语言VHDL 篇1

0 引 言

高级数据链路控制协议 (HDLC) 是计算机网络体系结构中数据链路层的重要协议, 主要功能为链路管理、帧同步、流量和差错控制。HDLC是面向比特的同步通信规程, 主要为通信双方建立透明的、以帧为单位的数据通信。

随着集成电路技术的发展, FPGA以其体积小、速度快、设计灵活、系统集成和扩展方便等优点, 广泛应用于高速多功能数字处理技术。本文将介绍HDLC协议的基础知识, 分析设计通信双方帧发送和帧接收过程, 从而形成发、收双方功能框图, 最终使用VHDL硬件描述语言设计实现其中重要组成功能模块。

1 HDLC协议基础

1.1 HDLC协议帧格式

HDLC协议帧格式如图1所示[1]。

1.1.1 帧同步标志F

为了表示一个完整的数据帧, HDLC规定了在帧的开头和结尾各放入一个特殊的标记, 作为帧的边界, 这个特殊标记就是标志字段F (“01111110”) , 从开始标志到结束标志之间构成一个完整的信息单位, 称为一帧。

1.1.2 “0”比特填充

在两个标志字段之间的比特串中, 如果碰巧出现了和标志字段F一样的比特组合, 那么就会被误认为是帧边界。为了避免这种错误, HDLC采用零比特填充法使一个帧中两个标志字段之间不会出现6个连续1。

零比特填充的具体做法是:在发送端, 当一串比特流尚未加上标志字段时, 先用硬件扫描整个帧。只要发现有5个连续的1, 则立即填入一个0。这样就保证标志字段之间不会再出现“01111110”。在接受一个帧时, 先找到F字段以确定帧的边界。接着再对比特流进行扫描, 每当发现5个连续的1时, 就将这5个连续1后的0删除, 以还原成原来的比特流。当连续传输多个帧时, 前一个帧的结束标志字段可以兼作后一帧的起始标志字段。当暂时没有信息传送时, 可以连续发送标志字段, 使接收端可以一直和发送端保持同步。

1.1.3 帧校验序列FCS

循环冗余码校验英文名称为Cyclical RedundancyCheck, 简称CRC。它是利用除法及余数的原理来做错误侦测 (Error Detecting) 的。实际应用时, 发送端计算出CRC值并跟随信息一同发送给接收装置;接收端有两种方法进行检验, 方法一:对收到的数据重新计算CRC并与收到的CRC相比较, 若两个CRC值不同, 则说明数据通讯出现错误;方法二:对校验区间数据和FCS一起重新计算CRC, 若余数不为0, 则说明数据通讯出现错误。本次设计采用CRC-16标准对校验区间数据进行校验[4]。

1.2 HDLC协议功能框图

该设计包含发送模块和接收模块, 下面将分别介绍。

发送模块主要的设计内容为CRC循环冗余校验和插‘0’处理模块, 功能框图如图2所示。

接收模块在收到帧同步标志0x7E后, 接收模块启动, 这时, 删‘0’处理模块判断是否为五个“1”, 如果是, 则需要进行删除“0”处理;同时, 帧首、尾序列检测模块继续进行帧尾检测。删除“0”处理后进行串并转换, 并且进行CRC校验计算, 判断接收数据是否正确, 功能框图如图3所示。

2 设计实现

2.1 帧同步模块实现

所谓帧同步就是从收到的比特流中能正确无误的判断从哪个比特开始到哪个比特结束, 结合下面的去帧首、帧尾模块, 可以完整对收到的数据帧进行识别、处理。该模块用于检测一组由二进制码组成的脉冲序列信号, 当收到一组串行二进制码后, 如这组码与预先设置的码 (01111110) 相同, 则输出1, 否则输出0。这种检测的关键在于收到的码必须是连续正确的, 任何一位不相等都将回到初始状态重新检测。主要实现程序如下:

datain中存放的即是预先设置的同步码, 若有一位不相同, 则q赋值为0, 重新开始同步判断。

2.2 “0”比特填充与删除模块实现

2.2.1 “0”比特填充

本模块的设计难点在于, 当5个连续的1被识别后, 将插入一个0, 从而导致后边连续的数据被积压起来, 这些数据不能丢失, 同时, 随着插入0数量的增加, 被积压的数据也就越多。针对这个问题, 可以采用结合队列的设计方法。队列在正常工作时, 即为寄存器;当出现插0操作时, 队列会将后面的数据保存起来, 数据不会丢失, 同时, 抹去队列的一个读时钟, 而输出一个0, 这样即保证数据不会丢失, 又进行了插0操作[2]。主要实现程序如下:

利用QuartusⅡ6.0的仿真结果如图4所示:

2.2.2 “0”比特删除

“0”比特删除是“0”比特填充的逆过程, 设计时采用相似的设计思想实现, 区别点为:在“0”比特填充模块设计时, 擦去的时钟 (clkout) 应连接FIFO的读时钟 (rdclk) , 擦去一个读操作, 从而插入‘0’;在“0”比特删除模块, 则应连接FIFO的写时钟 (wrclk) , 擦去一个写操作, 保证将添加的0不会送入FIFO, 也就删除了0, 详细设计此处不再赘述。

利用QuartusⅡ6.0的仿真结果如图5所示:

2.3 去帧首、帧尾模块实现

去帧首、帧尾模块设计需要帧同步模块配合, 将帧同步模块的result信号与本模块的zhen_clk信号相连接。设计思想为在本模块设计一个一位二进制计数器q (q=1, 可以接收数据) , 当帧同步模块同步成功发送一个result信号给zhen_clk, 则q加1;如q为1, 表示同步成功, 可以接收数据;当再次收到一个同步成功信号, q加1, q由1转变为0, 则接收数据结束;循环执行, 等待下次数据接收;接收完成dataout输出高阻态。

利用QuartusⅡ6.0的仿真结果如图6所示:

2.4 CRC循环冗余校验模块实现

本次设计采用CRC-16标准的并行实现方式。按字节并行计算的思路是模拟串行计算电路的计算过程, 从而推导出每次并行处理一个字节后的CRC校验码与当前输入字节和CRC寄存器前一状态的关系。在开始运算时, 把CRC中每一位的初始值都设为0。以后的每一行表示当前输入一位数据后CRC寄存器中新的内容, CRC的最终值为输入D7后各个项的因子相互异或的结果。第一个8-bit数据处理完毕, 用当前CRC寄存器的值与下一个8-bit数据进行如前运算。所有的字节处理完毕后CRC寄存器内的值即为最终的CRC值。主要实现程序如下[3]:

接收模块的设计思路与发送模块相同, 接收方接收数据后, 同样计算CRC校验码, 将计算结果与接收到的检验码比较, 如果相同, 则接收正确;否则, 数据传输出错。具体设计此处不再赘述。

3 结束语

本文介绍了HDLC协议的VHDL语言实现方法, 通过硬件测试, 能够实现HDLC协议的基本功能, 功能模块划分合理, 设计实现高效, 实现模块化设计方法, 为深入设计HDLC协议提供了基础模板, 有助于掌握VHDL语言的应用开发。

参考文献

[1]刘岩俊.HDLC通讯协议中CRC的应用[J].电子测量技术, 2010, 33 (3) :21-23.

[2]陈晨.基于FPGA的高速同步HDLC通讯控制器设计[J].电子设计工程, 2010, 18 (8) :175-178.

[3]张树刚.CRC校验码并行计算的FPGA实现[J].计算机技术与发展, 2007, 17 (2) :56-58.

[4]谢希仁.计算机网络[M].北京:电子工业出版社, 2002.

基于性质描述语言的硬件验证 篇2

随着集成电路的设计规模越来越大, 但验证的技术远远落后于硬件设计的能力, 对硬件的正确性验证, 目前还主要采用模拟仿真技术, 这种技术对小规模的设计还是可行的, 但对于复杂的大规模的集成电路设计, 完全用这种技术来验证几乎是不可能的。现提出一种基于性质描述语言进行硬件验证的新方法, 这种方法就是把设计需要满足的属性用断言的形式描述出来, 然后再验证这个设计是否满足这个断言。一个断言就是一条要求某个性质成立的语句, 它提示验证工具检查给定的特性是否成立, 对这个断言的验证可以通过模拟的方法, 也可以通过形式化的方法。现介绍了性质描述语言PSL (PropertySpecification Language) [1]和存储器FIFO (FirstInFirstOut) 的设计, 并基于PSL对FIFO进行了验证, 结果表明了这种方法的有效性。

1性质描述语言PSL

PSL由基础语言部分 (FL) 和可选的分叉扩展部分 (OBE) 两部分组成。FL主要描述的PSL语言线性的时序关系, 包括布尔表达式、序列和FL公式等部分的内容[1]。而OBE描述的是CTL, 即分叉时态逻辑的内容[2,3]。有了这两部分的支持, 就可以用动态 (仿真) 和静态 (形式化) 的验证方法来验证属性 (或断言) [4]。

1.1基础语言部分

基础语言部分包括三部分的内容:布尔表达式、扩展的正则表达式和FL公式。布尔表达式是计算在某个状态下属性的真假, 它是所有属性描述的基础;序列扩展正则表达式 (SERE) 计算的是关于一个有限的状态序列的属性的真假, 而FL公式是计算在有限或者无限状态序列下属性的真假。

1.2布尔表达式

设P是一个非空的原子命题集合, 一个状态就是P的一个子集, 也就是在这个状态下为真的原子命题集合。那么布尔表达式的语法如下: (其中p∈P是一个原子命题)

1.3序列扩展正则表达式

这里讨论的序列公式, 假设它们有一个统一的缺省时钟, 这个缺省时钟在PSL中是可以定义的, 所有的属性描述都是在这个缺省的时钟下进行的。而有关的时钟表达式r@c将在以后的文章中讨论, SERES的语法定义为:

其中r是一个布尔公式, 一个序列公式r的语义通过定义π≡r来给出, 是一个有限的状态序列即路径。

1.4 FL公式

同样, 这里讨论的FL公式, 也是假设它们有一个统一的缺省时钟, 对r@c表示的时钟表达式将在以后讨论

FL公式是在有限状态序列 (有限路径) 或者是在无限状态序列下满足的, 设π=s1s2s3……是一个无限路径。

2 FIFO的设计及验证

FIFO是一种在电子系统中得到广泛应用的器件, 通常用于数据的缓存和容纳异步信号的频率或相位的差异[5]。

2.1同步FIFO的设计

这里设计的是一个同步FIFO, 即对FIFO的读/写使用同一个时钟, 该FIFO提供读使能和写使能的输入控制信号, 并输出指示FIFO状态的非空和非满信号, FIFO的输入、输出数据使用各自的数据总线[6,7], 如图1所示:

FIFO的设计是利用状态机来实现的, 共有七个状态, 用一个四位寄存器state[3:0]来表示其状态, 其中state[3]表示的是写操作, state[2]是读操作, state[0]是读写准备, state[1]是读写。当state[1:0]='b11时, 表示的读写完成。在设计这个FIFO中, 利用了一个环形数组, 并用两个指针, 即读指针 (fifo rp) 和写指针 (fifo wp) 控制对该环形数组的读写。其中读指针fifo rp指向下一次读操作所要读取的单元地址, 并且每完成一次读操作, fifo rp加一;读指针fifo wp指向下一次读操作所要存放数据的单元地址, 并且每完成一次读操作, fifo wp加一。由fifo rp和fifo wp的定义可知, 当FIFO被读空和写满时, fifo rp和fifo wp将指向同一单元, 但在读空和写空之前FIFO的状态不同, 所以能够区分这两种状态, 再通过比较, fifo rp和fifo wp就可得到nempty和nfull信号。如图2给出了FIFO的几种不同的状态。在设计中有一个计数寄存器fifo word count, 用于计数写入的数据数目[8,9]。

2.2FIFO测试属性的描述

在完成一个设计后, 要把PSL语言描述的断言插入到设计中, 以便在仿真中来验证其真假。PSL属性在设计中是以注释的形式出现的, 并且以”psl”开头。首先要提供一个缺省的时钟, 所有的属性都是用这个缺省的时钟, 这里给出的时钟是利用系统时钟, 并且其下降沿有效。描述如下:

2.2.1 FIFO满时不能写数据的断言

以psl开始, 表示此处是psl语言所要描述的信息, property是保留字, 是说明后面要定义一个属性, 起名字为“PUSH_ON_FIFO_FULL”, 这个属性的内容是“always{ (rst &&fifowr && !nfull) [*]; (rst && fiford && !fifowr && !nfull) } |→ ( (!state[3] && !fifowr) || state[1] || state[0]) ;”, 以分号表示此psl语句的结束, 在一条语句没有结束时换行, 只需要加注释符, 无需再写“psl”, 紧接着属性语句的下一行, “assert”是保留字, 指出要定义一个断言, 这个断言的名字是“PUSH_ON_FIFO_FULL”, 那么在进行仿真时就要判断它是否满足。

描述如下:

这个属性说明的含义是在FIFO已满时不能再写入的。这个属性表示系统总是满足这种情况。如果:

(1) 系统没有复位, rst为高;

(2) FIFO已经满, 即nfull=0并且无写使能, 这样保持若干个时钟周期后, 在下一个时钟周期:系统没有复位, rst为高;有一个写使能 (fifowr=0) ;无读使能 (fiford=1) ;FIFO还是满 (nfull=0) 。

则, 在此时钟周期:

(3) State[3]不会变为高, 即系统不会转向写操作;

(4) Fifowr此时还有效。或;

(5) 状态正在完成上次写操作的状态的变化。

2.2.2 FIFO空时不能读数据的断言

这个属性描述的是当FIFO为空时, 就不能再读数据了。具体的含义表示系统满足, 如果:

(1) 系统没有复位;

(2) fifo已经为空;

(3) 此时无读使能。

这样的情况下保持若干个时钟周期后, 在下一个时钟周期:系统没有复位;fifo仍为空;无写使能, 但有读使能。则:在这个时钟周期,

(1) state[2]不会变为高, 即不会转为读操作, 并且此时是fiford有效, 或;

(2) 状态state正在完成前一次的读操作的状态的转换。

描述如下:

2.2.3 对FIFO的信息覆盖的测试

下面的两个属性是对FIFO一些特殊情况的测试, 其中一个是测试在写使能的控制下最终总是能够达到FIFO的最大值。另一个是FIFO经过一段时间的读写后, 再进行连续读操作时, 总是能够把FIFO的内容读空[10]。描述如下:

第一个属性描述的是满足下列情况的条件总是会出现的:

(1) rst没有复位;

(2) fifowr 有效, fiford是无效的;,

(3) 计数寄存器能够达到最大值`SRAM_SIZE , SRAM_SIZE是FIFO的最大值。

而第二个属性描述的是满足下列情况的条件总是会出现的:

(1) rst没有复位;

(2) fiford 有效, fifowr是无效的;

(3) 计数寄存器的值为零, 表示无数据读出。

对第二个属性, 当复位后, 再读就可以满足, 在此要测试的是在经过一段时间的读写后, 再经过一系列的读操作是否能达到计数器为零, 即FIFO无数据读。最后, 还有一个也是对FIFO的覆盖信息的测试, 测试是否能达到最大计数。描述如下:

2.3属性验证结果

目前已经有许多工具支持PSL语言, 在此我们利用MdelSim6.0d来进行仿真。用Verilog 语言对FIFO设计, PSL语言用Verilog风格, 如图3所示。

图3给出了对断言结果的浏览, 图3中第一列给出了属性的名字;第二列给出断言的成功是否启动, 从图3中可以看出所有的断言的成功都启动了;第三列给出断言的失败是否启动, 从图3中可以看出所有的断言的失败都启动了;下面两列就给出了失败和成功检验各个断言的次数。从上图中可以看出断言PUSH_ON_FIFO_FULL有两次检验失败。图4给出了检验失败的波形。

对断言进行仿真, 有四种情况:inactive, 表示断言的条件没有为真, 此时断言没有被激活, 在ModelSim6.0d中用蓝线表示; active, 断言的条件已经满足, 断言被激活, 用绿线表示; completed 表示断言成功, 用绿三角形表示;failed, 断言失败, 用红三角形表示。

图4中可以看出对断言PUSH_ON_FIFO_FULL验证失败的原因是由于在FIFO写满后, 还向里面写数据, 这样导致把没有读的数据就覆盖掉了, 设计出错的地方肯定是对FIFO写满时的处理有问题。

3结论

基于断言的验证方法 (ABV) 是对目前的模拟仿真的有利补充, 属性描述语言PSL为其断言的描述提供了一种标准的语言。通过对FIFO的设计和验证过程的描述, 给出了利用PSL作为断言语言进行验证的一般过程。下一步的工作将是把PSL作形式化验证 (静态) 的属性语言来进行设计的形式化验证, 这样PSL就可以作为动态和静态的一个统一的属性描述语言。

参考文献

[1] Accellera Organization , Inc. Formal semantics of accellera property specification language. Appendix B of http :/ /www.eda.org/vfv/docs/PSL2v1.1.pdf, 2004

[2] Accellea. Property specification language reference manual , v1.0.http :// www.haifa.il.ibm.com/projects/verification/sugar, 2003

[3] 虞蕾, 赵宗涛. PSL的有界模型检验.电子学报, 2009 (3) :614—615

[4] 李伟.基于PSL的制造过程信息描述方法研究.军民两用技术与产品, 2009; (3) :44—46

[5] 许庆公.高速异步FIFO 的设计与实现.微计算机信息, 2009; (7) :153—155

[6] 张莹.FIFO可靠性设计与研究.微处理机, 2008; (6) :171—172

[7] 刘和平, 邓力, 江渝, 等. 数字信号处理器原理、结构及应用基础——TMS320F28x .北京:机械工业出版社, 2007

[8] 夏宇闻.数字系统设计教程.北京:北京航空航天大学出版社, 2003

[9] 陈明义, 夏海旻, 周建国.高速大容量FIFO的设计.电子科技, 2008;21 (6) :123—124

硬件描述语言VHDL 篇3

随着系统级FPGA及系统芯片的出现,软、硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于系统设计和软件设计结合。由于大规模集成电路技术的快速发展,EDA 技术成为现代电子设计技术的核心。EDA技术是以计算机作为硬件平台,利用EDA 工具,采用可编程器件,使用描述硬件电路的功能,通过设计芯片实现系统功能。这种设计方法具有很高的灵活性,提高了工作效率。由于FPGA 的集成度不断提高,因此这种设计方法具有研制周期短、设计成本低等特点。同时计算机在人们生活、工作、学习中越来越重要。它的广泛应用,离不开它具有强大的、多用途的处理功能,而实施这种功能的就是计算机的核心部件——CPU。本文采用EDA技术,利用Verilog硬件描述语言,介绍了基于可编程逻辑器件简单的CPU系统整体功能设计。每条指令采用了8 b,高3 b是操作码,低5 b是地址。在该系统中,可以完成简单的指令运算操作。最后在CPU系统中运行了流水灯实例,进一步验证了系统的完整性和可用性。

1 简易CPU的系统结构

CPU简易结构图包括5个主要模块,分别为指令寄存器、运算器ALU、累加器、状态控制器及RAM_ROM,其中运算器ALU模块、状态机模块及RAM_ROM模块是CPU的核心模块。CPU具有取指令,分析指令与执行指令的基本功能。它执行一条指令的过程为:先从ROM存储器中取出指令,存入指令寄存器,指令译码后,程序计数器PC取出指令的地址,并从RAM中读出数据,然后在运算器ALU中进行相应的运算,运算结果存入累加器。一条指令执行完,程序计数器加1,指向下一条将要执行的指令。而所有的操作都是在状态控制器的控制下有条不紊的进行的。如图1所示。

2 各关键模块结构与仿真分析

2.1 指令寄存器

指令寄存器是用来存放指令操作码的。clk1是指令寄存器的触发时钟,在clk1的上升沿,寄存器将数据总线送来的指令存入寄存器中。指令寄存器有时存储数据,有时存储指令,这是由CPU状态控制器的控制信号决定的。

如图2所示,复位后,指令寄存器被清零。在clk1的上升沿且ena为高电平时,指令为64H=0110_0100b,高3位为操作码,存入opcode,即为011b=3H,低5位为地址,即为00100b=04H。

2.2 累加器

累加器(A)是8位的,它是CPU中使用最频繁的一个寄存器。累加器是ALU单元的一个数据来源,也存放着ALU的运算结果,且数据传送大多都通过累加器。如图3所示,复位后,累加器的值为零。在clk的上升沿,且当控制信号ena为高电平时,来自数据总线上的数据存入累加器。

2.3 算数运算器ALU

每条指令的高3位为操作码,共有8条指令,分别为停机操作HLT,为零跳转SKZ,加操作ADD,增1 INC,转移MOV,清零CLR,写操作STO。

如图4所示,010b为加操作ADD,在alu_clk的上升沿,累加器的值与accum的值相加,输出结果alu_out<=data+accum=01H+02H=03H; 101b为清零操作CLR,输出alu_out<=8′b00000000。zero为accum的取反信号,在状态机中用于判断累加器的值是否为零。

2.4 状态控制器

状态控制器是CPU的核心模块,用于产生其他各单元所需的使能信号。指令周期由8个时钟周期组成,第0个时钟,CPU状态控制器输出rd和load_ir位高电平,其余均为低电平。指令寄存器寄存由ROM送来的8位指令代码。第1个时钟,空操作。第2个时钟,空操作。第3个时钟,PC增1,指向下一条指令。若操作符位HLT,则输出信号HLT为高。如果操作符不为HLT,除了PC增1外(指向下一条指令),其他各控制线输出为零。第4个时钟,若操作符为ADD,CLR,INC或MOV,读相应地址的数据;若为JMP,将目的地地址送给程序计数器;若为STO,输出累加器数据。第5个时钟,若操作符为INC,ADD或CLR,算术运算器就进行相应的运算;若为MOV,就把数据通过算术运算器;若为SKZ,先判断累加器的值是否为0,如果为0,PC就增1,否则保持原值;若为JMP,锁存目的地址;若为STO,将数据写入地址处。第6个时钟,空操作。第7个时钟,若操作符为SKZ且累加器值为0,则PC值再增1,跳过1条指令,否则PC无变化。

由图5可知,在clk的上升沿且ena为高电平时,控制器开始执行指令。第0个时钟周期,rd与load_ir为高电平,完成指令存入指令寄存器。第1个时钟与第2个时钟均为空操作。第3个时钟,inc_pc增1,指向下一条指令。因为操作符为HLT,所以输出信号 HLT为高。另因为在整个指令周期中opcode均为000b,是停机操作HLT。

3 系统指令集

为了简化系统,每条指令为1 B,即8 b,高3 b是操作码,低5 b是地址,如图6所示。数据总线为8 b,所以每条指令只取1次。对应的指令系统共有8条指令,具体如表1所示。

4 RAM_ROM模块及存储器中数据分配

RAM_ROM模块是重要的外围模块,是指令与要运算数据的存放空间。这里将RAM与ROM两个模块综合成一个模块,在一段连续的存储空间内,前一部分存放指令地址,后一部分存放数据地址。地址由PC指针取出。因为地址为5位,所以对应的存储区为00000~1111,为32个存储单元。这里运用了INC,ADD,CLR指令,实现简单指令操作。具体如表2所示。

5 综合模块

将各个模块综合起来即组成了个微处理器,如图7所示。

如图8所示及RAM_ROM模块可知,先执行INC指令,即alu_out=02H+01H=03H=accum。再执行ADD指令,alu_out=accum+03H=03H+03H=06H。随后执行CLR指令,即alu_out=0。最后执行INC指令,alu_out=04H+01H=05H。

6 流水灯实例

为了能更好的体现整个CPU的整体功能,在RAM_ROM模块写入简单流水灯程序,以进一步检测CPU的功能及设计的正确性。

6.1 流水灯对应的汇编语言程序

其中设P1引脚为高电平时被点亮。流水灯地址与数据分配见表3。

6.2 功能实现

如图9所示,在一个指令周期内,alu_out输出结果为00H,01H,02H,04H,08H,10H,20H,40H,80H,实际上是1在左移。每个数据为8 b,它们分别对应单片机的8个引脚,驱动8个灯,相应位为高电平时,灯就点亮。从而达到流水的效果。在硬件测试时,把时钟频率调得很低,这样就达到了延时的作用,在人眼可视范围可观察到流水灯效果。

7 结 语

CPU的设计是由抽象到具体的一个过程,本文基于 FPGA,实现简单微处理器软核设计,并给出了简单指令集且进行相应时序仿真。本文创新地将ROM与RAM综合为一个模块,简化了设计过程;同时在系统各功能验证正确的情况下,给出了对应于汇编程序的流水灯实例,使对CPU的结构与原理理解更具体,更进一步验证的设计的可行性及现实意义。该设计也具有灵活性,可以对指令集扩展或修改,不断完善CPU功能。

本设计在湖北师范学院物理与电子科学学院刘兴云,田开坤老师的指导下顺利完成,在此对提供过帮助的老师及物电学院致以深切的谢意与祝福。

摘要:基于可编程逻辑器件FPGA,利用Verilog硬件描述语言,采用自顶向下和模块化的设计方法,先将CPU的每个模块进行软件设计与仿真,再将每个模块综合起来,设计并验证了一种简单CPU逻辑控制器。对CPU关键功能模块进行了原理分析,并通过Max+PlusⅡ软件编译适配,给出了时序仿真图。同时在硬件上实现了简单指令控制的流水灯实例,完成了完整的Verilog硬件描述语言的简易CPU设计。该设计具有很强的灵活性与可靠性,只要适当扩展或修改指令集就可以使CPU实现更多的功能。

关键词:FPGA,Verilog,CPU,时序仿真

参考文献

[1]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天大学出版社,2003.

[2]张毅刚.单片机原理及应用[M].北京:高等教育出版社,2003.

[3]龙惠民,吴静.基于FPGA的RISC CPU设计[J].兵工自动化,2006,25(12):86-87.

[4]张杰.基于FPGA的八位RISC CPU的设计[J].微计算机信息,2006,22(35):155-156.

[5]张楷,汤志忠.通用16位CPU的设计与实现[J].计算机工程与应用,2003(32):116-117.

[6]袁俊泉,孙敏琪,曹瑞.Verilog数字系统设计教程[M].西安:西安电子科技大学出版社,2002.

[7]杨厚俊,张公敬,张昆藏.计算机系统结构:奔腾PC[M].北京:科学出版社,2004.

[8]BHASJER J.Verilog HDL综合实用教程[M].孙海平,译.北京:清华大学出版社,2004.

上一篇:素质提升途径下一篇:内侧颞叶癫痫