实验四_4_位计数器设计
计数器的设计实验报告

计数器的设计实验报告篇一:计数器实验报告实验4 计数器及其应用一、实验目的1、学习用集成触发器构成计数器的方法2、掌握中规模集成计数器的使用及功能测试方法二、实验原理计数器是一个用以实现计数功能的时序部件,它不仅可用来计脉冲数,还常用作数字系统的定时、分频和执行数字运算以及其它特定的逻辑功能。
计数器种类很多。
按构成计数器中的各触发器是否使用一个时钟脉冲源来分,有同步计数器和异步计数器。
根据计数制的不同,分为二进制计数器,十进制计数器和任意进制计数器。
根据计数的增减趋势,又分为加法、减法和可逆计数器。
还有可预置数和可编程序功能计数器等等。
目前,无论是TTL还是CMOS集成电路,都有品种较齐全的中规模集成计数器。
使用者只要借助于器件手册提供的功能表和工作波形图以及引出端的排列,就能正确地运用这些器件。
1、中规模十进制计数器CC40192是同步十进制可逆计数器,具有双时钟输入,并具有清除和置数等功能,其引脚排列及逻辑符号如图5-9-1所示。
图5-9-1 CC40192引脚排列及逻辑符号图中LD—置数端CPU—加计数端CPD —减计数端CO—非同步进位输出端BO—非同步借位输出端D0、D1、D2、D3 —计数器输入端Q0、Q1、Q2、Q3 —数据输出端CR—清除端CC40192的功能如表5-9-1,说明如下:表5-9-1当清除端CR为高电平“1”时,计数器直接清零;CR置低电平则执行其它功能。
当CR为低电平,置数端LD也为低电平时,数据直接从置数端D0、D1、D2、D3 置入计数器。
当CR为低电平,LD为高电平时,执行计数功能。
执行加计数时,减计数端CPD 接高电平,计数脉冲由CPU 输入;在计数脉冲上升沿进行8421 码十进制加法计数。
执行减计数时,加计数端CPU接高电平,计数脉冲由减计数端CPD 输入,表5-9-2为8421码十进制加、减计数器的状态转换表。
加法计数表5-9-减计数2、计数器的级联使用一个十进制计数器只能表示0~9十个数,为了扩大计数器范围,常用多个十进制计数器级联使用。
数电实验报告:实验4-计数器及应用161

广东海洋大学学生实验报告书(学生用表)实验名称课程名称 课程号 学院(系)专业 班级 学生姓名 学号 实验地点 实验日期实验4 计数器及其应用一、实验目的1、熟悉中规模集成计数器的逻辑功能及使用方法2、掌握用74LS161构成计数器的方法3、熟悉中规模集成计数器应用二、实验原理计数器是典型的时序逻辑电路,它是用来累计和记忆输入脉冲的个数.计数是数字系统中很重要的基本操作,集成计数器是最广泛应用的逻辑部件之一。
计数器种类较多,按构成计数器中的多触发器是否使用一个时钟脉冲源来分,有同步计数器和异步计数器;根据计数制的不同,可分为二进制计数器、十进制计数器和任意进制计数器;根据计数的增减趋势,又分为加法、减法和可逆计数器。
还有可预置数和可编程序功能计数器等。
本实验主要研究中规模十进制计数器74LS161的功能及应用。
1、中规模集成计数器74LS161 是四位二进制可预置同步计数器,由于它采用4 个主从JK 触发器作为记忆单元,故又称为四位二进制同步计数器,其集成芯片管脚如图1所示:管脚符号说明:电源正端Vcc ,接+5V ;异步置零(复位)端Rd ;时钟脉冲CP ;预置数控制端 A 、B 、C 、D ;数据输出端 QA 、QB 、QC 、QD ;进位输出端 RCO :使能端EP ,ET ;预置端 LD ;图1 74LS161 管脚图GDOU-B-11-112该计数器由于内部采用了快速进位电路,所以具有较高的计数速度。
各触发器翻转是靠时钟脉冲信号的正跳变上升沿来完成的。
时钟脉冲每正跳变一次,计数器内各触发器就同时翻转一次,74LS161的功能表如表1所示:表1 74LS161 逻辑功能表2、实现任意进制计数器由于74LS161的计数容量为16,即计16个脉冲,发生一次进位,所以可以用它构成16进制以内的各进制计数器,实现的方法有两种:置零法(复位法)和置数法(置位法)。
(1) 用复位法获得任意进制计数器假定已有N进制计数器,而需要得到一个M进制计数器时,只要M<N,用复位法使计数器计数到M时置“0”,即获得M进制计数器。
实验四 多位十进制计数器的设计与实现

实验四多位十进制计数器的设计与实现(4 课时)实验目的1.熟练掌握设计电路下载到芯片的关键设置与基本步骤和利用实验箱上的输入信号和输出显示器件在线测试设计电路的方法。
2.学习使用VHDL 语言设计多位计数器和7 段译码电路的方法。
3.学习多位数码管的动态显示原理,掌握数码管驱动电路灵活设计方法。
实验原理1.米字形数码管(共阴)笔画接口:A1、A2、B、C、D1、D2、E、F、G、H、J、K、M、N、O、P、DP位选接口:sel0,sel1,sel2,sel3.sel0 Sel1 Sel2 Sel3 选中的数码管0 1 1 1 第4 位1 0 1 1 第3 位1 1 0 1 第2 位1 1 1 0 第1 位(右)2. 8 位7 段数码管(共阴)笔画接口:a、b、c、d、e、f、g、dp位选接口:sel0,sel1,sel2,sel3(可不用).Sel2 Sel1 Sel0 选中点亮的数码管1 1 1 第1 位(最右)1 1 0 第2 位1 0 1 第3 位1 0 0 第4 位0 1 1 第5 位0 1 0 第6 位0 0 1 第7 位0 0 0 第8 位实验内容与要求1.设计一个十进制计数器,具有显示位置随计数时钟在八个数码管中左右滚动的功能。
(6 分)2.设计一个符号显示电路,使其通过米字型数码管显示至少四页的自定义英文和数字符号。
(每页4 个字符)(3 分)3.设计一个4 位十进制计数器,具有加减计数功能和置数功能,并能通过数码管显示计数结果。
减数为零时发声报警。
(3 分)1:library IEEE;use IEEE.std_logic_1164.all;use IEEE.Std_logic_unsigned.all;entity cnt10 isport (clk : in std_logic;data_out : out std_logic_vector (7 downto 0);selout: out std_logic_vector (2 downto 0));end entity;architecture art1 of cnt10 isbeginprocess(clk)variable cnt1:integer range 0 to 9; beginif clk'event and clk='1' thencnt1:=cnt1+1;if cnt1>9 thencnt1:=0;end if;end if;case cnt1 iswhen 0 => data_out <= "11111100"; -- 0 when 1 => data_out <= "01100000"; -- 1 when 2 => data_out <= "11011010"; -- 2 when 3 => data_out <= "11110010"; -- 3 when 4 => data_out <= "01100110"; -- 4 when 5 => data_out <= "10110110"; -- 5 when 6 => data_out <= "10111110"; -- 6 when 7 => data_out <= "11100000"; -- 7 when 8 => data_out <= "11111100"; -- 8 when 9 => data_out <= "11101110"; -- 9 when others => NULL;end case;end process;process(clk)variable cntsel:integer range 0 to 13; beginif clk'event and clk='1' then cntsel:=cntsel+1;if cntsel>13 thencntsel:=0;end if;end if;case cntsel iswhen 0 => selout <= "111";when 1 => selout <= "110";when 2 => selout <= "101";when 3 => selout <= "100";when 4 => selout <= "011";when 5 => selout <= "010";when 6 => selout <= "001";when 7 => selout <= "000";when 8 => selout <= "001";when 9 => selout <= "010";when others => NULL;end case;end process;end art1;2:Library IEEE;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity miguan isport( clk : in std_logic;WX : out std_logic_vector (3 downto 0);DX : out std_logic_vector (15 downto 0)); End entity miguan;Architecture bhv of miguan isType state is(st0,st1,st2,st3);Signal current_state:state :=st0;Signal next_state:state;Signal shu1 : integer range 0 to 3;Signal shu2 : std_logic_vector(13 downto 0); Signal A,B,C,D:std_logic_vector(15 DOWNTO 0); Beginprocess (clk) isBeginIf (clk'event and clk='1') thenshu2<=shu2+"00000000000001";If shu2="11111111111111"thencurrent_state<=NEXT_STATE;elsecurrent_state<=current_state;End if;End if;End process;Process (current_state)BeginCase current_state iswhenst0=>A<="0110101000000000";--xB<="0000000011110000";--lC<="1000010000011110";--dD<="0001000110111011";--sNEXT_STATE<=ST1;whenst1=>A<="0000000011111100";--UB<="1000010000000011";--TC<="0001000111110011";--ED<="0011000111000111";--RNEXT_STATE<=ST2;whenst2=>A<="0000000011111111";--0B<="0001000111111011";--6C<="0000000000001100";--1D<="0001000111111111";--8NEXT_STATE<=st3;whenst3=>A<="0001000111111011";--6B<="1001010110000000";--4C<="0001000110111011";--5D<="0000000000001100";--1NEXT_STATE<=ST0;End case;End process;Process (clk) isBeginif rising_edge(clk) thenif shu1>3 thenshu1<=0;elseshu1<=shu1+1;end if;case shu1 isWHEN 0 =>WX<="1110";DX<=A;WHEN 1 =>WX<="1101";DX<=B;WHEN 2 =>WX<="1011";DX<=C;WHEN 3 =>WX<="0111";DX<=D;End case;End if;End process;End architecture bhv;3:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity wybcount4 isport(count_clk,saopin_clk,en,load,reset,add_sub:in std_logic;data_in3:in std_logic_vector(3 downto 0);--Left1data_in2:in std_logic_vector(3 downto 0);data_in1:in std_logic_vector(3 downto 0);data_in0:in std_logic_vector(3 downto 0);--Right1duanxuan:out std_logic_vector(7 downto 0);--duan xuansel:out std_logic_vector(1 downto 0);--wei xuanbell:out std_logic);end entity wybcount4;architecture beh of wybcount4 isconstant num0:std_logic_vector:="01111110";constant num1:std_logic_vector:="00001100";constant num2:std_logic_vector:="10110110";constant num3:std_logic_vector:="10011110";constant num4:std_logic_vector:="11001100";constant num5:std_logic_vector:="11011010";constant num6:std_logic_vector:="11111010";constant num7:std_logic_vector:="00001110";constant num8:std_logic_vector:="11111110";constant num9:std_logic_vector:="11011110";function number(x:std_logic_vector) return std_logic_vector is begincase x iswhen "0000" => return num0;when "0001" => return num1;when "0010" => return num2;when "0011" => return num3;when "0100" => return num4;when "0101" => return num5;when "0110" => return num6;when "0111" => return num7;when "1000" => return num8;when "1001" => return num9;when others =>return "00000000";end case;end number;signal Q3:std_logic_vector(3 downto 0);--zhong jian zhisignal Q2:std_logic_vector(3 downto 0);signal Q1:std_logic_vector(3 downto 0);signal Q0:std_logic_vector(3 downto 0);beginprocess(count_clk,reset,en,load,add_sub) isbegin--counter10IF reset = '0' THENQ0<=(OTHERS => '0');Q1<=(OTHERS => '0');Q2<=(OTHERS => '0');Q3<=(OTHERS => '0');ELSIF rising_edge(count_clk) THENif en='0' thenif load='0' thenQ0<=data_in0;Q1<=data_in1;Q2<=data_in2;Q3<=data_in3;elsif add_sub='0' then--addQ0<=Q0+1;if Q0>=9 thenQ0<="0000";Q1<=Q1+1;if Q1>=9 thenQ1<="0000";Q2<=Q2+1;if Q2>=9 thenQ2<="0000";Q3<=Q3+1;if Q3>=9 thenQ3<="0000";end if;end if;end if;end if;else--subQ0<=Q0-1;if Q0<=0 thenQ0<="1001";Q1<=Q1-1;if Q1<=0 thenQ1<="1001";Q2<=Q2-1;if Q2<=0 thenQ2<="1001";Q3<=Q3-1;if Q3<=0 thenQ3<="1001";end if;end if;end if;end if;end if;end if;END IF;if (Q0="0000" and Q1="0000" and Q2="0000" and Q3="0000") then bell<='1';elsebell<='0';end if;end process;process(saopin_clk) is--sao pin xian shivariable qq:std_logic_vector(0 to 1);beginif (saopin_clk'event and saopin_clk='1') thenif qq<=3 then qq:=qq+1;else qq:="00";end if;end if;case qq iswhen "00" => sel<="00";duanxuan<=number(Q0);when "01" => sel<="01";duanxuan<=number(Q1);when "10" => sel<="10";duanxuan<=number(Q2);when "11" => sel<="11";duanxuan<=number(Q3);end case;end process;end architecture beh;。
计数器eda实验报告

计数器eda实验报告计数器EDA实验报告引言:计数器是数字电路中常见的基本模块之一,用于计算和记录输入脉冲信号的数量。
在本次实验中,我们将使用EDA工具对计数器进行设计和分析。
通过对计数器的EDA实验,我们旨在深入了解计数器的工作原理和性能特点。
一、实验目的本次实验的目的是通过EDA工具对计数器进行设计和分析,具体包括以下几个方面:1. 了解计数器的基本原理和工作方式;2. 学习使用EDA工具进行电路设计和仿真;3. 分析计数器的性能指标,如最大计数值、计数速度等。
二、实验步骤1. 设计计数器的电路原理图;2. 使用EDA工具进行电路仿真;3. 分析仿真结果,包括计数器的计数规律、计数速度等;4. 调整计数器的参数,观察对计数结果的影响;5. 总结实验结果并提出改进意见。
三、计数器的设计原理计数器是由触发器和逻辑门组成的电路,可以实现对输入脉冲信号的计数功能。
常见的计数器包括二进制计数器、十进制计数器等。
在本次实验中,我们将设计一个4位二进制计数器。
四、EDA工具的使用我们选择使用Xilinx ISE Design Suite进行电路设计和仿真。
该工具具有强大的功能和易于使用的界面,方便我们进行计数器的设计和分析。
五、仿真结果分析通过对计数器的仿真结果进行分析,我们可以得到以下结论:1. 计数器的计数规律:根据计数器的设计原理,我们可以观察到计数器的计数规律为二进制递增。
2. 计数器的计数速度:计数器的计数速度取决于输入脉冲信号的频率和计数器的时钟频率。
通过适当调整时钟频率,我们可以实现不同速度的计数。
六、参数调整与性能改进在实验过程中,我们可以通过调整计数器的参数来改进其性能。
例如,我们可以增加计数器的位数,以提高其计数范围;或者调整计数器的时钟频率,以改变其计数速度。
通过不断优化和改进,我们可以得到更加高效和灵活的计数器设计。
七、实验总结通过本次计数器EDA实验,我们深入了解了计数器的工作原理和性能特点,并学会了使用EDA工具进行电路设计和仿真。
实验4-4.微控制器实验:程序计数器PC与地址寄存器AR实验[优质文档]
![实验4-4.微控制器实验:程序计数器PC与地址寄存器AR实验[优质文档]](https://img.taocdn.com/s3/m/bcd3815ce55c3b3567ec102de2bd960590c6d983.png)
实验4-4. 微控制器实验:程序计数器PC与地址寄存器AR实验一、实验目的:1.掌握地址单元的工作原理;2.掌握PC的两种工作方式,加1计数和重装计数器初值的实现方法;3.掌握地址寄存器AR从程序计数器PC获得数据和从内部总线BUS获得数据的实现方法。
二、实验原理:采用总线多路开关联接方式地址单元主要由三部分组成:程序计数器PC、地址寄存器AR和多路开关BUSMUX。
程序计数器PC用以指出下一条指令在主存中的存放地址,CPU正是根据PC的内容去存取指令的。
因程序中指令是顺序执行的,所以PC有自增功能。
程序计数器提供下一条程序指令的地址,如图4-64所示,在T4时钟脉冲的作用下具有自动加1的功能;在LDPC信号的作用下可以预置计数器的初值(如子程序调用或中断相应等)。
当LDPC为高电平时,计数器装入data[ ]端输入的数据。
aclr是计数器的清0端,高电平有效(高电平清零);aclr为低电平时,允许计数器正常计数。
地址寄存器AR(DFF_8)锁存访问内存SRAM的地址。
地址寄存器AR的地址来自两个渠道,一是程序计数器PC的输出,通常是下一条指令的地址;二是来自于内部数据总线的数据,通常是被访问操作数的地址。
为了实现对两路输入数据的切换,在FPGA的内部通过总线多路开关BUSMUX进行选择。
LDAR与多路选择器的sel相连,当LDAR为低电平,选择程序计数器的输出;当LDAR为高电平时,选择内部数据总线的数据。
图4-64 程序计数器原理图三、实验任务:按照图4-64,程序计数器原理图编辑、输入电路,实验台选择0工作模式。
对输入原理图进行编译、引脚锁定、并下载到实验台。
1.首先下载pc_unit.sof,用模式键选模式“0”,再按一次右侧的复位键;键2和键1可输入8位总线数据B[7..0](此值显示于发光管D1~D8和数码管2/1);CLR(键5)按2次(0→1→0),产生一正脉冲,高电平清零;LDAR(键6)=0时,BUSMUX输出程序计数器PC的值;LDAR=1时,BUSMUX输出B[7..0]总线数据。
数字逻辑实验报告

数字逻辑实验报告数字逻辑实验报告引言:数字逻辑是计算机科学中的基础知识,它研究的是数字信号的处理与传输。
在现代科技发展的背景下,数字逻辑的应用越来越广泛,涉及到计算机硬件、通信、电子设备等众多领域。
本实验旨在通过设计和实现数字逻辑电路,加深对数字逻辑的理解,并掌握数字逻辑实验的基本方法和技巧。
实验一:逻辑门电路设计与实现逻辑门是数字电路的基本组成单元,由与门、或门、非门等构成。
在本实验中,我们设计了一个4位全加器电路。
通过逻辑门的组合,实现了对两个4位二进制数的加法运算。
实验过程中,我们了解到逻辑门的工作原理,掌握了逻辑门的真值表和逻辑方程的编写方法。
实验二:多路选择器的设计与实现多路选择器是一种常用的数字逻辑电路,它可以根据控制信号的不同,从多个输入信号中选择一个输出信号。
在本实验中,我们设计了一个4位2选1多路选择器电路。
通过对多路选择器的输入信号和控制信号的设置,实现了对不同输入信号的选择。
实验过程中,我们了解到多路选择器的工作原理,学会了多路选择器的真值表和逻辑方程的编写方法。
实验三:时序逻辑电路的设计与实现时序逻辑电路是一种能够存储和处理时序信息的数字逻辑电路。
在本实验中,我们设计了一个简单的时序逻辑电路——D触发器。
通过对D触发器的输入信号和时钟信号的设置,实现了对输入信号的存储和传输。
实验过程中,我们了解到D触发器的工作原理,掌握了D触发器的真值表和逻辑方程的编写方法。
实验四:计数器电路的设计与实现计数器是一种能够实现计数功能的数字逻辑电路。
在本实验中,我们设计了一个4位二进制计数器电路。
通过对计数器的时钟信号和复位信号的设置,实现了对计数器的控制。
实验过程中,我们了解到计数器的工作原理,学会了计数器的真值表和逻辑方程的编写方法。
结论:通过本次实验,我们深入了解了数字逻辑的基本原理和应用方法。
通过设计和实现逻辑门电路、多路选择器、时序逻辑电路和计数器电路,我们掌握了数字逻辑实验的基本技巧,并加深了对数字逻辑的理解。
verilog设计一四位计数器

学院:信息技术学院班级:专业:电子信息科学与技术姓名:日期:学号:1、熟悉行为级语法;2、熟悉有限状态机设计一四位计数器,进行仿真,并检测输出结果;提示:在时钟上升沿,如果复位信号有效,则复位为0,如果复位信号无效,则计数器需要加一。
完成一个序列信号电路检测器,检测信号为10010,当检测到此序列时输出端口输出高电平,其余时间输出低电平。
提示:先画出状态转换图或写出状态转换表,根据状态表或者状态图完成代码的设计;编写测试模块对该功能模块进行仿真。
要求实验报告包括完整的状态转化图或者转化表。
序列信号电路检测器:module mian (z, x, clock, clear);output z;reg z;input clock, clear;input x;parameter s0 = 3'd0,s1 = 3'd1,s2 = 3'd2,s3 = 3'd3,s5 = 3'd5,s4 = 3'd4;reg [2:0] state;reg [2:0] next_state;always @(posedge clock) if(clear)state <= s0;elsestate <= next_state;always @(state)begincase(state)s0: show = 0;s1: show = 0;s2: show = 0;s3: show = 0;s4: show = 0;s5: show = 1; endcaseendalways @(x or state) begincase(state)s0: if(x == 0)next_state = s0;elsenext_state = s1;s1: if(x == 0)next_state = s2;elsenext_state = s1;s2: if(x == 0)next_state = s3;elsenext_state = s1;s3: if(x == 0)next_state = s0;elsenext_state = s4;s4: if(x == 0)next_state = s5;elsenext_state = s1;s5: if(x == 0)next_state = s0;elsenext_state = s1;endcaseendendmodulemodule stimulus_mv;wire z;reg x;reg clock, clear; mianMVP(z, x, clock, clear);initialbegin clock = 0;forever #5 clock = ~clock;endinitialbeginclear = 1;repeat(2)@(negedge clock);clear = 0;endinitialbegin#30 x = 1;#10 x = 0;#10 x = 0;#10 x = 1;#10 x = 0;endendmodule1.输出:四位计数器3.1功能块代码module counter(out, clock, clear);output out;input clock, clear;reg [3:0] out;always @(posedge clock or negedge clear) beginif(clear)out <= 4'd0;elseout <= out + 1;endendmodule3.2测试模块代码module counter_stimulus;reg clock, clear;wire [3:0] out;initial$monitor($time, "count = %b , clear = %b", out[3:0], clear); counter MVP(out, clock, clear);alwaysbeginclear = 1'b1;#15 clear = 1'b0;#200 clear = 1'b1;#50 clear = 1'b1;endinitialbeginclock = 1'b0;forever #5 clock = ~clock;endinitialbegin#400 $Finish;endendmodule4分析总结4.1遇到的问题及解决方法4.2实验心得及存在的问题。
课程设计计数器

课程设计计数器一、教学目标本课程的教学目标是让学生掌握计数器的基本原理和使用方法。
具体包括:1.知识目标:使学生了解计数器的历史、发展和种类,理解计数器的工作原理,掌握计数器的使用方法和操作技巧。
2.技能目标:培养学生能够熟练使用计数器进行基本的数学运算,能够运用计数器解决实际问题。
3.情感态度价值观目标:培养学生对科学的热爱和好奇心,培养学生的动手能力和创新精神,使学生认识到科技对生活的重要性。
二、教学内容本课程的教学内容主要包括:1.计数器的基本原理:使学生了解计数器的工作原理,理解计数器各个部分的功能和作用。
2.计数器的使用方法:教授学生如何使用计数器进行基本的数学运算,如何进行数据输入和输出。
3.计数器的操作技巧:通过实际操作,使学生掌握计数器的操作技巧,能够熟练使用计数器。
4.计数器在实际问题中的应用:通过实例讲解,使学生能够运用计数器解决实际问题。
三、教学方法本课程的教学方法包括:1.讲授法:通过讲解计数器的基本原理和使用方法,使学生掌握相关知识。
2.讨论法:通过分组讨论,使学生交流学习心得,提高学生的动手能力和团队协作能力。
3.实验法:通过实际操作,使学生掌握计数器的使用方法和操作技巧。
四、教学资源本课程的教学资源包括:1.教材:选用权威、实用的教材,为学生提供学习参考。
2.参考书:提供相关领域的参考书籍,丰富学生的知识体系。
3.多媒体资料:制作精美的多媒体课件,提高学生的学习兴趣。
4.实验设备:准备充足的实验设备,保证每个学生都能动手实践。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与度、提问回答等情况,评估学生的学习态度和理解程度。
2.作业:布置适量的作业,评估学生的掌握情况,包括计数器的使用方法和实际问题解决能力。
3.考试:定期进行考试,全面评估学生对计数器知识的理解和运用能力。
评估方式要求客观、公正,能够全面反映学生的学习成果。
通过评估,及时发现学生的问题,进行针对性的辅导。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四4 位计数器设计1. 实验目的学习quartusii 和modelsim 的使用方法;学习原理图和veriloghdl 混合输入设计方法;掌握4位计数器设计的设计及仿真方法。
2. 实验原理设计其中的计数器模块CNT4E和数码管译码驱动模块DECL7S勺verilogHDL代码,并作出整个系统仿真。
2.1 4位计数器模块代码module CNT4B(out, CLK, RST); //output out; //in put CLK, RST; //reg [3:0] out; //always (posedge CLK or n egedge RST) //beginif(!RST) //out <= 4'dO;elseout <= out + 1; //enden dmodule低电平复位每一个clk计数效果图:定义模块名和各个端口定义输出端口定义输入时钟和复位定义四位计数器上升沿时钟和下降沿复位2.2七段数码管代码module segled(out1,a); // input [3:0]a; //output [6:0]out1; //reg [6:0]out1; //reg always(a)// begin case(a) //case4'b0000:out1<=7'b0111111;4'b0001:out1<=7'b0000110;4'b0010:out1<=7'b1011011;4'b0011:out1<=7'b1001111;4'b0100:out1<=7'b1100110;4'b0101:out1<=7'b1101101;4'b0110:out1<=7'b1111101;4'b0111:out1<=7'b0000111;4'b1000:out1<=7'b1111111;4'b1001:out1<=7'b1101111;4'b1010:out1<=7'b1110111;4'b1011:out1<=7'b1111100;4'b1100:out1<=7'b0111001;4'b1101:out1<=7'b1011110;4'b1110:out1<=7'b1111001;4'b1111:out1<=7'b1110001;endcase end en dmodule // 模块结束效果图:定义模块名和输入输出端口输入一个3位矢量输出一个6位矢量型变量用于always语句语句用于选择输出CNT4B:b2v inst敏感信号a2.3 综合模块代码// Copyright (C) 1991-2013 Altera Corporation// Your use of Altera Corporation's design tools, logic functions// and other software and tools, and its AMPP partner logic// functions, and any output files from any of the foregoing// (including device programming or simulation files), and any// associated documentation or information are expressly subject // to the terms and conditions of the Altera Program License// Subscription Agreement, Altera MegaCore Function License// Agreement, or other applicable license agreement, including,// without limitation, that your use is for the sole purpose of// programming logic devices manufactured by Altera and sold by // Altera or its authorized distributors.Please refer to the// applicable agreement for further details.// PROGRAM "Quartus II 64-Bit"// VERSION "Version 13.1.0 Build 162 10/23/2013 SJ Web Edition"// CREATED "Tue Apr 11 22:35:09 2017"module cou(CLK,RST,); in put wire CLK; in put wireRST;output wire [6:0] Q;wire [3:0] SYNTHESIZED_WIRE_0; CNT4B b2v_i nst(.CLK(CLK),.RST(RST), .out(SYNTHESIZED_WIRE_0)); segled b2v_i nst1(•a(SYNTHESIZED_WIRE_0), .out1(Q)); en dmodule效果图:v -_E3. 实验设备kx3c10F+开发板,电脑。
4. 实验步骤 4.1编译4.1.1编译结果如下图所示:一一丿 y►■审包办暫或♦ x e «(■rnjK±1tnifrtEr * 盘囂 *GmpiiKii Aiixft • curiio ■»■*-♦ ■*jv*I^TlHLrO^snr^fkl- B>111 w SUIT・ Bhla"5 FlwS^inEp Q UAW □ M -lt ■smoLN *知.•卜 2 c,叮U13弟皿・甲3 *HW|eMTN4«nlTop-rwl Erttfiiame0 FtarDS r EwmwrOdniij □MMHvanEwcii > j 出 m何“itNHTh^Hi^sHnil> 13PWreftII f UM 1 < 1.〕rifcalM< 3s*] , 』ni-B^iiMi 11 Triii "ntfiv<1『H W 1 • jCNTT4B:b2v inst segled :b2v JnstlCLK QRsrl >DUtl[6..Q]a [王®编译解释:在这个报告中,我们可以看到如下信息:Total logic elements 11/5136(<1%): 该芯片中共有5136 个LE 资源,其中的11个在这个工程的这次编译中得到了使用。
Total comb in atio nal fun ctio ns 11/5136(<1%): 该芯片的5136 个LE资源中,其中11个用于实现组合逻辑。
Dedicated logic registers 4/5136(0%): 该芯片的5136个LE资源中,其中4个用于实现寄存器,即时序逻辑。
从上述信息中,可以得到组合逻辑与时序逻辑的使用比例一一11/4= 2.75:1 。
4.1.2综合出来的电路图4仙----- fCLH 皿3 Q I <15 舶----------- 百hiM•..... ■扪us廉电路图解释:从以上电路图可以看出本电路图主要由计数器(CNT4B 和七段数码管显示程序(segled )组成。
从CNT4B 的CLK 端输入CLK 信号,RST 为低电平复位信号,本实验是四位二进制计数 器可以计数16个,每个CLK 上升沿计数一次,其中七段数码管是通过输入的四位二进制数 来选择相应的断码进行输出显示。
4.2管脚分配管脚连接:通过双击Location 选择与芯片上相应的引脚进行连接。
4.3仿真1.测试模块的代码对输入信号定义reg 型变量 输出定义为wire 型 变量初始化< >E 亠IML . Q. *Top V lewWire Bond with Exposed PadCyctone IP EP3C5E144CB□ntCMrJKK.i.Fnp■ ffiLM *2; £3VIIMI HR fS3p J ■rp ■>FM WJ IU ■ra_-*Ui Vortal *X U遊 J u ■ **_<aLi V 14/M *; 札戟3 as *ush曲AJLIvr-N^vv: 0A 3!N_W■L3 Y “&1:module test; reg CLK, RST; // wire [6:0]Q; // in itial beg in //RST = 1'b0;::日wO吟阳U M - I ; .44*^%J U IU E亠4MM :MM14 AWiuii :>'3*^1 3■: it JkiKAiat眾rLir■Efl MMICLK = 1'bO;endalways #50 CLK=~CLK; // 产生时钟信号cou U1(.CLK(CLK),.RST(RST),.Q(Q)); // endmodule2.modesim 仿真图仿真图解释:通过仿真图我们可以看到程序一开始低电平复位,然后 rst 高电平。
计数器开始计数,每过一个clk 上升沿,七段数码管相应断码加 1,与理论值相同,所以仿真验证成功,可以进行硬件仿真4.4下载验证元件例化口 *'OQ !"- »1 11 * ? t '-r•||||l5 ■昂* JU* ** * iI ** Kru| >44 wnznjti ■:豎ill ■ IIfB DmiI .•明I5. 实验体会通过本次实验我学到了计数器的工作原理,计数器虽然也曾经在数电上学过,但是用Verilog 代码编写出来感觉还是很神奇的,而且用代码写出来的计数器简单易理解。
由此认识到这门课程进行数字设计非常有效率,所以在今后的学习中一定努力学习,勤学多问。
对于这次实验,由于比较简单,所以做的挺顺利的,基本没什么问题。