十进制可逆加减计数器

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

时序电路逻辑设计
实验人:周铮班级:中法1202班学号:U201215676
一实验目的
1.掌握用SSI实现简单组合逻辑电路的方法。

2.掌握简单数字电路的安装与测试技术。

3.熟悉使用Verilog HDL描述组合逻辑电路的方法,以及EDA仿真技术。

二实验器件
计算机,可编程实验板
三实验内容
十进制加减可逆计数器设计
功能要求:
拨码开关键SW1为自动可逆加减功能键,当SW1为HIGH时,计数器实现自动可逆模十加减计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9—8—7—...0—1...的模十自动可逆加减计数结果;当SW1为LOW时,计数器按拨码开关键SW0的选择分别执行加减计数功能。

即当SW0为HIGH时,计数器实现模十加计数功能,即4个七段数码管上几乎同步显示0—1—2—3—4—...9——0—1...的模十加计数结果;当SW0为LOW时,计数器实现模十减计数功能,即4个七段数码管上几乎同步显示9—8—7—...—1—0— (9)
—8—7…的模十减计数结果。

四实验设计
1.原理设计
脉冲发生电路采用555定时器组成的多谐振荡器振荡产生周期为1s的矩形脉冲,从而为计数器提供触发信号。

其中,可以通过R1,R2,C来控制充放电的时间。

加/减计数控制电路主要由74LS138构成。

74LS138芯片是常用的3-8线译码器,常用在单片机和数字电路的译码电路中,74LS138的引脚排列及
真值表如图
计数单元电路主要由十进制计数器74LS192构成。

74LS192是同步十进制可逆计数器,它具有双时钟输入,并具有清除和置数等功能,其引脚排列图如图
功能表如图
2.模拟仿真
用Verilog HDL语言设计二通道数据选择器实验程序如下:
①实验代码
module a(
input clk,
input SW1,
input SW0,
input clear,
input reset,
output reg[3:0] s1_reg,
output reg[6:0] segdat_reg
);
reg[26:0] counter;
reg[3:0]q;
reg x;
always@(posedge clk)
begin
if(clear) begin
s1_reg<=0;
counter<=0;
end
else
counter<=counter+1;
end
always@(posedge counter[26])
begin
if (reset) begin
q<=0;
x<=0;
end
else
begin
case(SW1)
1'd1:begin
case(x)
1'd0: begin
if(q==4'd8)
x<=1;
q<=q+1;
end
1'd1: begin
if(q==4'd1)
x<=0;
q<=q-1;
end
endcase
end
1'd0:begin
case(SW0)
1'd0:begin
if(q==4'd0)
q<=4'd9;
else
q<=q-1;
end
1'd1:begin
if(q==4'd9)
q<=4'd0;
else
q<=q+1;
end
endcase
end
endcase
end
end
always@(q) // 数码管显示处理
begin
case(q)
4'h0:segdat_reg = 7'b0000001; //0
4'h1:segdat_reg = 7'b1001111; //1
4'h2:segdat_reg = 7'b0010010; //2
4'h3:segdat_reg = 7'b0000110; //3
4'h4:segdat_reg = 7'b1001100; //4
4'h5:segdat_reg = 7'b0100100; //5
4'h6:segdat_reg = 7'b0100000; //6
4'h7:segdat_reg = 7'b0001111; //7
4'h8:segdat_reg = 7'b0000000; //8
4'h9:segdat_reg = 7'b0000100; //9
default:segdat_reg=7'b0111000; //F
endcase
end
endmodule
②测试文件test代码
module test;
// Inputs
reg clk;
reg SW1;
reg SW0;
reg clear;
reg reset;
// Outputs
wire [3:0] s1_reg;
wire [6:0] segdat_reg;
// Instantiate the Unit Under Test (UUT)
a uut (
.clk(clk),
.SW1(SW1),
.SW0(SW0),
.clear(clear),
.reset(reset),
.s1_reg(s1_reg),
.segdat_reg(segdat_reg)
);
initial begin
// Initialize Inputs
clk = 0;
SW1 = 0;
SW0 = 1;
clear = 1;
reset = 1;
// Wait 100 ns for global reset to finish
#100;
// Add stimulus here
end
endmodule
③管脚设置ucf文件代码
# PlanAhead Generated physical constraints
NET "SW0" LOC = P11;
NET "SW1" LOC = L3;
NET "clear" LOC = K3;
NET "clk" LOC = B8;
NET "reset" LOC = B4;
NET "segdat_reg[0]" LOC = M12;
NET "segdat_reg[1]" LOC = L13;
NET "segdat_reg[2]" LOC = P12;
NET "segdat_reg[3]" LOC = N11;
NET "segdat_reg[4]" LOC = N14;
NET "segdat_reg[5]" LOC = H12;
NET "segdat_reg[6]" LOC = L14;
NET "s1_reg[0]" LOC = F12;
NET "s1_reg[1]" LOC = J12;
NET "s1_reg[2]" LOC = M13;
NET "s1_reg[3]" LOC = K14;
# PlanAhead Generated IO constraints
NET "clk" SLEW = FAST;
④模拟仿真顶层原理图
⑤模拟仿真波形图
五实验心得
本次实验要求用Verilog HDL语言做出十进制可逆加减计数器并进行模拟仿真,其中在代码部分出现多次bug,后经过仔细检查发现是测试文件未加限制的原因,最终做出了模拟仿真。

相关文档
最新文档