江苏大学-硬件基础课程设计-A5-1流密码器_第1页
江苏大学-硬件基础课程设计-A5-1流密码器_第2页
江苏大学-硬件基础课程设计-A5-1流密码器_第3页
江苏大学-硬件基础课程设计-A5-1流密码器_第4页
江苏大学-硬件基础课程设计-A5-1流密码器_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江苏大学计算机学院 TIME\@"yyyy年M月"2019年2月 江苏大学计算机学院 TIME\@"yyyy年M月"2019年2月1.概述1.1设计目的(1)掌握FPGA设计软件QuartusII的使用方法;(2)了解数字系统在信息安全领域中的应用,熟悉查阅资料方法,锻炼学习能力;(3)训练使用VerilogHDL进行较复杂逻辑电路设计的能力;(4)熟练使用调试工具,提高分析问题、解决问题的能力;(5)培养良好的文档习惯,锻炼撰写规范报告的能力。1.2设计要求(1)能够全面地应用课程中所学的基本理论和基本方法,完成从逻辑电路到简单数字系统或计算机系统的设计;(2)能够独立思考、独立查阅资料,独立设计规定的系统;(3)能够独立地完成实施过程,包括电路设计、调试验证和排除错误。1.3设计任务用VerilogHDL设计一个A5/1流密码器;设计多功能移位寄存器用于保存和移位要加密/解密的数据;用流密码器和移位寄存器组成对称加密数据通路;用状态机的方法设计控制单元,由控制单元控制自动完成加密及解密过程。(1)分析系统功能需求,制定详细设计方案;(2)通过VerilogHDL完成规定的设计内容,采取模块化、层次化的设计方法设计电路;(3)在实验板上验证设计的正确性,认真记录测试过程中遇到的故障以及解决方法;(4)撰写设计报告,并对存在的问题进行分析、提出改进意见。1.4实验设备及软件工具实验设备:windows系统电脑实验系统:WeLab远程实验板设计软件:QuartusII12.0WebEdition2.设计2.1功能分析本次设计的A5/1密码器是一个简单易用的硬件加密/解密器,它的功能分析如下:保存和显示数据:硬件内部设计有移位寄存器来保存输入数据和加/解密获得的数据,通过数码管可以显示加/解密获得的数据。即输入待处理的数据,启动密码器进行处理后,就可以显示处理后的数据加密/解密输入的数据:本密码器是对称式的密码器,输入明文能得到相应的密文,而再输入相应的密文,就能解密出相应的明文,限制二进制输入位数为16位,A5/1密钥机制的复杂性使得它更难被破译2.2整体设计思路本密码器总体上分为两个大模块,一是外部接口模块,该模块中定义了外部信号和内部信号的连接,从而实现内外部的交互;二是FSM状态机控制单元,也是实验逻辑所在,该模块控制了密码器的状态运转,在每个时钟周期内进行相应的数据处理,次态计算,以及状态转换,从而实现每个时钟周期内加密一位输入数据,加密了16次之后将其进行输出模块一:外部接口将输入端口赋值给内部信号:将连续16个开关赋值给16位输入信号IN,将按键0赋值给外部输入的启动信号start_asyn,将按键1赋值给重置信号_reset内部信号赋值给输出端口(数码管)观察:一位数码管最多能表示四位二进制数,将16位的处理完成数据OUT分为四个部分分别赋值给四个数码管启动信号处理与模块连接:将外部输入的启动信号start_asyn进行处理,在启动重置或者加/解密完成的时候将实际的启动信号start置0,在时钟来临的时候将start_asyn赋值给start。将此模块连接到FSM控制模块模块二:FSM控制单元start=1,开始加密,计数器启动start=1,开始加密,计数器启动初态start=0,未启动时count<4’hF,count计数一次,加密一位encrypt加密态init初态start=0,未启动时count<4’hF,count计数一次,加密一位encrypt加密态init初态count=4’hF,加密完成初态count=4’hF,加密完成初态计数器:四位计数器,重置时计数值置0,启动加/解密时启动计数,总共加/解密16位计数16次,从0开始计数,到15即计数16次。完成加/解密计数值置0状态机数据处理:重置信号为1则把输出寄存器清零。时钟来临时,若现态为初态,start=1则根据输入数据和总密钥初始化输入寄存器和三个分密钥寄存器;若现态为加密态,加密一位输入数据后放入输出寄存器次态计算:若现态为初态,start=1则次态为加密态,否则为初态;若现态为加密态,count<4’hF则次态为加密态,否则为初态状态转换:重置信号为1则将现态转到初态。时钟来临时,将现态转到计算好的次态运作流程和时序顺序:(1)时钟来临:外部启动信号start_asyn赋值给启动信号start (‘+’表示同时发生) +根据现态来处理数据+状态转换+计数器根据条件计数 (2)重置:输出寄存器置0+现态跳转为初态+计数器清0+启动信号置0(现态为上次时钟周期转换成的次态,组合逻辑的always块有自己的触发条件)2.3核心设计及阐释本次设计的核心设计为FSM控制单元,各部件详细设计如下:计数器:敏感列表为时钟上升沿和重置信号上升沿,表示当时钟来临或者按下重置键的时候激活该部件,重置信号为1或现态为初态时计数器置0,现态为加密态是计数一次状态定义和变量定义:需要用到的变量,总密钥在定义的时候初始化,并且不做更改。状态定义,定义初态为0,加密态为1输出逻辑(数据处理):数据处理是本次设计最核心的地方。敏感列表为时钟上升沿和重置信号上升沿,表示当时钟来临或者按下重置键的时候激活该部件。重置信号为1时将输出寄存器清零。时钟来临时,若现态为初态,start=1则根据输入数据和总密钥初始化输入寄存器和三个分密钥寄存器;若现态为加密态,加密一位输入数据后放入输出寄存器,然后分密钥寄存器、输入寄存器和输出寄存器都需要进行移位。三个分密钥有它们自己的线性反馈移位规则。每次将最高位加密后放到最低位,其他位都向高位移动一位,当加密16次后,原来在最低位的第一位加密数据就回到了最高位下方的小部件是用来计算密码流的,每次分密钥寄存器进行了更改,就按照当前的分密钥进行一位密码流的计算,然后才能根据此密码流进行数据加密,因为需要先计算出使能位才能再计算密码流,所以只能使用组合逻辑和阻塞赋值,即满足触发条件时马上运行所有语句,code计算时使用刚计算好的M进行计算,而不是上次触发运行时M计算的结果次态计算:敏感列表为*,表示所有信号改变的时候都会触发,这样就能在每个信号变换时及时决定好次态,这个部件也是组合逻辑,一经触发马上执行。有信号变化时,若现态为初态,,完成信号done置0,start=1则次态为加密态,否则为初态;若现态为加密态,count<4’hF则次态为加密态,完成信号done置0,否则,加密次数达到16次,将完成信号done置1,将输出寄存器的值赋给输出信号OUT。注:数码管显示的时OUT的值,重置时重置的是输出寄存器OR的值状态转换:敏感列表为时钟上升沿和重置信号上升沿,表示当时钟来临或者按下重置键的时候激活该部件。重置信号为1则将现态转到初态。时钟来临时,将现态转到计算好的次态,而数据处理部分是根据上次转换的次态来进行判断的,即本次时钟周期中,现态为上次时钟周期最后转换成的次态除此之外,时钟信号的控制对于时序电路的设计来说也是非常关键的,本次设计使用的时钟分频模块为偶分频模块,分频系数为50000,实验板的时钟频率为50MHz,所以分频后的时钟输出频率为1KHz,即最大时钟周期为1ms2.4验证测试输入四位16进制数据4’h1234,得到数据4’h2A57输入四位16进制数据4’h2A57,得到数据4’h1234输入四位16进制数据4’hABCD,得到数据4’h93AE输入四位16进制数据4’h93AE,得到数据4’hABCD注:由于远程实验板更新数据比较不稳定,改变开关输入数据后前几次按下密码器启动键时,输出数据为未完成16次加密时的数据,但多按几次后会维持在一个稳定的显示数据,虽然再按也会有一两次输出不稳定,但稳定时的数据就是加密完成的数据,通过对称解密可以验证。重置键重置的是内部输出寄存器,并不清零数码管观察的OUT信号,所以按下重置键没有现象,所以不作演示附录:设计源代码文件目录:只附上主要文件Virtual_Lab_Top.v和FSM_controller.v的代码:Virtual_Lab_Top.v://A5/1密码器`default_nettypenonemoduleVirtual_Lab_Top(inputwireCLOCK,inputwire[4:0]BUTTON,//按键inputwire[35:0]SWITCH,//开关outputwire[35:0]LED,//指示灯outputwire[3:0]HEX0,//数码管 outputwire[3:0]HEX1, outputwire[3:0]HEX2, outputwire[3:0]HEX3);//输入端口赋值给内部信号wire[15:0]IN=SWITCH[15:0]; //需加/解密的输入数据wirestart_asyn=BUTTON[0]; //启动信号wire_reset=BUTTON[1]; //重置信号regstart; //启动信号定义wiredone; //完成信号定义wire[15:0]OUT; //加/解密完成的输出数据信号定义//启动信号always@(posedgeCLOCKorposedge_resetorposedgedone)begin if(_reset==1||done==1) start<=1'b0; else start<=start_asyn;end//连接FSM控制模块FSM_controlleru1(CLOCK,_reset,start,IN,OUT,done);//内部信号赋值给输出端口(数码管)观察assignHEX0=OUT[3:0];assignHEX1=OUT[7:4];assignHEX2=OUT[11:8];assignHEX3=OUT[15:12];endmoduleFSM_controller.v://-----------A5/1密码器-----------//FSM控制单元moduleFSM_controller( inputCLOCK,_reset,start, input[15:0]IN, outputreg[15:0]OR, outputregdone);reg[15:0]IR,OUT; //输入,输出寄存器reg[63:0]LFSR=64'h3170604015ABCDEF; //十六位总密钥reg[18:0]X; //分密钥Xreg[21:0]Y; //分密钥Yreg[22:0]Z; //分密钥ZregM; //使能总位regcode; //每次得到的1位密码流reg[3:0]count; //4位计数器//----------计数器-----------always@(posedgeCLOCKorposedge_reset) //为15即已加密16位begin if(_reset==1) count<=0; elseif(current_state==init) count<=0; elseif(current_state==encrypt) count<=count+1;endregcurrent_state,next_state; //----------状态定义----------localparaminit=1'b0; //初始态localparamencrypt=1'b1; //加密态/*---------输出逻辑----------输出发生器定义了数据通路,并且通过行为描述来定义了数据通路的控制信号*/always@(posedgeCLOCKorposedge_reset)beginif(_reset==1) OR<=0;elsebegincase(current_state) init: begin//初始化 if(start==1) begin IR<=IN; X<=LFSR[18:0]; Y<=LFSR[40:19]; Z<=LFSR[63:41]; end end encrypt:begin OR<={OR[14:0],code^IR[15]}; IR<={IR[14:0],IR[15]}; X<={X[17:0],X[13]^X[16]^X[17]^X[18]}; Y<={Y[20:0],Y[20]^Y[21]}; Z<={Z[21:0],Z[7]^Z[20]^Z[21]^Z[22]}; end endcaseendendalways

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论