ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:2.12MB ,
资源ID:3365273      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3365273.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(红绿灯控制实验报告.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

红绿灯控制实验报告.docx

1、红绿灯控制实验报告计算机专业类课程实验报告日期:2019 年 6 月29日实验一1、实验名称:红绿灯控制2、实验学时:43、实验内容和目的: 实验内容:根据图3-1所示的电路控制表设计一个控制电路,使其能够通过改变开关控制红色、黄色、绿色三种颜色的灯的亮灭。 实验目的:熟悉集成开发系统与Verilog HDL硬件描述语言,能够编写简单的控制电路代码并在开发板上实现。图3-1 电路控制信号表4、实验原理:在Xilinx ISE Design Suite 14.7集成开发系统上创建Verilog模板,并使用Verilog HDL编写模板。主要使用了assign赋值语句和算数和逻辑操作语句。最后根据

2、开发板上对应操作按钮编写约束并在开发板上生成。5、实验器材(设备、元器件) PC计算机:Xilinx ISE Design Suite 14.7集成开发系统、digilent.adept.system_v2.10.2.exe FPGA数字电路开发平台:Anvyl(燧石TM)开发板6、实验步骤:1) 推算红黄绿灯的控制逻辑和开关0,1的逻辑表达式为a) Red = switch1 switch 2b) Green = switch1 switch 2c) Yellow = (switch1 switch2) 2) 创建模块单元接口,并设置好输入输出线路,这里为两个input,三个output3)

3、 编写相关代码逻辑 (这里对异或门进行优化)module lights(input A,B, output R,G,Y); assign R = (A & B)|(A & B); assign G = R; assign Y = R;endmodule4) 检验RTL电路5) 进行仿真测试: 试代码如下,测试逻辑见代码注释initial begin/初始A均设置为0,此时应该黄灯亮A = 0;B = 0;/250纳秒后,B为1,这个时候红绿灯亮#250; B = 1; /250纳秒后,A为1,B为0,这个时候红绿灯亮#250;A = 1;B = 0;/250秒后,A为1,B为1,这个时候黄灯亮

4、#250;B = 1;end 仿真测试结果如下(图片较长,请放大查看看)6) 真机测试: 将A与B分别映射到开发板的V5和U4上。 RGB分别映射到开发板的T8 R7 U6上 (按下V5或U4)红绿灯亮 (同时(不)按V5和U4)黄灯亮7、实验结论、心得体会和改进建议: 结论:初步了解了Verilog的使用和简易的逻辑运算在电路中的实现原理。 心得体会:异或运算拥有三级门延迟,速度较慢,这里可以通过与或非门进行优化,使得延迟降低到2级门。实验二1、实验名称:单周期CPU设计计算部分实现2、实验学时:43、实验内容和目的: 实验内容:使用特定的开发平台和开发板设计并实现CPU中的一些基本部件:3

5、2位二选一多路选择器、5位二选一多路选择器、32位寄存器堆、ALU和(无)符号扩展器。 实验目的:熟悉组成CPU的基本部件和CPU的基本结构,能够设计相关基本器件。4、实验原理: 32位二选一多路选择器根据sel命令分别对32位的两个传入数据A和B进行选择,输出其中一个数据。其逻辑结构如下。图4-1 二选一多路选择器的RTL图 32位寄存器堆由32个32位寄存器组成,其功能是根据时序电路对数据进行存入和读出指定寄存器数据的操作。其逻辑结构如下寄存器堆的逻辑结构图(源计组PPT) 32位寄存器堆的RTL图 ALU是CPU中重要的运算器,它可以根据ALU_op的3位控制命令对传入的两个数据进行加、

6、减、与、或等运算。 ALU的逻辑结构图(源计组PPT)ALU的RTL结构定义的ALU_Ctr指令 扩展器是CPU在进行I型指令等操作时的重要部件,其功能是根据传入的16位数据的最高位对其进行符号扩展或无符号扩展为32位的立即数,并将其输出。这里原本给定的是符号扩展器,但是对于ori操作对于立即数进行的是无符号扩展(且ROM里面有此指令),故这里修改为通用扩展器。图4-4 符号扩展器的逻辑结构图5、实验器材(设备、元器件) PC计算机:Xilinx ISE Design Suite 14.7集成开发系统、digilent.adept.system_v2.10.2.exe FPGA数字电路开发平台

7、:Anvyl(燧石TM)开发板6、实验步骤:1、 32位2选1选择器: 根据其结构推断32位2选1选择器需要的线路 根据逻辑编写相关代码module MUX32_2_1(input 31:0 A, B,input sel,output 31:0 O );assign O = sel? B: A;endmodule 查看32位2选1选择器的RTL结构图(见上图) 测试:略,实现比较简单,暂时不需要测试2、 寄存器堆: 设计寄存器堆的逻辑结构: 根据计组PPT提供的原理和结构图,确定寄存器堆的输入和输出的接口。 布置相关的寄存器(这里用32位的数组进行替代),并对其进行初始化。 定义输入数据源与寄

8、存器的写入逻辑 定义相关的输出接口A和B与数据源的线路连接关系。 编写相关的代码(实现逻辑见备注):module RegFile( input 4:0Rn1,Rn2,Wn, input Write,Clock, input 31:0Wd, output 31:0Out1,Out2 );/创建32个长度为32位的数组模拟寄存器堆reg 31:0 Register1:31;/Out1输出Rn1信号指定的寄存器assign Out1 = (Rn1 = 0) ? 0: RegisterRn1;/Out2输出Rn2信号指定的寄存器assign Out2 = (Rn2 = 0) ? 0: Register

9、Rn2;/当始处于时钟上升沿并且处于写使能的时候,向寄存器堆里面写入数据always ( posedge Clock ) beginif (Write) & (Wn != 0) RegisterWn = Wd;end/堆寄存器堆里面的数据进行初始化(全0)integer i;initial beginfor (i = 1 ; i = 31; i = i + 1) Register i = 0;endendmodule 测试寄存器堆: RTL图如下(图片较小,请放大查看): 编写相关仿真代码: 仿真测试逻辑,每间隔100纳秒,向寄存器堆里写入指定数据,并且不断更新Rn1和Rn2的值,观察out1

10、和out2的输出结果。always begin#400; /要写入的寄存器编号,每隔400纳秒,要写入的目标寄存器编号加1Wn = Wn + 1; /这里将写入的Wd取值为4倍的Wn的值 /声明一个Temp临时变量用于0扩展 temp = 28h0, Wn; Wd = temp29:0, 2b00;/输出端口A,B指定的目标寄存器的编号+1Rn1 = Rn1 + 1;Rn2 = Rn2 + 1; endalways begin#100;Clock = Clock;Write = Clock = 1? 1: 0;end 校验仿真测试结果(图片较长,请放大查看): 为了方便查看,这里将结果转化位1

11、6进制。 由图1可知,Rn1和Rn2增加正常,Out1与out2输出的结果与寄存器堆里的指定Rn编号相符,即说明输出结果正确。 由图2可知,寄存器堆里存放的数据满足Wd = 4*Wn,说明写入正确并且数据得到了顺利的保存。图1仿真结果图2寄存器堆的里存放的数据3、 通用扩展器 通用扩展器的实现逻辑相对较为简单,故这里只放出实现的代码module Extender( input 15:0 a, input ExtOP, output 31:0 b);assign b = ExtOP ? a15? 16hffff: 16h0, a:a15? 16h0000: 16h0, a;endmodule4、

12、 ALU 设计ALU的逻辑结构 根据计组教材PPT提供的原理结构图,确定ALU的输入和输出的接口 参考老师提供的指令ROM提供的指令,根据实际情况,确定ALUCtr对应的相关操作。 编写相关代码:define ADD 3b000define SUB 3b100define AND 3b001define OR 3b010define XOR 3b101define LUI 3b110module ALU(input 31:0 A, B,input 2:0 ALU_Ctr,output reg 31:0 Result,output reg Zero);always (A or B or ALU_

13、Ctr) begin case (ALU_Ctr)ADD :Result = A + B;SUB :Result = A - B;AND :Result = A & B;OR :Result = A | B;XOR :Result = A B;LUI :Result = B 16; default: Result = 32h00000000; endcaseZero = |Result;endendmodule 测试ALU ALU的RTL结构图如下(图片较小,请放大查看): 编写ALU的仿真测试代码(详细测试内容见注释):initial beginA = 32h000000ff;B = 32h

14、000000cc;ALU_Ctr = 111;/初始为111,此时返回全0#100;ALU_Ctr = 3b000;/测试加法#100;ALU_Ctr = 3b100;/测试减法#100;ALU_Ctr = 3b001;/测试与#100;ALU_Ctr = 3b101;/测试或#100;ALU_Ctr = 3b010;/测试异或#100;ALU_Ctr = 3b110;/测试B的左移16位#100;B = 32h000000ff;ALU_Ctr = 3b100;/测试0标志位end 检验ALU仿真测试结果(图片较长,请放大查看): 为了方便查看,这里将结果转化为16进制 由下图和上面相关测试数

15、据对比可知,上述的相关操作均能够通过测试。七、 实验结论、心得体会和改进建议:心得: 做实验千万不要一味的抄老师的代码,之前PPT里面的代码是几个版本的结合体,实际上不互相兼容,这也是之前调不出来的主要原因。ALU所做的所有操作应当结合指令ROM和控制单元,而不是单纯的抄写计组书上面的MIPS CPU的操作逻辑。实验三一、 实验名称:单周期CPU的设计与实现二、 实验学时:4三、 实验内容和目的: 实验内容:要求对单周期CPU中控制器进行设计与实现,主要包括Control部件和ALU_Ctr部件。 实验目的:了解CPU中控制器部件的工作原理,能够熟练使用系统开发平台对于设计的控制电路进行仿真与

16、实现,最后能够将部件进行封装。四、 实验原理: 本次实验要实现的是基于MIPS指令集的单周期CPU,其中控制单元如图4-1所示,包括两部分:Control部件和ALU_CTR部件。当MIPS指令类型为R型时,op为000000,指令功能由输入进ALU_CTR部件的func指令字段控制。当MIPS指令类型为I型和J型时,指令的功能由op字段控制。图4-1 控制器单元的结构图 Control部件和ALU_CTR部件的设计要能够满足MIPS中的三种指令,其控制字段与指令的关系如图所示: Control部件中输入与输出的关系(源计组ppt) 根据给出的关系图得出控制信号的逻辑表达式,在集成开发系统上进

17、行编程和仿真并在开发板上进行实现,最后对控制电路进行封装形成Control_Unit。五、 实验器材(设备、元器件) PC计算机:Xilinx ISE Design Suite 14.7集成开发系统、digilent.adept.system_v2.10.2.exe FPGA数字电路开发平台:Anvyl(燧石TM)开发板六、 实验步骤:(一) Control: 根据计组PPT上面op指令中非R型指令的部分的指令特征以及对应的信号确定Control负责的功能。 参照上图中给定的控制单元的结构分析Control单元输入和输出的接口 根据指令ROM中的指令,确定哪些指令会用得到(比如上图并未提供Ju

18、mp信号的接口但是实际上却用到了,故还需要添加Jump信号的接口) 参考计组PPT确定Control输出信号的组合逻辑(原理如下) 根据上面确定的组合逻辑,编写Control部分的代码 module Control( input 5:0 op, output RegDst, RegWrite, ALUSrc, output MemWrite, MemtoReg, output Branch,Jump,ExtOP, output 2:0 ALU_op,R_type);wire i_Rt = |op;wire i_lw = op5 & op4 & op3 & op2 & op1 & op0;wir

19、e i_sw = op5 & op4 & op3 & op2 & op1 & op0;wire i_beq = op5 & op4 & op3 & op2 & op1 & op0;wire i_ori = op5 & op4 & op3 & op2 & op1 & op0;wire i_jump = op5 & op4 & op3 & op2 & op1 & op0;assign RegDst = i_Rt;assign RegWrite = i_Rt | i_lw | i_ori;assign ALUSrc = i_lw | i_sw | i_ori;assign MemWrite = i_

20、sw;assign MemtoReg = i_lw;assign Branch = i_beq;assign Jump = i_jump;assign ExtOP = i_ori;assign ALU_op2 = i_beq;assign ALU_op1 = i_ori;assign ALU_op0 = 0;assign R_type = i_Rt;endmodule(二) AlU_OP 根据计组PPT上给定的ALU_OP结构,确定ALU_OP所需要的接口 根据R型指令对于的ALT_Ctr编写对应的逻辑 由于7条指令系统中只有add(000)和sub(100)两条R型指令 故实际上只需满足以下

21、条件即可:ALUctr = 0ALUctr = 0ALUctr = func ALU_OP实现代码如下:module ALUop( input 5:0 func,output 2:0 ALU_op);assign ALU_op0 = 0;assign ALU_op1 = 0;assign ALU_op2 = func1;endmodule(三) ControlUnit的封装: ControlUnit的整体结构如图所示: 故这里需要一个二选一选择器将2者连接,代码如下 module Control_Unit(input 5:0 op, func,output RegDst, RegWrite,

22、ALUSrc,output MemWrite,MemtoReg,output Branch,Jump,ExtOP,output 2:0 ALU_ctr);wire 2:0 ALU_op1;wire 2:0 ALU_op2;wire R_type;Control U0(.op(op),.RegDst(RegDst),.RegWrite(RegWrite),.ALUSrc(ALUSrc),.MemWrite(MemWrite),.MemtoReg(MemtoReg),.Branch(Branch),.Jump(Jump),.ExtOP(ExtOP),.ALU_op(ALU_op1),.R_type

23、(R_type);ALUop U1(.func(func),.ALU_op(ALU_op2);/这里根据是否是R型指令对ALUctr进行选择输出assign ALU_ctr = R_type? ALU_op2:ALU_op1;endmodule ControlUnit整体的RTL图: ALU_OP的整体RTL图: Control部分的RTL图(图片过长,请放大查看): 测试:由于单独测试控制单元相对来说比较麻烦,故这里放在后面测试MIPS_CPU的时候一起测试。七、 实验结论、心得体会和改进建议:心得: 做实验的时候千万不能一味的抄去PPT上面的代码,应该结合实际功能和场景去理解并设计。比如说

24、这里的ControlUnit并没有提供Jump信号,但是实际上指令ROM里面的第一条就是Jump指令,所以需要手动添加。 某一个模块在仿真的时候过了并不代表数据正确了,也不代表连接了其他的模块就能够正常工作,比如说老师给的扩展器实际上仅仅为符号扩展器,但是在做ori指令的时候需要做无符号的扩展,所以应当在控制单元里面输出一个ExtOP信号,来保证数据的正确性。当然不这么做仿真跑出来任然有数据且一片绿,但是实际上数据是错误的。 在编写Control的时候应当严谨,保证输入的op能够正确的对应到ALU的控制信号和其他控制信号上,因为一般来说只要接上线了就会有数据,但是实际上很有可能op或func对

25、应的控制信号是错误的,但是仿真跑出来任是一片绿色,这些问题就只能够通过人工手动调试一一检查才能够找的出来。!改进建议: 强烈要求教一下如何使用Verilog 如何DEBUG,调试ControlUnit踩了不少的坑。实验四一、 实验名称:单周期CPU的设计与实现二、 实验学时:4三、 实验内容和目的: 实验内容:设计并实现Fetch部件,即取值电路部件。对之前实验中设计的部件按照单周期计算机CPU结构进行封装。最终实现可运行的MIPS CPU。 实验目的:了解并掌握基于MIPS指令集的单周期计算机CPU的结构和工作原理,可以根据单周期计算机结构图和MIPS指令集的相关知识设计并实现一个单周期计算

26、机的CPU。四、 实验原理: 对取值电路即Fetch部分电路进行封装 对MIPS CPU按照单周期计算机结构图进行封装。 将CPU,RAM,ROM,SEG,AN等组件封装为一个SOC图4-1 单周期计算机结构图五、 实验器材(设备、元器件) PC计算机:Xilinx ISE Design Suite 14.7集成开发系统、digilent.adept.system_v2.10.2.exe FPGA数字电路开发平台:Anvyl(燧石TM)开发板六、 实验步骤:1、 设计取址电路Fetch: 根据计组PPT提供的Fetch模块的结构与所学Fetch的功能,分析Fetch所需要的接口。 根据Fetc

27、h的输出的不同指令类型和输入的不同信号,将其拆分为多个内部元件来完成不同地址的生成。 分析Fetch输入的控制信号,确定内部元件之间接口如何连接 Fetch的相关代码(各个组件功能见注释): module Fetch(input Reset,Clock,Jump,Branch,Zero,input 31:0 br_imm,Instruction,output 31:0addr); wire31:0 pc_plus4,br_imm_ext,br_addr_extra,br_addr_result,jump_addr_result,next_pc;wire 1:0 select;/由输入的信号确定选择信号 assign select = (Jump) ? 2b10 :(Branch & Zero) ?

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2