哈工大数电大作业(1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
H a r b i n I n s t i t u t e o f T e c h n o l o g y
数电大作业(1)
课程名称:数字电子技术
院系:航天学院控制科学与工程系班级:
设计者:
学号:
指导教师:陶隽源
设计时间:2015-1-5
哈尔滨工业大学
一、实验内容
利用Verilog HDL 设计一个电路,对输入的一串二进制数,检测序列中连续3个或者3个以上的1,状态转换如图所示。
要求:
1.编写源程序;
2.给出仿真电路图、状态转换图和仿真波形图。
二、实验分析
使用状态机进行编写,一共有4个状态分别用S0(00)、S1(01)、S2(10)、S3(11)来表示,其中S0、S1、S2状态的输出均为低电平“0”,只有S3状态的输出为高电平“1”,在四个状态有低电平输入时,则次态均为S0,在有高电平输入时,则状态依次更替(S0→S1→S2→S3→S3……),那么只有连续三个以上的高电平输入时才会使输出为高电平,否则输出将保持低电平。
下图为简略的状态转换表:
输入(
din ) 输出(op ) 状态
0 0 S0 0 0 S0
1 0 S1 1 0 S
2 0 0 S0 1 0 S1 1 0 S2
1 1 S3 1 1 S3
0 0 S0
三、程序源代码
本实验使用Xilinx软件进行编程与仿真。
根据《数字电子技术》教材第318页的例题,改编程序如下:module ZG(clk,din,op);
input clk,din;
output op;
reg[1:0] current_state,next_state;
reg op;
parameter
S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11; always@(posedge clk)
begin
current_state <= next_state;
end
always@(current_state or din)
begin
case(current_state)
S0:begin
op=0;
if(din==0)
next_state = S0;
else
next_state = S1;
end
S1:begin
op=0;
if(din==0)
next_state = S0;
else
next_state = S2; end
S2:begin
op=0;
if(din==0)
next_state = S0;
else
next_state = S3; end
S3:begin
op=1;
if(din==0)
next_state = S0;
else
next_state = S3; end
default:begin
op=0;
next_state = S0;
end
endcase
end
endmodule
四、仿真调试与截图
1、调试代码如下
module tiaoshi;
// Inputs
reg clk;
reg din;
// Outputs
wire op;
// Instantiate the Unit Under Test (UUT)
ZG uut (
.clk(clk),
.din(din),
.op(op)
);
// Note: CLK must be defined as a reg when using this method
parameter PERIOD = 50;
always begin
clk = 1'b0;
#(PERIOD/2) clk = 1'b1;
#(PERIOD/2);
end
initial begin
// Initialize Inputs
clk = 0;
din = 0;
// Wait 100 ns for global reset to finish
#100;
din=0;
#20;
din=0;
#20;
din=1;
#20;
din=1;
#20;
din=0;
#20;
din=1;
#20;
din=1;
#20;
din=1;
#20;
din=1;
#20;
din=0;
#20;
// Add stimulus here end
endmodule
2、仿真电路图如下
3、仿真波形图如下
五、实验总结
由波形图可以看到,只有连续输入三个高点平时,输出才会变成高电平,否则将一直是低电平,由测试的输入和输出波形图可以看到,与上述简略的状态转换表完全相符,即基本满足了实验要求。