移位寄存器设计verilog

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学

ASIC课程设计报告一

学号:201222240937 姓名:周恒

课题题目:移位寄存器设计

2013年5月

1. Write and verify the Verilog models for the two basic types of synchronizer circuits(a,b) shown in Fig.1

本电路实现是功能是一个两位的移位寄存器。Asynch_in为输入,

Synch_out为输出,clock是时钟,reset为异步复位信号。

电路a的verilog代码为:

module syn_a(

input Asynch_in,

input clock,

input reset,

output Synch_out);

wire meta;

reg Q1,Q2;

assign meta=Q1;

assign Synch_out=Q2;

always @(posedge clock or negedge reset)

begin

if(!reset)begin

Q1 <=1'b0;

Q2 <=1'b0;

end

else begin

Q1 <= Asynch_in;

Q2 <= meta;

end

end

endmodule

验证代码:

`timescale 1ns/1ps

module syn_a_test;

reg Asynch_in;

reg clock;

reg reset;

wire Synch_out;

always #50 clock=~clock;

initial

begin

clock=1;

reset=1;

Asynch_in=1;

#50 reset=0; Asynch_in=0;

#50 reset=1;

#50 Asynch_in=1;

#100 Asynch_in=0;

#200 Asynch_in=1;

#100 Asynch_in=0;

#100 Asynch_in=1;

#100 Asynch_in=0;

#100 $stop;

end

syn_a

a(.Asynch_in(Asynch_in),.clock(clock),.reset(reset),.Synch_out(Synch_o ut));

endmodule

输出波形:

从输出波形可以看出输出比输入延迟一个时钟,电路功能正确。

电路b

电路b的verilog代码:

module syn_b(

input Asynch_in,

input clock,

input reset,

output reg Synch_out);

wire Clr,Clr_in;

reg q1,q2;

always @(posedge Asynch_in or negedge Clr) if(!Clr)

q1<=1'b0;

else

q1<=1'b1;

always @(posedge clock or negedge Clr) if(!Clr)

q2<=1'b0;

else

q2<=q1;

always @(posedge clock or negedge reset) if(!reset)

Synch_out<=1'b0;

else

Synch_out<=q2;

and (Clr_in,!Asynch_in,Synch_out);

or (Clr,Clr_in,reset);

endmodule

验证代码:

`timescale 1ns/1ps

module syn_b_test;

reg Asynch_in;

reg clock,reset;

wire Synch_out;

always #50 clock=~clock;

initial

begin

clock=1;

reset=1;

Asynch_in=1;

#30 reset=0;

#20 Asynch_in=0;

#50 reset=1;

#50 Asynch_in=1;

#100 Asynch_in=0;

#200 Asynch_in=1;

#100 Asynch_in=0;

#100 Asynch_in=1;

#100 Asynch_in=0;

#100 Asynch_in=1;

#100 reset=0;

#50 reset=1;

#100 Asynch_in=0;

#200 Asynch_in=1;

#100 Asynch_in=0;

#100 Asynch_in=1;

#100 Asynch_in=0;

#100 Asynch_in=1;

#100 $stop;

end

syn_b

b(.Asynch_in(Asynch_in),.clock(clock),.reset(reset),.Synch_out(Synch_o ut));

endmodule

modelsim仿真波形:

相关文档
最新文档