文档详情

移位寄存器实验报告..doc

发布:2017-01-20约1.99千字共7页下载文档
文本预览下载声明
《数字逻辑电路》实验报告 课程名称:数字逻辑电路实验 实验编号:07 实验名称:移位寄存器实验 报告时间:2013.11.14 实验目的 本实验通过介绍几种常用寄存器的设计方法,复习寄存器的原理,学习寄存器和常用移位寄存器的设计。 实验原理(背景知识) 理论知识: 在数字电路中,移位寄存器(英语:shift register)是一种在若干相同时间脉冲下工作的以触发器为基础的器件,数据以并行或串行的方式输入到该器件中,然后每个时间脉冲依次向左或右移动一个比特,在输出端进行输出。这种移位寄存器是一维的,事实上还有多维的移位寄存器,即输入、输出的数据本身就是一些列位。实现这种多维移位寄存器的方法可以是将几个具有相同位数的移位寄存器并联起来。 三.实验环境和工具: Quartus||12.0 FPGA开发板 四.实验设计思路 新建一个Verilog语言文件,在此Verilog元文件中试调用三种不同的存储单元来完成,编译工程,用RTL Viewer工具查看代码生成的寄存器传输级电路,然后用Technology Map Viewer工具查看电路在FPGA中的实现,比较三个电路,看看有什么区别。 使用Modelsim对电路进行仿真,查看三个存储单元的输出结果,比较三种存储单元的不同。 实验的测试序列或验证方法 测试序列:选取几组具有代表性的序列module D_latch(d,clk,qa,qb,qc); input d,clk; output wire [1:0]qa; output wire [1:0]qb; output wire [1:0]qc; seg2 wo2(d,clk,qa[1:0]); seg1 wo1(d,clk,qb[1:0]); seg0 wo0(d,clk,qc[1:0]); endmodule module seg2(d2,clk2,qa2); input d2,clk2; output reg [1:0]qa2; always @ (*) begin if (clk2) begin qa2[1]=d2; qa2[0]=~d2; end end endmodule module seg1(d1,clk1,qb1); input d1,clk1; output reg [1:0]qb1; always @ (posedge clk1) begin qb1[1]=d1; qb1[0]=~d1; end endmodule module seg0(d0,clk0,qc0); input d0,clk0; output reg [1:0]qc0; always @ (posedge ~clk0) begin qc0[1]=d0; qc0[0]=~d0; end endmodule 2.编写测试代码: always // optional sensitivity list // @(event1 or event2 or .... eventn) #10 clk=~clk; initial begin // code executes for every event on sensitivity list // insert code here -- begin d = 1b0; clk =1b0; #7; d =1b1; #7; d =1b0; #7; d =1b1; #7; d =1b0; #7; d =1b1; #7; d =1b0; #7; d =1b1; #7; d =1b0; #13; d =1b1; #7; d =1b0; #7; 3.仿真测试结果 4. 使用RTL Viewer查看代码生成的寄存器传输 5. 使用Technology Map Viewer工具查看电路在的实现 实验结果 1.用Verilog代码成功实现了一个D锁存器,上升沿D触发器,下降沿D触发器 2.仿真结果和预期相同 实验中遇到的问题及解决方案 一直没有找到合适的放置clk=~clk的地方,后来上网查询资料,发现要把INITIAL放在时钟代码后面。 功能仿真时,由于大小单位没有设置好,导致一开始只能看到直线,设置波形图大小之后正常显示结果。 实验的启示/意见和建议 更加熟练学会使用。 问题分化分几个小问题来实现。
显示全部
相似文档