含1个数统计电路.docx

上传人:b****1 文档编号:12733891 上传时间:2023-04-21 格式:DOCX 页数:11 大小:151.13KB
下载 相关 举报
含1个数统计电路.docx_第1页
第1页 / 共11页
含1个数统计电路.docx_第2页
第2页 / 共11页
含1个数统计电路.docx_第3页
第3页 / 共11页
含1个数统计电路.docx_第4页
第4页 / 共11页
含1个数统计电路.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

含1个数统计电路.docx

《含1个数统计电路.docx》由会员分享,可在线阅读,更多相关《含1个数统计电路.docx(11页珍藏版)》请在冰豆网上搜索。

含1个数统计电路.docx

含1个数统计电路

数字系统设计实践

设计报告

 

实验名称含1个数统计电路设计

班级通信112

学生姓名尼玛

学号11604026

指导教师应祥岳

完成日期2013-03-20

 

摘要

本电路采用控制器-受控器模型,能连续对十六个串行数据进行操作,用状态机作为控制器的底层设计,整个系统以图形文件作为顶层设计,能显示出受控器的状态转换图。

在串行输入时数码管能显示输入个数以及含“1”个数(十六进制)。

关键词:

控制器、受控器、数码管

 

 

一、设计任务

1.利用FPGA设计含“1”统计电路。

2.使用DSE-I现代数字电路实验系统按键输入串行数据16位数,数码管显示含“1”数量。

二、设计要求

1.采用控制器-受控器模型;

2.串行数据位数:

16位,利用按键输入;

3.系统时钟、启动信号等由按键手动输入;

4.“1”的个数由数码管显示(十六进制);

5.给出系统仿真结果。

三、系统方案

3.1控制器模块的论证与选择

在设计要求中明确指出,在本次设计的含“1”统计电路中必须采用控制——受控器模型,且同时需要通过状态机实现,所以我们在此假设控制器部分共3个状态:

S0,S1,S2。

下面给出预期的程序转换图(图1-1所示)。

图1-1程序预期的状态转换图

状态说明:

①s0:

保存上个16位序列的统计结果;

②s1:

全部清零,为下一个状态的计数做准备;

③s2:

统计个数;

3.2计数器模块的论证与选择

方案一:

以十进制的形式进行计数和显示,使用功能宏模块lpm_counter,定义两个计数器,一个输出低四位,一个输出高四位。

优点:

不用编程

缺点:

无法进行反馈。

方案二:

以十六进制的形式进行计数和显示,使用功能宏模块lpm_counter,定义17进制计数器,另外加一个进制转换模块。

优点:

可以进行16位的反馈

缺点:

需要编程

方案选择:

这里我们需要反馈,所以用方案二。

四、系统理论分析与计算

4.1理论分析

我们定义一个控制器,用来输入脉冲,开始信号,x等,输出清零以及两个计数信号。

然后设计两个计数器,分别统计1的个数和总输入的个数,统计总个数的计数器对控制器进行反馈,使控制器产生清零信号,两个计数器则分别接一个进制转换模块,使十六进制转换成十进制。

五、电路与程序设计

5.1电路的设计

5.1.1含1统计电路顶层图形设计

5.1.2控制器ASM图

各状态解释:

S0:

等待输入始能状态,出现start信号则,跳入S1状态。

S1:

开始的初始状态,对输入的第一个串行数据进行判断,判断完后,立即跳入S2状态。

S2:

正式的工作状态,对第2至第16个串行数据进行判断,并一直处在自己的状态中,直至第16个串行数据输入结束,跳入S0状态。

各状态完成工作解释:

S0:

熄灭输入始能灯,完成受控器清零工作。

S1:

点亮输入始能灯,判断输入的第1个数据,分别给受控器相应的信号。

S2:

点亮输入始能灯,判断输入的第2至第16个串行数据数据,分别给受控器相应的信号,并接收受控器返回的数据输入结束信号,跳入等待状态。

5.1.3系统电路原理图

5.2程序的设计

5.2.1控制器模块的vhdl设计

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitykongzhiis

port(cp,start,n,x:

instd_logic;

done:

bufferstd_logic;

clr,cpx,cp1:

outstd_logic);

endkongzhi;

architecturejishuofkongzhiis

typestate_typeis(s0,s1,s2);

signalstate:

state_type;

begin

process(cp,start,done)

begin

if(cp'eventandcp='1')then

casestateis

whens0=>ifstart='1'

thenstate<=s1;

elsestate<=s0;

endif;

whens1=>state<=s2;

whens2=>ifdone='1'

thenstate<=s0;

elsestate<=s2;

endif;

endcase;

endif;

endprocess;

process(state,x,n)

begin

casestateis

whens0=>cp1<='0';cpx<='0';

done<='1';clr<='0';

whens1=>cp1<='0';cpx<='0';

done<='0';clr<='1';

whens2=>ifn='0'thencp1<=x;

elsecp1<='0';

endif;

cpx<='1';done<=n;clr<='0';

endcase;

endprocess;

endjishu;

这个模块主要实现四个功能:

①判断输入的x是0还是1;

②控制对X的接收位数进行累计;

③控制当X=1时使统计1的个数计数器加1计数;

④判断x的16位序列是否输入完毕,并予以显示。

5.2.2计数器模块的vhdl设计

A.17进制计数模块:

这个模块主要实现两个功能:

①对X的接收位数进行累加;

②当输入X的序列满16位时,对控制器进行反馈。

B.进制转换模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityjzzhis

port(q:

instd_logic_vector(7downto0);

qx:

outstd_logic_vector(7downto0));

endjzzh;

architectureaofjzzhis

signala:

std_logic_vector(7downto0);

begin

process(q)

begin

a<=null;

if(q<10)then

qx<=q;

elseqx<=(a(7downto4)+1)&(q(3downto0)-10);

endif;

endprocess;

enda;

功能:

将16进制的输出转化成10进制进行显示。

六、测试方案与测试结果

6.1测试方案

6.1.1软件测试

a.在quartus7.1环境下,对电路进行仿真和测试。

6.1.2硬件测试

a.将程序下载到EDA实验箱进行测试,观察与理论结果是否一致。

b.引脚分配

输入:

Start:

按键1,用于开启含1数字统计电路,使状态机能够从状态s0跳到s1,高电平有效

x:

按键2,用于控制输入一个16位的二进制序列,亮为‘1’,暗为‘0’

cp:

按键8,用于推动状态机的运行,每按一下,控制器执行一次操作

输出:

done:

指示灯8,用于显示已输满一个16位的序列,高电平有效

q1[7..0]:

数码管5、6,以十进制的形式显示所得序列中‘1’的个数,0--16共17个状态

qx[7..0]:

数码管1、2,以十进制的形式显示所得序列的长度,0--16共17个状态

 

6.2测试结果及分析

6.2.1测试结果

a.仿真波形

b.下载到实验箱后,各按键功能正常,数码管能对应的显示十进制数,能从0加至16。

能对串行输入的16位数据进行判断,并将信息显示在2组数码管中。

6.2.2测试分析与结论

qx从1、2……8、9、16、17……22,因为16进制的16在数码管上显示刚好是10,既是十进制的10,22=16+6,既是16,与进制模块的编程有关,仿真时若把qx的显示调成十六进制显示,就能出现10、11、12……了,当qx达到22(即16)时,q1即被清零,而且start的启动功能和s0状态的保留结果功能均能体现出来。

经过测试,串行输入的16位数据,能正确统计含“1”个数。

因此,系统符合设计要求。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1