移位寄存器设计verilog
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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仿真波形: