数字逻辑实验报告(3)团队成员:
报告人:
实验指导教师:
报告批阅教师:
计算机科学与技术学院
20 年月日
一、实验内容
时序逻辑电路的Verilog HDL设计。
二、实验目的
1. 熟悉Xilinx Spartan-3E Field Programmable Gate Array开发系统和ISE14.1软件、Adept软件的操作;
2. 熟悉FPGA编程环境及实验流程;
3. 掌握Verilog HDL的编程方法。
三、实验所用组件
Basys2开发板(芯片为XC3S100E,封装为CP132)1套。
四、实验要求
1.险象验证与消除(必选)
如果将一位全加器电路的输出Si和Ci作一次同或运算,见图1所示电路,对应的理论波形和实际波形见图2所示。
图1 一位的全加器
图2 理论波形和实际波形
具体要求:
(1)用Verilog HDL设计该电路,利用仿真,验证图1所示电路存在险象;
(2)修改图1所示电路,消除险象,再用Verilog HDL设计它,利用仿真,验证修改后的电路不存在险象;
(3)将设计修改后的电路(不存在险象)下载到Basys2开发板上,并进行验证。
2.脉冲异步计数器(必选)
分析如图3所示的脉冲异步计数器电路,完成如下内容:
(1)说明该计数器的模是多少?
(2)用Verilog DHL实现该脉冲异步计数器(采用结构级描述),将之下载到Basys2开发板中,并进行验证。
图3脉冲异步计数器电路
3.时序逻辑电路的传输(可选)
图4为时序逻辑的一种传输电路,它的输入有2个,分别为INPUT和CLK、输出有一个,为OUT。电路的传输周期T=t CO(触发器的延时)+ t DELAY + t SU(触发器数据建立时间),如果CLK的周期大于或等于T,则电路传输正常;如果CLK的周期小于T,则触发器可能经历亚稳态,导致电路传输不正常。
t DELAY
&
t SU
t CO
源目的
图4时序逻辑的传输电路
具体要求:
假设源触发器的延时时间为17ns,非门的延时时间为12ns,目的触发器的数据建立时间为1ns。
(1)如果CLK的周期为35ns,用Verilog HDL设计该电路,给出含CLK、INPUT、OUT的仿真波形图;
(2)如果CLK的周期为25ns,用Verilog HDL设计该电路,给出含CLK、INPUT、OUT的仿真波形图;
(3)用Verilog HDL设计该电路,将之下载到Basys2开发板上,并进行验证(要求数据传输是正确的)。
五、实验方案设计
1.险象验证与消除设计方案
[要求:给出详细的设计过程,包括源程序、仿真程序、引脚约束(绑定)代码和注释以及修改后不存在险象的电路图,可续页]
(a)原图设计方案
(1)源程序:
module fa_str(output f,input a,input b,input c);
wire s1,t1,t2,si,ci;
xor #(1,1)
ux1(s1,a,b),
ux2(si,s1,c);
and #(1,1) ua1(t1,a,b),
ua2(t2,si,c);
or #(1,1) uo1(ci,t1,t2);
xnor #(1,1) uxn1(f,si,ci);
endmodule
(2)仿真程序:
module test1;
// Inputs
reg a;
reg b;
reg c;
// Outputs
wire f;
// Instantiate the Unit Under Test (UUT)
fa_str uut (
.f(f),
.a(a),
.b(b),
.c(c)
initial begin
// Initialize Inputs
a = 1;
b = 1;
c = 1;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always
#10 a=~a;
always
#10 b=~b;
always
#10 c=~c;
endmodule
(3)管脚约束:
(4)内部电路图:
(b)修改后(消除险象)设计方案
(1)源代码:
module add3(
input a,
input b,
input c,
output f,
output si,
output ci
);
wire d,e,g;
xor #(1,1) x1 (d,a,b);
and #(1,1) a1 (e,a,b);
xor #(1,1) x2 (si,d,c);
and #(1,1) a2 (g,d,c);
or #(1,1) o1 (ci,g,e);
xnor #(1,1) x3 (f1,si,ci);
nor #(1,1) (s3,a,b,c);
and #(1,1) (s4,a,b,c);
or #(1,1) (f,f1,s3,s4);
endmodule
(2)仿真代码:
module test4;
// Inputs
reg a;
reg b;
reg c;
// Outputs
wire f;
wire si;
wire ci;
// Instantiate the Unit Under Test (UUT) add3 uut (
.a(a),
.b(b),
.c(c),
.f(f),
.si(si),
.ci(ci)
initial begin
// Initialize Inputs
a = 1;
b = 1;
c = 1;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
always #10
a=~a;
always #10
b=~b;
always #10
c=~c;
Endmodule
(3)管脚约束
(4)内部电路图:
2. 脉冲异步计数器的分析和设计方案
[要求:给出详细的设计过程,包括源程序、仿真程序、引脚约束(绑定)代码和注释等,可续页]
(1)源代码:
`include "jkreg.v"
module mod(
input X,
output Z
);
wire sour = 1;
jkreg JK1(sour, sour, X, Q1);
jkreg JK2(QF4, sour, Q1, Q2);
jkreg JK3(sour, sour, Q2, Q3);
and gate1(J4, Q2, Q3);
jkreg JK4(J4, sour, Q1, Q4, QF4);
and gatez(Z, X, Q1, Q4);
Endmodule
//K1,K2,K3,K4为jkreg实例
module jkreg(J, K, clk, Q, QF);
input J, K, clk;
output Q, QF;
reg Q; //declare register type
assign QF=~Q;
initial begin
Q=0;
end //initialization
always @(negedge clk) begin
case({J,K})
2'b00: Q<=Q;
2'b01: Q<=0;
2'b10: Q<=1;
2'b11: Q<=~Q;
endcase
end
Endmodule
(2)仿真程序:
module modtest;
// Inputs
reg X;
// Outputs
wire Z;
parameter PERIOD = 100;
// Instantiate the Unit Under Test (UUT)
mod uut (
.X(X),
.Z(Z)
);
always begin
X=0;
#(PERIOD/2) X=1;
#(PERIOD/2);
end
initial begin
// Initialize Inputs
X = 0;
// Wait 100 ns for global reset to finish
// Add stimulus here
end
always #3 X=~X;
endmodule
(3)管脚约束:
(4)内部电路图
3.时序逻辑电路的传输设计方案
[要求:给出详细的设计过程,包括源程序、仿真程序、引脚约束(绑定)代码和注释等,可续页]
(a)CLK的周期为35ns时的设计方案
(1)源程序:
module Timelogic(
input INPUT,
input CLK,
output reg OUTPUT
);
reg q1,d1;
always@(posedge CLK)
begin
#17 q1=INPUT;
#12 d1=~q1;
#1 OUTPUT=d1;
end
endmodule
(2)仿真程序:
module text1;
// Inputs
reg INPUT;
reg CLK;
// Outputs
wire OUTPUT;
// Instantiate the Unit Under Test (UUT)
Timelogic uut (
.INPUT(INPUT),
.CLK(CLK),
.OUTPUT(OUTPUT)
);
always #35 INPUT=~INPUT;
initial begin
// Initialize Inputs
INPUT = 0;
CLK = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
endmodule
(1)引脚约束:
#Created by Constraints Editor (xc3s100e-cp132-4) - 2015/06/12 NET "CLK" TNM_NET = "CLK";
TIMESPEC TS_CLK = PERIOD "CLK" 35 ns HIGH 50 %;
# PlanAhead Generated physical constraints
NET "INPUT" LOC = P11;
NET "OUTPUT" LOC = M5;
NET "CLK" LOC = A7;
(b)CLK的周期为25ns的设计方案(1)源程序:
module Timelogic(
input INPUT,
input CLK,
output reg OUTPUT
);
reg q1,d1;
always@(posedge CLK)
begin
#17 q1=INPUT;
#12 d1=~q1;
#1 OUTPUT=d1;
end
endmodule
(2)仿真程序:
module text1;
// Inputs
reg INPUT;
reg CLK;
// Outputs
wire OUTPUT;
// Instantiate the Unit Under Test (UUT)
Timelogic uut (
.INPUT(INPUT),
.CLK(CLK),
.OUTPUT(OUTPUT)
);
always #12.5 CLK=~CLK;
always #35 INPUT=~INPUT;
initial begin
// Initialize Inputs
INPUT = 0;
CLK = 0;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
Endmodule
(3)引脚约束:
#Created by Constraints Editor (xc3s100e-cp132-4) - 2015/06/12 NET "CLK" TNM_NET = "CLK";
TIMESPEC TS_CLK = PERIOD "CLK" 25 ns HIGH 50 %;
# PlanAhead Generated physical constraints
NET "INPUT" LOC = P11;
NET "OUTPUT" LOC = M5;
NET "CLK" LOC = A7;
六、实验结果记录
1.险象验证与消除结果记录
(1)XST 的RTL Schematic (语法分析得到的电路图,参见实验指导书P15的图3.12)截图
(a)存在险象时的截图
(b)修改后(消除险象)时的截图
(2)仿真结果(截图并对输入、输出给以说明)(a)存在险象时的仿真结果
(b)修改后(消除险象)时的仿真结果