当前位置:文档之家› 数电实验

数电实验

数字逻辑实验报告(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)修改后(消除险象)时的仿真结果

相关主题
文本预览
相关文档 最新文档