1、两种HDL均为IEEE标准。 Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。所有这些都使用同一种建模语言。此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。Verilog HDL语言不仅定义
2、了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。语言从C编程语言中继承了多种操作符和结构。Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。1.2.1 Verilog 语言的用途Verilog HDL就是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,它是由GDA(Gateway Design Automation)公司的PhilMo
3、orby在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语言的编程经验,可以在一个较短的时间
4、内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但Verilog HDL较自由的语法,也容易造成初学者犯一些错误,这一点要注意。1.2.2 Verilog 的历史Verilog HDL语言最初是于1983年由Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。那时它只是一种专用语言。由于他们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为
5、众多设计者所接受。在一次努力增加语言普及性的活动中,Verilog HDL语言于1990年被推向公众领域。 Open Verilog International (OVI)是促进Verilog发展的国际性组织。1992年,OVI决定致力于推广Verilog OVI标准成为IEEE标准。这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准,称为IEEE Std 13641995。1.2.3 Verilog 模块模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的
6、数据流行为使用连续赋值语句进行描述; 时序行为使用过程结构描述。一个模块可以在另一个模块中调用。1.3 本文研究的意义 通过乒乓球游戏机的开发研究更好的了解使用FPGA芯片,运用 Verilog HDL 语言编程,使自己在理论上和实验室条件下达到了比较高的水平。第2章 Verilog的基本理论 2.1 Verilog模块的定义末块的定义从关键字module开始,到关键字endmodule结束,每条Verilog HDL语句以“;”做为结束(块语句、编译向导、endmodule等少数除外)。2.2Verilog模块的组成一个完整的Verilog模块由以下五个部分组成:1 模块定义行:module
7、 module_name (port_list);2 说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。语句定义设计的功能和结构。说明部分和语句可以散布在模块中的任何地方;但是变量、寄存器、线网和参数等的说明部分必须在使用前出现。为了使模块描述清晰和具有良好的可读性, 最好将所有的说明部分放在语句前。说明部分包括:寄存器,线网,参数:reg, wire, parameter端口类型说明行:input, output, inout函数、任务:function, task, 等3 描述体部分:这是一个模块最重要的部分,在这里描述模块的行为和功能,子模块的调用和连接,逻辑门的调用,用户自定
8、义部件的调用,初始态赋值,always块,连续赋值语句等等。4 结束行,以endmodule结束,注意后面没有分号了。以下为建模一个半加器电路的模块的简单实例。module HalfAdder (A, B, Sum, Carry);input A, B;output Sum, Carry;assign #2 Sum = A B;assign #3 Carry = A & B;endmodule模块的名字是HalfAdder。 模块有4个端口: 两个输入端口A和B,两个输出端口Sum和Carry。由于没有定义端口的位数, 所有端口大小都为1位;同时, 由于没有各端口的数据类型说明, 这四个端口都
9、是线网数据类型。模块包含两条描述半加器数据流行为的连续赋值语句。从这种意义上讲,这些语句在模块中出现的顺序无关紧要,这些语句是并发的。每条语句的执行顺序依赖于发生在变量A和B上的事件。在模块中,可用下述方式描述一个设计:1) 数据流方式;2) 行为方式;3) 结构方式;4) 上述描述方式的混合。2.3 EP2C5T144C8芯片简介 EP2C5T144C8-FPGA开发板(以下简称EP2C5开发板)采用Altera公司推出的CYCLONE 系列芯片EP2C5T144C8芯片作为核心处理器进行设计,CYCLONE 系列芯片可以说是目前市场上性价比较高的芯片,比第一代的EP1C6或者EP1C12等
10、芯片设计上、内部的逻辑资源上都有很大的改进,同时价格也可以被广大客户接受;虽然Altera推出了CYCLONE III甚至于IV代的芯片,但是目前市场上价格走势偏高,尤其是针对广大初学者的定位,目前还不是适合采用。2.3.1 EP2C8开发板功能 板载EP2C8Q208C8 - FPGA 核心芯片; 板载SDRAM -K4S641632-UC60 或HY57V641620F TP-7,两款SDRAM兼容,容量64Mbit,引脚独立,用来做NIOS II实验的程序运行空间; 50MHz有源晶体,提供系统工作主时钟,通过22;匹配电阻连接只CLK0和CLK4,均可以作为系统时钟使用; 5v 电源输
11、入接口,外经5mm,内径3.5mm 内正外负; 电源开关,正视开发板,向上接通电源; R_C 按键,FPGA的重新配置按键,按下之后,系统重新从EPCS4配置芯片中读取程序然后作; Rst 按键,这个用户IO,可以当做用户输入按键使用,也可以分配为系统的复位按键; IN5822二极管 防止电源反接,高速肖特基二极管; 电源工作指示D2; 25x2 双排直插2.54间距用户接口; 1个用户LED- D4,引脚独立,没有与接口板进行复用; 下载指示灯D1,平时熄灭,下载的时候会亮,按下R_C按键的时 候也会亮; JTAG下载接口,对应下载的文件是SOF文间,速度很快,JTAG将程序直接下载到FPG
12、A中,但是掉电程序丢失,平时学习推荐使用JTAG方式,最后固化程序的时候再通过ASP方式将程序下载到配置芯片中即可; ASP下载接口,对应下载的是POF文件,速度相对JTAG比较慢,而且需要重新上电并且拔掉下载线,才能工作,操作相对麻烦,不推荐学习的时候使用,最后需要断电操作的情况下再使用ASP下载模式; 4线制RS232串口通信接口以及SRAM片选跳线选择;当与接口板连接时,改引脚与复用; 25x2 双排直插2.54间距用户接口; 螺丝铜柱支撑; 1085-3.3v 稳压芯片;1117-1.2v 稳压芯片,提供FPGA核电压; SRAM 芯片IS61LV25616AL 256kx16b,(选
13、配件);AT24C02- I2C存储器件 配置芯片 EPCS4(4Mb)。2.3.2开发板功能描述 VGA 接口 - 利用显示器实现显示图片、文字; PS2 接口 - 可以接入PS2 键盘; 串口通信接口 - 做串口UART 通讯实验; AD 输入调节电位器 ; 设置引脚、GND、VCC 扩展引脚; 外设资源接口双排孔接入; 外设资源接口双排针接入; DS18B20 温度传感器; LCD1602液晶接口; 主板5v、3.3v 电源滤波电路;主板与接口板双排针接口;TL431 2.5v 基准电压电路; PCF8563 时钟电路; DAC-TLC5615 8位单通道DA 输出; 蜂鸣器电路; AD
14、C-TLC549 8 位单通道输入;8 位数码管显示; 4x4 矩阵键盘输入; 8 路LED 输出指示; 红外通讯接口; 4 位拨码开关输入; 主板与接口板双排阵接口; 4 位独立按键输入。2.3.3EP2C5T144C8芯片的引脚图 2.4 Verilog硬件描述语言的主要能力 基本逻辑门,例如and、or和nand等都内置在语言中。 用户定义原语( UDP)创建的灵活性。用户定义的原语既可以是组合逻辑原语,也可以是时序逻辑原语。 开关级基本结构模型,例如pmos 和nmos等也被内置在语言中。 提供显式语言结构指定设计中的端口到端口的时延及路径时延和设计的时序检查。 可采用三种不同方式或混
15、合方式对设计建模。这些方式包括:行为描述方式使用过程化结构建模;数据流方式使用连续赋值语句方式建模;结构化方式使用门和模块实例语句描述建模。 Verilog HDL中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。 能够描述层次设计,可使用模块实例结构描述任何层次。 设计的规模可以是任意的;语言不对设计的规模(大小)施加任何限制。 Verilog HDL不再是某些公司的专有语言而是I E E E标准。 人和机器都可阅读Verilog 语言,因此它可作为E D A的工具和设计者之间的交互语言。 Verilog HDL语言的描述能力能
16、够通过使用编程语言接口( P L I)机制进一步扩展。P L I是允许外部函数访问Verilog 模块内信息、允许设计者与模拟器交互的例程集合。 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级( RT L)到算法级,包括进程和队列级。 能够使用内置开关级原语在开关级对设计完整建模。 同一语言可用于生成模拟激励和指定测试的验证约束条件,例如输入值的指定。 Verilog HDL 能够监控模拟验证的执行,即模拟验证执行过程中设计的值能够被监控和显示。这些值也能够用于与期望值比较,在不匹配的情况下,打印报告消息。 在行为级描述中, Verilog HDL不仅能够在RT L级上进行设计描述
17、,而且能够在体系结构级描述及其算 法级行为上进行设计描述。 能够使用门和模块实例化语句在结构级进行结构描述。 在Verilog HDL 的混合方式建模能力,即在一个设计中每个模块均可以在不同设计层次上建模。 Verilog HDL 还具有内置逻辑函数,例如&(按位与)和|(按位或)。 对高级编程语言结构,例如条件语句、情况语句和循环语句,语言中都可以使用。 可以显式地对并发和定时进行建模。 提供强有力的文件读写能力。 语言在特定情况下是非确定性的,即在不同的模拟器上模型可以产生不同的结果;例如,事件队列上的事件顺序在标准中没有定义。第3章 乒乓球游戏机的软件设计 3.1 乒乓球游戏机系统组成
18、瓶乓球比赛游戏机的组成如图1 所示。比赛规则约定:五局三胜; 1 分一局; 裁判发出比赛开始信号,触发FPGA 内部随机数发生器模块产生首次发球权方;比赛进行中,选手连续两次获得发球权后, 发球权交予对方,如未获发球权方发球, 裁判端犯规音响电路鸣响;6 个LED 排列成行模拟乒乓球台(因为我的开发板上只有6个LED灯,比赛开始时候中间两个灯亮,如果有条件的话有10来个灯最好了); 点亮的LED 模拟乒乓球,受 FPGA 控制从左到右或从右到左移动; 比赛选手通过按钮输入模拟击球信号, 实现 LED 移位方向的控制; 若发亮的LED 运动在球台中点至对方终点之间时,对方未能及时按下击球按钮使其
19、向相反方向移动, 即失去一分。3.1.2功能模块设计 图1 中,基于FPGA 设计的控制端为整个系统的核心,其内部主要由简易随机数发生器、 发球权控制器、 乒乓球位置控制器、 甲乙方计分控制器、 犯规音响控制器等模块组成。整个控制端采用模块化设计,先用 Verilog 语言编写功能模块,然后用顶层原理图将各功能模块连接起来。设计的难点在于协调各模块工作,严格遵守各信号间时序关系。本系统采用50MHz系统时钟。简易随机数发生器比赛首次发球权由随机数发生器产生的数据决定,其随机性要求不严, 因此,采用非常简单的模式产生,即一旦FPGA 上电, 系统时钟百分频产生一方波信号square,当裁判闭合开
20、始比赛开关产生 start 信号上升沿时,读取此时squar e信号值作为随机数发生器输出data_rand。模块仿真如图 2 所示, 结果满足设计要求。此模块设计时保证了 square 信号周期应远大于 start 信号上升沿建立时间, 保证随机数据的正确读取。3.2 发球权控制器发球权控制器的控制过程为: 如果按下复位按钮,发球权数码管显示8, 否则, 开始比赛开关闭合时, 显示随机数发生器的值( 0 或 1, 0 代表甲方、 1 代表乙方) 。而在比赛中,为遵守发球权交换规则, 设计甲乙双方计分器总和信号sum是不为0 的偶数时(即计分总次低位变化时) , 发球权数码管显示由0变为1 或
21、由1 变为0。此模块设计中, 发球权数码管的信号控制受多个时钟的控制,即开始比赛开关start 和计分值sum1信号,将两个信号组合成一个时钟信号, 并统一两个时钟的触发沿。因此最佳时钟触发方式如图3 所示的qq_en信号。为满足这种时序要求, 借助计分总和次低位 sum_1 信号和启动信号start设计qq_en信号。3.3 乒乓球位置控制 乒乓球位置控制、 甲乙计分、 犯规音响控制乒乓球位置控制电路为 FPGA 控制端的核心, 依据比赛规则,采用了Mealy 型状态机 10来实现,大大降低了设计难度。状态机共定义了7 个状态, 各状态定义如表1 所示,状态转换如图5 所示, 转换条件如表2
22、 所示,具体程序如下。3.3.1基于 FPGA乒乓球比赛游戏机顶层原理图 结论 经过这次对乒乓球游戏机系统的设计,让我对EDA设计有了更进一步的认识,同时也对EDA这门课程游客更深入的了解。这次设计让我了解了关于乒乓球游戏机的原理课设计理念,要设计一个电路要先进行软件仿真再进行实际的电路制作。通过这次设计让我收获不小。这次的课程设计终于顺利完成了,也解决了设计中遇见的一些问题。这次设计让我受益匪浅。对软件运用更加的熟练。在摸索该如何设计程序使之实现的过程中,培养并锻炼了我的设计思维,增加了实际操作经验,锻炼了能力,总的来说这次收获了很多,基本能够学以致用。根据所学课程,数字电子技术、模拟电子技
23、术、Verilog、EDA等所学知识的应用在设计过程中都得到了相应巩固,我们对本专业的了解也更深了一层。经过了这次自己实践动手的设计,自己的分析能力得到了提高,动手能力也有很大进步,从中也收获了很多经验,希望今后类似这样课程设计、类似这样的锻炼机会能更多些。我想在今后的实践过程中我会有更大的进步,也会做的越来越好。参考文献 1 侯建军,SOPC技术基础教程,清华大学出版社,2008-052童诗白.华成英.模拟电子技术基础M.高等教育出版社,2006-53邱关源.电路.高等教育出版社M.4王新梅.肖国镇.纠错码原理与方法M.西安电子科技大学出版5曹昕燕.周凤臣.EDA技术实验与课程设计M.清华大
24、学出版社,2006-56王金明 数字系统设计与Verilog HDL M 电子工业出版社,2009-1 附录 pp_en信号产生模块如下:module pp_en(clk,start,sum_1,pp_en,cnt);input clk;input start; /裁判启动信号input sum_1; /总局数sum次低位sum1output pp_en;output4:0 cnt; /pp_en信号个数/-reg sum_1_a,sum_1_b;reg start_a,start_b;reg4:0 cnt_r;always (posedge clk)begin start_a = start
25、; start_b = start_a; sum_1_a = sum_1; sum_1_b = sum_1_a;end if(pp_en) cnt_r = cnt_r+4b1; else= cnt_r;assign cnt = cnt_r;assign pp_en = (start_astart_b) | (sum_1_asum_1_b);endmodule根据pp_en信号和随机数data_rand控制甲乙球权模块:module pp_possession(clk,reset,data_rand,pp_en,cnt,led_pose);input reset;input data_rand;input pp_en;input4:output3:0 led_pose; /甲乙球权输出,0代表甲,1代表乙。/-reg3:0 led_pose_r;always (posedge clk or negedge reset) if(!reset) led_pose_r = 4d8; begin if(cnt = 5b1)= 3b0,data_rand;= !led_pose_r; end led_po
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1