资源描述
电 子 科 技 大 学
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_out));
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_out));
endmodule
modelsim仿真波形:
展开阅读全文