毕业设计(论文)-在FPGA上设计汉明码的编码器和解码器.doc
《毕业设计(论文)-在FPGA上设计汉明码的编码器和解码器.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-在FPGA上设计汉明码的编码器和解码器.doc(34页珍藏版)》请在三一文库上搜索。
1、南京大学金陵学院2010届毕业设计(论文)南 京 大 学 金 陵 学 院 本 科 毕 业 论 文院 系 信息科学与工程系 专 业 电子信息科学与技术 题 目 在FPGA上设计汉明码的编码器和解码器 年 级 四 学号 学生姓名 指导教师 职称 讲师 论文提交日期 2010年6月3 日 摘 要 本文用Verilog语言实现了汉明码的编码和译码。在介绍汉明码编码和译码原理的基础上,设计出了汉明码的编码器和译码器,写出了基于Verilog实现的源程序,并通过modelsim软件的仿真。关键词:现场可编程门阵列;verilog;汉明码ABSTRACTThis passage realized code
2、and decode of hamming with language of verilog.Based on the theory of introduction of code and decode of hamming,this passage designed coder and decoder of hamming.The source program was written by verilog language. The soft of modelsim simulated and tested the program.Keywords:fpga; verilog; hammin
3、g目录序言1第一章 Modelsim简介和仿真的基本步骤21.1 modelsim简介21.2 modelsim仿真的基本步骤2第二章 Verilog的基础知识42.1 verilog的主要功能42.2 verilog基本语法42.2.1 wire型和reg型42.2.2 initial模块和always模块52.2.3 边沿和电平触发事件52.2.4 条件语句62.2.5 阻塞和非阻塞赋值62.2.6 组合逻辑电路72.2.7 时序逻辑电路7第三章 汉明码的编译码设计93.1 汉明码的原理93.1.1 基本概念93.1.2 监督矩阵 H103.1.3 生成矩阵G103.1.4 伴随式(校正子
4、)S103.2 汉明码的编码器设计113.2.1 编码器的设计流程图113.2.2 代码设计123.2.3 仿真波行及其分析143.3 汉明码解码器的设计143.3.1 解码器的设计流程图153.3.2 代码设计153.3.3 仿真波形及其分析163.4 汉明码的编码器和译码器的连接17结束语19致谢20参考文献21附录2230序言硬件语言(HDL)概述硬件描述语言(Hardware Description Language) 是硬件设计人员和电子设计自动化(EDA)工具之间的界面.其主要目的是用来编写设计文件建立电子系统行为级的仿真模型。即利用计算机的巨大能力对用Verilog HDL或VH
5、DL建模的复杂数字逻辑进行仿真,然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表(Netlist),根据网表和某种工艺的器件自动生成具体电路然后生成该工艺条件下这种具体电路的延时模型仿真验证无误后用于制造ASIC芯片或写入CPLD和FPGA 器件中。在EDA技术领域中把用HDL语言建立的数字模型称为软核(Soft Core) 把HDL建模综合后生成的网表称为固核(Hade Core),对这些模块的重复利用缩短了开发时间。提高了产品开发率提高了设计效率。随着PC平台上的EDA工具的发展,平台上的Verilog HDL和VHDL仿真综合性能已相当优越,这就为大规模普及这种新技术铺平
6、了道路.目前国内只有少数重点设计单位和高校有一些工作站平台上的EDA工具而且大多数只是做一些线路图和版图级的仿真与设计,只有个别单位展开了利用Verilog HDL和VHDL模型(包括可综合和不可综合的)进行复杂的数字逻辑系统的设计.随着电子系统向集成化大规模高速度的方向发展,HDL语言将成为电子系统硬件设计人员必须掌握的语言。第一章 Modelsim简介和仿真的基本步骤1.1 modelsim简介modelsim仿真工具是美国Model公司技术开发的目前业界最通用的仿真器之一,可以对设计的VHDL或Verilog程序进行仿真,并支持IEEE常见的各种硬件描述语言标准,也可以对Verilog和
7、VHDL混合仿真,仿真精度高,仿真速度快。Model仿真工具的版本非常多,与Altera相关的主要有ModelSim-Altera(即AE版本)、ModelSim PE和ModelSim SE版本等。ModelSim-Altera是一个OEM版本,功能有限,而且仿真速度慢。而Modelsim SE则是ModelSim的最强专业版,功能最全且性能最好。1.2 modelsim仿真的基本步骤Modelsim快速仿真四步骤分别是:创建工程、添加Verilog代码文件、编译、仿真。1. 创建工程选择file new project,出现如图1-1所示的对话框。输入project name和希望的路径;
8、输入library name,缺省是work。图1-12 添加Verilog代码这一步的目的是将verilog文件添加到创建好的工程中。要添加的文件可以是先前已经创建好的,也可以现在输入。3 编译工程编译所有功能模块和测试模块,选择Compile中的Compile All,如下图所示 图1-24 仿真。首先是调用设计,选择SimulateSimulate,出现图1-2的对话框,选择该工程的testbench文件,单击右键,选择将所有信号(或你希望观察的信号)添加到wave窗口中。第二章 Verilog的基础知识2.1 verilog的主要功能作为一种硬件描述语言,Verilog HDL可以直接
9、描述硬件结构,也可以通过描述系统行为实现建模。Verilog HDL的主要特点和功能有:(1) 描述基本逻辑门,如and、or和nand等基本逻辑门都内置在语言中,可以直接调用。(2) 描述基本开关模型,如nmos、pmos和coms等基本开关都可以直接调用。(3) 允许用户定义基元(UDP),这种方式灵活有效,用户定义的基元既可以是组合逻辑也可以是时序逻辑。(4) Verilog HDL中两种数据类型,线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。(5) 能够描述层次设计,可使用模块实例结构描述任何层次。(6) 设计的规模可以是任意的,语言不
10、对设计的规模(大小)施加任何限制。(7) Verilog HDL语言的描述能力可以通过使用编程接口(PLI)进一步扩展。PLI是允许外部函数访问Verilog HDL模块内信息,允许设计者与模拟器交互的例程集合。(8) 设计能够在多个层次上加以描述,从开关级、门级、寄存器传送级(RTL)到算法级,报括进程和队列级。(9) 能够使用内置开关级原语在开关级对设计完整建模。(10) 同一语言可用于生成模拟激励和指定测试的验证约束条件。(11) Verilog HDL不仅能够在RTL上进行设计描述,而且能够在体系结构级和算法级行为上进行设计描述。(12) 能够使用门和模块实例化语句在结构级进行结构描述
11、。(13) Verilog HDL具有混合方式建模能力,即设计中每个模块均可以在不同设计层次上建模。、(14) Verilog HDL具有内置逻辑函数,例如&(按位与)和|(按位或)。2.2 verilog基本语法2.2.1 wire型和reg型(1) wire型wire型数据常用来表示以assign关键字指定的组合逻辑信号。Verilog程序模块中输入、输出信号类型默认时自定义为wire型。wire型信号可以用做方程式的输入,也可以用做“assign”语句或实例元件的输出。wire型信号的定义格式如下: wiren-1:0 数据名1,数据名2,.,数据名N;(2) reg型reg是寄存器数据
12、类型的关键字。寄存器是数据储存单元的抽象。通过赋值语句可以改变寄存器的值,其作用相当于改变触发器存储器的值。reg型数据常用来表示always模块内的指定信号,常代表触发器。reg型信号的定义格式如下:regn-1:0 数据名1,数据名2,-,数据名N;reg数据类型的缺省值是未知的。reg型数据可以为正值或负值,但当一个reg型数据时一个表达式中的操作数,它的值被当做无符号值,即正值。reg型和wire型的区别在于:reg型保持最后一次的赋值,而wire型则需要持续地驱动。2.2.2 initial模块和always模块(1) initial模块在进行仿真时,一个initial模块从模拟0时
13、刻开始执行,且在仿真的过程中指执行一次,在执行完一次后,该initial就被挂起,不在执行。Initial模块的格式为:InitialBegin/fork块内变量说明时序控制1 行为语句1;时序控制n 行为语句n;End/join(2)always模块always模块是一直重复执行的且可综合,always过程块由always过程语句和语句块组成,其格式为: always (敏感事件列表) begin/fork 块内变量说明 时序控制1 行为语句1; - 时序控制n 行为语句; end/join2.2.3 边沿和电平触发事件事件控制分为两种:边沿触发事件和电平触发控制事件。边沿触发事件是指指定信
14、号的边沿信号跳变时发生指定的行为,分为信号的上升沿和下降沿。上升沿用posedge关键字描述,下降沿用negedge关键字描述。电平触发事件是指指定信号的电平发生变化时发生指定的行为。2.2.4 条件语句(1) if_elseIf语句是用来判断所给定的条件是否满足,根据判定的结果(真或假)决定给出的两种操作之一。If语句的语法如下:If(state_1)procedural_condition_1else if(state_2)procedural_condition_2elseprocedural_condition_3如果对state_1求值的结果为某个非零值,那么procedural_c
15、ondition_1被执行,如果state_1的值为0、x、或z,那么procedural_condition_1不执行。如果存在一个else分支,那么这个分支被执行。在if_else语句的使用过程经常出现if语句的嵌套,因此应注意if和else的匹配问题。(2) case语句case语句的语法形式:case(case_expr)case_item_exprcase_item_expr : statementdefault : statementendcasecase 括号内的表达式称为控制表达式,case_item_expr括号内的表达式为分支表达式。控制表达式通常表示为控制信号的某些位,分
16、支表达式则用这些控制信号的具体状态值表示,因此,分支表达式又可以称为常量表达式。 case语句首先将控制表达式case_expr的值计算出来,然后依次与各个分支语句case_item_expr的值进行比较。若匹配则执行该分支的语句,如果所有的分支表达式的值都没有与表达式的值相匹配,就执行default后面的语句。default项可有可无,一个case语句中只能有一个default项。2.2.5 阻塞和非阻塞赋值 在硬件中,过程赋值语句表示用赋值语句右端表达式所推导的逻辑来驱动该赋值语句左边表达式的变量。过程赋值语句只能出现在always语句和initial语句。有两种过程赋值语句:(1) 阻塞
17、赋值(blocking assignments)阻塞赋值用符号“=”来完成,“阻塞赋值”由其赋值操作行为而得名“阻塞”即时说在当前的赋值完成前阻塞其他类型的赋值任务,但是如果右端表达式中含有延时语句,则在延时没结束前不会阻塞其他赋值任务。(2) 非阻塞赋值(nonblocking assignments)非阻塞赋值有“=”来完成,“非阻塞赋值”也有其赋值操作行为而得名:在一个时间步(time step)的开始估计右端表达式的值,并在这个时间结束时用等式右边的值更新取代左端表达式。在估算右端表达式和更新左端表达式的中间时间段,其他的对左端表达式的非阻塞赋值可以被执行,即“非阻塞赋值”从估计右端开
18、始并不阻碍其他的赋值任务。通过实践表明,遵循以下的编码风格可以大大减少设计中的错误和提高设计效率:(1) 对组合逻辑建模采用阻塞赋值。(2) 对时序逻辑建模采用非阻塞赋值。(3) 用多个always块分别对组合和时序逻辑建模。(4) 尽量不要在同一个always块里面混合使用“阻塞赋值”和“非阻塞赋值”:如果在同一个always块里面既组合逻辑又为时序逻辑建模,则应使用“非阻塞赋值”。2.2.6 组合逻辑电路(1)组合逻辑电路的特点:任何时刻的输出仅决定于当时的输入信号,这是组合逻辑电路在功能上的共同特点。(2)组合逻辑电路的设计方法:第一步,逻辑抽象。第二步,写逻辑表达式。第三步,绘逻辑图。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 FPGA 设计 汉明码 编码器 解码器
链接地址:https://www.31doc.com/p-3282499.html