数字电子技术基础实验
- 格式:docx
- 大小:699.56 KB
- 文档页数:15
评阅成绩
《数字电子技术基础实验》
实验报告
学 院:
学 号:
姓 名:
专 业:
实验时间:
实验地点:
2016 年 12 月
Figure 5.51 n位移位寄存器
一、实验目的及要求
编写testbench 验证Figure 5.51源代码功能,实现n位移位寄存器。
了解并熟悉移位寄存器的工作原理功能;
熟悉n位移位寄存器的逻辑功能。
所需功能:实现所需功能需要 R,Clock,L,w,Q,5个变量,其中参数n
设为缺省值16,以定义触发器的个数。
当时钟信号Clock从0变为1时刻,正边沿触发器做出响应:
当L=0时,对输出结果Q进行向右移位,将w的值赋给Q的 最高位,实现移位;
当L=1时,将输入R的值寄存在Q中;
所需EDA工具及要求:
Modelsim:
1、在Modelsim中建立工程,编写Figure 5.51 模块的源码;
2、编写Figure 5.51 的测试模块源码,对Figure 5.51 进行仿真、测
试,观察仿真波形图并进行分析等;
Synplify Pro:
1、使用Synplify Pro对Figure 5.51 进行综合,得到RTL View、
Technology View、综合报表等,进行观察、分析等;
二、实验内容与步骤
1、在Modelsim中建立工程,编写Figure 5.51 模块的源码;
本题实现的是一个n位移位寄存器,触发器对时钟信号Clock敏感,为正边沿敏感型。L实现对Q的控制,若L=1,则将R寄存到Q中;若L=0,则对Q向右移位。
如下图是一个4位移位寄存器
图表说明了该四位移位寄存器的移位过程
module shiftn (R, L, w, Clock, Q);
parameter n = 16;
input [n-1:0] R;
input L, w, Clock;
output reg [n-1:0] Q;
integer k;
always @(posedge Clock)
if (L)
Q <= R;
else
begin
for (k = 0; k < n-1; k = k+1)
Q[k] <= Q[k+1];
Q[n-1] <= w;
end
endmodule
这是可用于表示任意位宽的移位寄存器的代码,其中参数n设为缺省值16, 以定义触发器的个数。R和Q的位宽用n定义,描述移位操作的else 分支语句用for循环语句实现,可适用于由任意多个触发器组成的移位操作。
2、编写Figure 5.51 的测试模块源码,对Figure 5.51 进行仿真、测试,观察仿真波形图并进行分析等;
`timescale 1ns/1ns
module shiftn_tb; parameter n = 16;
reg [n-1:0] R;
reg L, w, Clock;
wire [n-1:0] Q;
integer i;
initial
begin
L=1'b0;
Clock=1'b0;
w=1'b0;
R=16'b0;
end
always #5 Clock = ~Clock;
always #10 L=~L;
always #20 w=~w;
always
for(i=0;i<16*16*16*16;i=i+1)
begin
#2 R=R+1;
end
initial
#1000000000 $stop;
shiftn e1(R, L, w, Clock, Q);
endmodule
这是可用于表示任意位宽的移位寄存器的测试模块源码。将变量 R,Clock,L,w初始化为零,采用for循环语句对变量进行改变,R和Q的位宽依然用n定义。
3、使用Synplify Pro对XXX进行综合,得到RTL View、Technology View、
综合报表等,进行观察、分析等;(建议用Altera Cyclone II EP2C20
器件)
4、使用QuatusII进行RTL Simulation、Gate Level Simulation操作,进行测试、观察仿真波形图并进行分析等。
三、实验结果与数据处理 1. 仿真图
初始时, R=0,Clock=0,L=0,w=0;
当Clock由0变1且L=0的时刻,Q向右移位;
Clock由1变0以及保持不变时,不论L为何值,Q不变;
当当Clock由0变1且L=1的时刻,Q=R;
2. RTL View 图中参数n设为缺省值16,以定义触发器的个数。
若L=1,当触发器在时钟正沿时,Q=R;若L=0,当触发器在时钟正沿时,将Q向右移一位,将w赋给最高位。
通过观察RTL View视图,结合源码,可见在源码中always语句判断时钟信号,用if-else语句判断左移还是右移,for语句进行移位操作,w和R一起可以看作是17位的数,解决了移位时最高位的问题,结合RTL View图从图中元器件来分析我们的源码基本需要这些器件来实现。
3. Technology View
四、分析与讨论
1. 在仿真时有时会出现以下错误:
# Error opening D:/code test/figure5.51 - tb.v
# Path name 'D:/code test/figure5.51 - tb.v' doesn't exist.
以及:
# Error: invalid command name "::.main_pane.dataflow.interior.cs.body.pw.df.c"
# Error: invalid command name "::.main_pane.dataflow.interior.cs.body.pw.df.c"
# Error: invalid command name "::.main_pane.dataflow.interior.cs.body.pw.df.c" # Error: invalid command name "::.main_pane.dataflow.interior.cs.body.pw.df.c"
2. Verilog源代码中不能有中文符号,尤其是中文空格,因为这一点不容易发现而导致一直编译不过。
Figure 5.53 有并行载入端的4位递增计数器
一、实验目的及要求
编写testbench 验证Figure 5.53源代码功能,实现有并行载入端的4位递增
计数器。
目的:了解并熟悉递增计数器的工作原理
熟悉4位递增计数器的逻辑功能
所需功能:实现所需功能需要 R,Resetn,Clock,L,E,Q,5个变量。
计数器中的触发器在Resetn从0变为1时刻,将计数器异步复位,否则 当时钟信号Clock从0变为1时刻,正边沿触发器做出响应:
当L=1时,计数器中的触发器从输入R并行加载数据,否则 当E=1时,计数器递增计数;
所需EDA工具及要求:
Modelsim:
1、在Modelsim中建立工程,编写Figure 5.53模块的源码;
2、编写Figure 5.53的测试模块源码,对Figure 5.53进行仿真、测试,
观察仿真波形图并进行分析等;
Synplify Pro:
1、使用Synplify Pro对Figure 5.53进行综合,得到RTL View、Technology
View、综合报表等,进行观察、分析等;
二、实验内容与步骤 1、在Modelsim中建立工程,编写Figure 5.53模块的源码;
本题实现的是一个有并行载入端的4位递增计数器,触发器对时钟信号Clock敏感,为正边沿敏感型;对异步复位信号Resetn敏感,为负边沿敏感型,当Resetn=0时,Q=0。L,E实现对Q的控制,若L=1,则将R寄存到Q中;若L=0,则在使能输入E的控制下计数器递增计数。
下图是一个包含使能和清零功能的递增计数器。
module upcount (R, Resetn, Clock, E, L, Q);
input [3:0] R;
input Resetn, Clock, E, L;
output reg [3:0] Q;
always @(negedge Resetn, posedge Clock)
if (!Resetn)
Q <= 0;
else if (L)
Q <= R;
else if (E)
Q <= Q + 1;
endmodule
这段代码描述了一个递增计数器。该计数器除了复位输入端之外,还有一个并行加载输入端,并行数据由输入向量R提供。第一个if语句与所示代码一样实现异步复位;else if分支语句说明,如果L=1,则计数器的触发器在时钟正沿时从输入R并行加载数据;如果L=0,则在使能输入E的控制下计数器递增计数。
2、编写Figure 5.53的测试模块源码,对Figure 5.53进行仿真、测试,观察仿真波形图并进行分析等;