模可变计数器

合集下载

实验二 模可变计数器讲解

实验二 模可变计数器讲解

南昌大学实验报告学生姓名:学号:专业班级:中兴101班实验类型:□验证□综合■设计□创新实验日期:2012、10、18成绩:实验二模可变计数器的设计一、实验目的1.学习计数器的VHDL设计、波形仿真和硬件测试;2.学会自己设计程序;3.学会设计模可变计数器;4.学习多层次设计方法。

二、实验内容与要求1.计设置一位控制模的位M,要求M=0:模23计数;当M=1:模109计数。

2.计数结果用静态数码管显示,一个四位二进制表示0~9中的一个数;3.给出此项设计的仿真波形;4.应用实验装置验证此计数器的功能。

三、实验思路1.按照实验要求,本实验可分为四个模块进程:分频、模23与109计数转换、数码管控制、七段译码。

2.模可变计数器原理:即在原有的模值计数器上加入模值转换功能3.计数器的数码管显示需注意十位和百位的进位即:当个位数的数值为9的下一个脉冲来时转换为,同时向十位进一,转换的算法为:9(1001)+7(0111)=0(0000),并进一位;当数值为99时,用同样的方法转换:153(1001 1001B,数码管显示99)+103(01100111B)=100(0001 0000 0000);4.要求分别实现模23和模109的计数,因此我分别用buffer变量GW、SW 、 BW 代表个位、十位、百位。

还有一个控制模的位M,当M为0时实现模23计数,只用到GW和SW分别为个位和十位计数;当M为1时实现模109计数,用GW 、SW、 BW 分别为个位十位和百位计数。

由于端口不能参与运算,因些在结构体中定义了se10、 sel1、 sel2三个buffer变量,分别用来对应SEL(0)、 SEL(1)、SEL(2);在程序的最后用端口接收信号。

5.进程敏感信号为RST EN M 三个,当RST为低电平,EN为高电平时则计数,否则不计数。

6.位选信号的设置:用整形变量CNT8分别使不同的位选信号对应不同的输入,而得到不同输出。

模可变计数器设计(Verilog语言)解答

模可变计数器设计(Verilog语言)解答

模可变计数器设计(一)实验目的1、进一步熟悉实验装置和Quartus n软件的使用;2、进一步熟悉和掌握EDA 设计流程;3 、学习简单组合、时序电路的EDA 设计;4、学习计数器中二进制码到BCD 码的转换技巧;5、学习实验装置上数码管的输出方法。

(二)设计要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA 实验装置上实现模可变计数器功能,具体要求如下:1 、设置一个按键控制改变模值,按键按下时模为10-99 之间(具体数值自行确定)的数,没按下时模为100-199 之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(三) 主要仪器设备3、微机 1 台4、QuartusII 集成开发软件 1 套5、EDA 实验装置 1 套(四) 实验步骤主要有三个模块1:一个模20 和模119 的计数器2:数码管的显示3:BCD 的调整源程序:module count (clk,m,en,rst,a,sel,SG,d);input clk,m,en,rst;output [7:0] SG;output [2:0] sel;output a;(* synthesis, keep *) reg clk1;(* synthesis, keep *) wire [3:0] gw,sw,bw;/*(* synthesis, keep *) */reg [3:0]a;reg [11:0] q;reg [11:0] model;reg [7:0] cnt,SG;reg [2:0] sel;reg [0:0]d;output [0:0]d;always @(posedge clk) begin cnt=cnt+1;if (cnt==200) begin clk1=1'b1; cnt=0; endelse clk1=1'b0; //200 分频,CLK 为数码管扫描频率,CLK1 为计数频率if (sel<2) sel=sel+1; else sel=0; end //sel 为数码管选择always @(sel) begincase (sel)0: a=bw; //0 数码管为百位1: a=sw; //1 数码管为十位2: a=gw; //2 数码管为个位default: a=0;endcasecase (a)0:SG<=8'b00111111; 1:SG<=8'b00000110;2:SG<=8'b01011011; 3:SG<=8'b01001111;4:SG<=8'b01100110; 5:SG<=8'b01101101;6:SG<=8'b01111101; 7:SG<=8'b00000111;8:SG<=8'b01111111; 9:SG<=8'b01101111; //8 段译码值default: SG=8'b11111111;endcase endalways @(m)if (m) model=12'b000000100000; // 模值20else model=12'b000100011001; // 模值119assign gw=q[3:0];assign sw=q[7:4];assign bw=q[11:8];always @(posedge clk1,negedge rst)beginif (!rst) q=0;else if (en)beginif (q<model)beginif (gw==9) begin q=q+7; if (sw==9) q=q+96; end //BCD 调整else q=q+1;endelse q=0;endendalways @(q)if(qvmodel) d<=0; else d<=1; endmodule波形仿真:iimulatioin WaveformsSimulation sode : TillingA.B Master Time Sar19L9 ns ■[POinler: 39.3^1 us Imeival:39.32 us Stan :End:he. 14 us 37.. 42 UH 33. 7 us39.9B LLS4k 26 us54 us 4X B2 usP 1 i111■Clk1是计数频率,每来一个 clk1信号q 计数一次Simula ion Wa^efor™ Sinulatlon lode: Tiling如图所rst=1有效时开始计数 clk 为扫描频率sel=0时数码管显示百位 a=0 sel=1时数码管显示十位 a=1 sel=2时数码管显示个位 a=3 m=1模20计数器 m=0模119计数器管脚分配:* I HI Ik * Jij19.3ns J hRoirter.6fl.H us Interval.68.09 UE Slarl End.lane<>0□ S&elk<>1B clkl曲+ 0-L玮tT IF Len^1.nCH- 1±1 sei尬1.田Q B i辭El 勿u 3.dM68.14 us63.16 us ■6E. 18 usI63.22 us 68. 24 usW [1] X [3]连[01 X [1] X [3]迪[0] X [1] X [3] ® [o] X [1] X [3]址[0] II :MasierTiiTiB Bar.68.12 usIIISG[0] SG[1] SG[2] SG[3] SG[4] SG[5] SG[6] SG[7] clkPIN_F13PIN_F14PIN_F15PIN_E15PIN_F16PIN_F17PIN_E18PIN_F18 PIN_C13en PIN_H8m rst sel[0] sel[1] sel[2] d[0] PIN_J9PIN_C5PIN_G18PIN_G17PIN_G16 PIN_G13(五)实验心得本实验主要是三大模块的编写,第一次的实验在老师给的参考代码下进行的,不过错误依然很多,主要有几个重点药掌握,一是首先要编写出能够计数的模块,用m 来控制模值的变化m=1 时模值为20 m=0 时模值为119;二是计数模块都是二进制计数的,而要在数码管上显示计数的话就必须进行BCD 调整,并且q 是一个是十二位的寄存器,通过把gw=q[3:0]; sw=q[7:4]; bw=q[11:8] 赋值的方法;一个个的显示在数码管上,由于clk 的频率比较快,所以可以看到三位数码管显示的值,我觉得管脚分配也是比较关键的!一开始我就把个位和百位显示的值搞反了序列信号发生和检测器设计(一)实验目的1、进一步熟悉EDA实验装置和Quartus n软件的使用方法;2 、学习有限状态机法进行数字系统设计;3、学习使用原理图输入法进行设计。

实验二:模可变计数器

实验二:模可变计数器

南昌大学实验报告学生姓名:刘志强学号:6100409222 专业班级:电子091班实验类型:验证□综合□设计■创新□实验日期:实验成绩:实验二模可变计数器设计(模23/模109)一、设计思路/原理图数字电路以前学过模值计数器的设计,而这个实验只是在原类型题加了一个模值转换的设置,再加上要求用数码管显示,所以必须把计数结果转换成BCD码,所以干脆直接使用BCD码进行模值控制。

二、实验程序(程序来源:网络)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt109 isport(clk,rst,en,M:in std_logic;cq,cqq,cqqq: out std_logic_vector (3 downto 0)) ;end cnt109;architecture behav of cnt109 isbeginprocess(clk,rst,en,M)variable cq1:std_logic_vector (11 downto 0);variable Z:std_logic_vector (11 downto 0);begincase M iswhen '0' => Z:="000000100010";when '1' => Z:="000100001000";end case;if rst='1' then cq1:=(others=>'0');elsif clk'event and clk='1' thenif en='1' thenif cq1<Z thenif cq1(7 downto 0) =153 then cq1:=cq1+103;elsif cq1(3 downto 0)=9 then cq1:=cq1+7;else cq1:=cq1+1;end if;else cq1 :=( others =>'0') ;end if;end if;end if;cq<=cq1( 3 downto 0);cqq<=cq1 ( 7 downto 4 ) ;cqqq<=cq1 ( 11 downto 8);end process;end behav转化成可调用的元:;、七段动态译码程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECL7S ISPORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END DECL7S;ARCHITECTURE one OF DECL7S ISBEGINPROCESS(D)BEGINCASE D ISWHEN "0000"=>LED7S<="00111111";WHEN "0001"=>LED7S<="00000110";WHEN "0010"=>LED7S<="01011011";WHEN "0011"=>LED7S<="01001111";WHEN "0100"=>LED7S<="01100110";WHEN "0101"=>LED7S<="01101101";WHEN "0110"=>LED7S<="01111101";WHEN "0111"=>LED7S<="00000111";WHEN "1000"=>LED7S<="01111111";WHEN "1001"=>LED7S<="01101111";WHEN OTHERS=> NULL;END CASE;END PROCESS;END ARCHITECTURE;它的模块图如下:顶层文件:对文件保存并进行编译仿真,在验证仿真正确后进行管脚绑定如下图,然后进行下载测试。

实验一 模可变计数器

实验一 模可变计数器

南昌大学实验报告学生姓名:柳宇航学号:6102113025专业班级:通信工程中兴131班实验类型:□验证□综合□设计□创新实验日期:2015.10.22实验成绩:实验一模可变计数器的设计(一)实验要求完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现模可变计数器功能,具体要求如下:1、设置一个按键控制改变模值,按键按下时模为10-99之间(具体数值自行确定)的数,没按下时模为100-199之间(具体数值自行确定)的数;2、计数结果用三位数码管十进制显示。

(二)实验步骤1.选定M=0时,实现模值为17的计数;M=1时,实现模值为119的计数。

2.建立工作库文件夹,输入计数器的Verilog代码并存盘。

3.选目标器件CycloneII中的EP2C35F672C8并编译。

4.建立仿真波形文件,设置仿真结束时间和输入条件,进行波形仿真。

图1仿真波形的建立图2M=0时模17计数仿真M=0时,计数到16,灯亮M=1M=0复位M=1时,计数到118,灯亮图3M=1时模119计数仿真波形分析:当RST为高电平时,计数清零。

当RST为低电平,使能位EN为高电平时,开始计数:模控制位M为低电平时,则计数器记到16时归0后重新计数,实现模为17的计数功能;模控制位M为高电平时,则计数器记到118时归0后重新计数,实现模为119的计数功能。

当EN 为低电平时,暂停计数。

5.管脚分配clk PIN_C13en PIN_A5m PIN_B5rst PIN_A6sel[0]PIN_G18sel[1]PIN_G17sel[2]PIN_G16SG[0]PIN_F13SG[1]PIN_F14SG[2]PIN_F15SG[3]PIN_E15SG[4]PIN_F16SG[5]PIN_F17SG[6]PIN_E18SG[7]PIN_F18d[0]PIN_H106.下载测试。

下载到实验箱上测试,下推K7(M=0),可以从实验箱数码管观察到0~16模17计数。

模可变16位加法计数器.

模可变16位加法计数器.

课程设计任务书学生姓名:专业班级:指导教师:工作单位:信息工程学院题目: 模可变16位加法计数器设计初始条件:可用仪器: PC机(Quartus II软件)硬件:EDA-IV型实验箱。

要求完成的主要任务:(1)设计任务设计可变16位加法计数器,可通过3个选择位M2、M1、M0实现最多8种不同模式的计数方式,例如可构成5、10、16、46、100、128、200、256进制,共8种计数模式。

(2)时间安排:2012.12.17 课程设计任务布置、选题、查阅资料2012.12.18-21 设计,软件编程、仿真和调试2012.12.22 2012.12.23 实验室检查仿真结果,验证设计的可行性和正确性,熟悉实验平台和试验箱2012.12.24-26 设计的硬件调试2012.12.27-28 机房检查设计成果,现场演示硬件实物,提交设计说明书及答辩指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要.................................... 错误!未定义书签。

Abstract (II)1 计数器的工作原理 (1)2 设计原理 (3)2.1 整体设计原理 (3)2.2 单元模块的设计 (4)2.2.1 计数模块的设计 (4)2.2.2显示模块的设计 (5)2.2.3分频模块的设计 (5)2.2.4 顶层模块的设计 (5)3 单元模块元件原理图 (6)4 电路系统的功能仿真 (8)5 硬件调试 (10)6 个人小结 (12)参考文献 (13)附录 (14)摘要计数器的种类按照计数器中的触发器是否同时翻转分类,可将计数器分为同步计数器和异步计数器两种,如果按照计数过程中数字增减分类,又可将计数器分为加法计数器、减法计数器和可逆计数器,随时钟信号不断增加的为加法计数器,不断减少的为减法计数器,可增可减的叫做可逆计数器。

计数器不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。

计数器的VHDL设计与实现

计数器的VHDL设计与实现

期刊论文—EDA课程设计题目:计数器的VHDL设计与实现学生姓名:李雷学生学号:09专业班级:计算机科学与技术0902班指导老师:方恺晴计数器的VHDL设计与实现摘要:介绍了各种基本计数器的组成及其工作原理,重点研究了可变模计数器的设计与实现,在对现有的可变模计数器的研究基础上,在Quartus 开发环境中,用VHDL语言设计一种功能更加强大的可变模计数器,它具有清零、置数、使能控制、可逆计数和可变模等功能,并且对传统的可变模计数器的计数失控问题进行研究,最终设计出一种没有计数失控缺陷的可变模计数器,并通过波形仿真和EPF10K20TI144—4系列实验箱,验证了其各项设计功能。

结果表明该设计正确.功能完整。

运行稳定.关键词:VHDL;计数器;可变模计数;可逆计数VHDL Design and Realization of CounterAbstract:This paper analyzes all kinds of basic counter and its working principle, focus on the counter variable mode of design and implementation。

In the environment of Quartus based on research of the existing module—alterable counter,a module—alterable counter with more functions,such as clear,set,enable control,reversible count,module—alterable count and so on,which is designedwith VHDL.By researching the problem of losing control existed in traditional module—alterable counter。

实验二 同步模4可逆计数器

实验二   同步模4可逆计数器

实验二同步模4可逆计数器
实验目的:1.掌握同步时序逻辑电路的设计方法。

2.加深对同步和时序两个概念的理解。

实验条件:
1.操作系统为WINDOWS 2000的计算机一台
2.Multisim 2001电子线路仿真软件一套
实验组件:双D触发器 74LS74 1片,三输入三与非门74LS10 1片,二输入二与非门74LS00 1片,二输入四异或门74LS86 1片
实验内容:
利用D触发器设计一个可逆模4计数器。

附:(选做)
利用JK触发器设计一个可逆模4计数器。

实验要求:
1.看懂光盘中的实验过程,并在Multisim 2001中使用逻辑分析仪验证结果.
2.使用方波发生器5V 1KHZ(器件库—电源—CLOCK SOURCE)提供脉冲,灯泡(器件库—指示器件—LAMP),开关(器件库—BASIC—SWITCH—SPDT)。

3.根据实验内容,列出真值表、逻辑函数式,并在下周三上交实验报告。

附:74LS10引脚图
74LS74的逻辑符号。

一种基于FPGA的可变模计数器的VHDL实现

一种基于FPGA的可变模计数器的VHDL实现

一种基于FPGA的可变模计数器的VHDL实现【摘要】可变模计数器是数字系统中广泛应用的一种电路模块,本文讨论了一种基于VHDL语言实现的可变模计数器的EDA设计方案,采用FPGA芯片作为设计载体,FPGA具有在线可重构的优点,如需对计数器的技术指标进行修改,只需修改源程序中的相应参数,重新进行编译、仿真、配置即可,使得设计本身灵活性好,便于升级和维护。

【关键词】FPGA;VHDL;可变模计数器1.引言EDA是将数字系统以某一种特定的表达方式输入计算机开发平台进行处理,经由综合,仿真,下载到目标芯片,最终实现设计的智能化设计技术。

其中输入文件的种类众多,有原理图输入法、硬件描述语言输入法、状态图输入法、波形输入法等。

硬件描述语言(HDL)是EDA技术的重要组成部分,是设计数字系统的重要表达手段,和原理图输入法,波形输入法相比,具有灵活度高,易于修改、升级,方便调用,库资源丰富等优点。

常见的HDL主要有VHDL、Verilog HDL、ABEL、AHDL等,其中标准化语言VHDL、Verilog使用最广泛,可以被几乎所有的EDA工具支持。

可变模计数器是数字系统中广泛应用的一种电路模块,本文讨论了一种基于VHDL语言实现的可变模计数器的EDA设计方案,采用FPGA芯片作为设计载体,FPGA具有在线可重构的优点,如需对计数器的技术指标进行修改,只需修改源程序中的相应参数,重新进行编译、仿真、配置即可,使得系统本身灵活性好,便于升级和维护。

2.可变模计数器的功能指标本文设计的计数器为5位输出可变模计数器,采用两位控制信号选择计数的模值,因此可进行四种模值的切换。

计数器在工作时,可以通过控制信号m[1:0]的值选择相应的模值m,计数时,在每个时钟的上升沿进行加法计数,从0计到m-1,然后自动归零循环计数。

在本设计中,输出端口为5位,可以实现模小于等于32的计数应用。

如果需要增可选择模值的数量,只需要增加选择控制信号位数即可。

模可变计数器设计

模可变计数器设计

实验二模可变计数器设计一、实验目的(1) 掌握关于简单数字电路的设计和静态数码管的设计。

(2)熟悉VHDL中进程语句的使用。

(3)掌握数码管的显示。

二、实验内容与要求(1)设计设置一位控制位M,要求M=0:模23计数;M=1:模109计数。

(2)计数结果用静态数码管显示,显示BCD码。

(3)给出此项设计的仿真波形。

三、设计原理(1)计数器能够计数的前提就是在使能端有效时,因此设计了en作为输入信号。

(2)计数器应该还要有异步清零端,因此设计了rst作为一个输入信号。

另外因为这是模可变的计数器,因此还需要m作为一个输入信号控制计数的模(3)计数器的基本工作原理是在CP:时钟脉冲输入端,每个上升沿到来时,计一个数,即自身加一,因此设计了计数的变量mmm(4)若是X模,则应该在小于X时计数,一旦记到X时,应该输出一个进位,因此需要设计一个变量limit作为参量,只有在小于limit时才可以计数,否则就应该清零。

又由于在模切换时,要求只要小于22或108就可以计数,因此limit要赋予不同的值(由m控制),且在是否执行加一前进行判断。

(5)因为一个静态数码管需要四位输出,最大计数是108,要用三个静态数码管,因此mmm要设计成一个std_logic_vector(11 downto 0)共12位,来对应三个数码管的输出。

(6)因为std_logic_vector(11 downto 0)这是二进制的加法,因此不能直接显示,否则就出现错误了,因此涉及到了二进制转换为十进制。

当低八位为10011010,前四位与后四位分别加6,即01100110;若低四位出现1010,要加6,即0110,进行调整。

(7)计数器的加一和调整是逻辑上是不同条件的相与,因此用到if语句。

四、实验器材PC机,试验箱,quartus软件五、实验程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count isport(clk,rst,en,m:in std_logic;m1,m2,m3:out std_logic_vector(3 downto 0);cout:out std_logic);end count;architecture behav of count isbeginprocess(clk,rst,en,m)variable limit:std_logic_vector(11 downto 0); ---limit用来控制是否小于22或108variable mmm:std_logic_vector(11 downto 0);--mmm用来计数beginif m='0' then limit:="000000100010"; ---给limit赋值,为m=0时为22,else limit:="000100001000"; ---m=1时为108end if;if rst='1' then mmm:=(others=>'0'); ----异步清零elsif clk'event and clk='1' then ----判断时钟上升沿if en='1' then ----判断使能端if mmm<limit then mmm:=mmm+"000000000001";---计数器加一if mmm(7 downto 0)="10011010"then mmm:=mmm+"000001100110";elsif mmm(3 downto 0)="1010"then mmm:=mmm+"000000000110";end if; ---进行加六调整else mmm:=(others=>'0');end if;end if;end if;if mmm=limit then cout<='1'; ---计数值到达模值时输出else cout<='0';end if;m1(3 downto 0)<=mmm(3 downto 0);m2(3 downto 0)<=mmm(7 downto 4);m3(3 downto 0)<=mmm(11 downto 8); ---数码管输出显示end process;end;六、实验步骤(1)建立工作库文件夹,输入设计项目原理图或VHDL代码并存盘。

(完整word版)基于VHDL的多功能可变模计数器

(完整word版)基于VHDL的多功能可变模计数器

基于VHDL的多功能可变模计数器设计0 引言随着电子技术、计算机技术和EDA技术的不断发展,利用FPGA/CPLD进行数字系统的开发已被广泛应用于通信、航天、医疗电子、工业控制等领域。

与传统电路设计方法相比,FPGA/CPLD具有功能强大,开发周期短,投资少,便于追踪市场变化及时修改产品设计,以及开发工具智能化等特点。

近年来,FPGA/CPLD发展迅速,随着集成电路制造工艺的不断进步,高性价比的FPGA/CPLD器件推陈出新,使FPGA/CPLD成为当今硬件设计的重要途径。

在FPGA/CPLD的应用设计开发中,VHDL语言作为一种主流的硬件描述语言,具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性,并在语言易读性和层次化、结构化设计方面。

表现出了强大的生命力和应用潜力。

QuartusⅡ是Altera公司在21世纪初推出的FPGA/CPLD集成开发环境,是Altera公司前一代FPGA/CPLD集成开发环境Max+PlusⅡ的更新换代产品,其界面友好,使用便捷,功能强大,为设计者提供了一种与结构无关的设计环境,使设计者能方便地进行设计输入、快速处理和器件编程。

计数器是数字系统中使用最多的时序电路之一,不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节拍脉冲和脉冲序列以及进行数字运算等。

可变模计数器由于计数容量可以根据需要进行变化,为其广泛使用创造了便利。

这里在QuartusⅡ开发环境下,用VHDL 语言设计了一种具有清零、置数、使能控制、可逆计数和可变模功能的计数器。

1 基本可变模计数器设计可变模计数器是指计数/模值可根据需要进行变化的计数器。

电路符号图1所示,clk 为时钟脉冲输入端,clr为清零端,m为模值输入端,q为计数输出端。

基本可变模计数器的VHDL代码如下所示:说明:上述代码设计采用了常用的if语句结构,即“if条件句then顺序语句elsif条件句then顺序语句else顺序语句end if”结构,实现模值小于99的可变模计数。

基于FPGA的模可变16进制加法器的设计

基于FPGA的模可变16进制加法器的设计

课程设计任务书学生姓名:兰翔专业班级:电子科学与技术2班指导教师:葛华工作单位:信息工程学院题目:模可变16位加法计数器设计初始条件:QuartusII6.0,微机要求完成的主要任务:深入学习Verilog HDL语言与FPGA理论知识。

利用QuartusII强大的硬件语言处理功能,数字电路仿真功能以及波形处理功能,实现模可变16位加法计数器设计。

1.利用Verilog HDL语言描述计数器功能;2.用QuartusII对Verilog HDL语言进行仿真;3. 撰写《EDA技术应用实践》课程设计说明书。

时间安排:学习Verilog HDL语言的概况第1天学习Verilog HDL语言的基本知识第2、3天学习QuartusII的应用环境,仿真功能。

第4、5天课程设计第6-9天答辩第10天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (I)A BSTRACT.......................................................... I I1.设计任务 (1)1.1初始条件 (1)1.2课题要求 (1)1.3设计要求 (1)2.Q UARTUS II简介 (2)3.课题内容 (3)3.1 总体框图 (3)3.2 各部分功能 (3)3.2.1按键触发 (3)3.2.2 LED显示部分 (5)3.2.3计数部分 (6)4.心得体会 (8)参考文献 (9)附录一V ERILOG HDL原程序 (10)附录二总原理图 (15)摘要FPGA(Field Programmable Gate Array)即“现场可编程门阵列”是应着当代微电子技术迅猛发展而产生的一种技术,到现在为止,已经存在了27年。

由于其电路执行速度快、上市时间短、成本低廉、可靠性高、易于维护升级而被人们所青睐,目前已经广泛用于通信、信号处理、嵌入式处理器、图形处理和工业控制的领域。

本次课设就是在Altera公司的FPGA设计平台QuartusII上进行的计数器设计。

vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结

vhdl课程设计设计模为 4、8、12、16的可变计数器实验报告总结

VHDL课程设计 - 可变计数器实验报告总结
一、设计概述
本课程设计的主要目标是设计并实现一个可变计数器,其模(Modulo)值可以在4、8、12、16之间进行选择。

计数器采用VHDL编程语言进行描述,并在FPGA开发板上进行测试验证。

二、设计实现
1. 硬件平台:我们选择了Xilinx的FPGA开发板作为硬件平台,它具有丰富的I/O资源和足够的逻辑单元,可以满足我们的设计需求。

2. VHDL编程:我们采用VHDL语言进行编程,实现了模4、模8、模12和模16的可变计数器。

通过选择不同的计数模式,计数器的模值可以在4、8、12、16之间进行切换。

3. 测试与验证:为了验证计数器的功能,我们编写了测试平台,并通过仿真和实际硬件测试对计数器进行了全面的测试。

三、实验结果与分析
1. 实验结果:通过仿真和实际硬件测试,我们验证了计数器的
功能正确性。

在不同的模值下,计数器都能正确地进行计数操作,并且在达到模值后能正确地回绕到0。

2. 结果分析:实验结果表明,我们的VHDL编程和FPGA开发技能得到了很好的应用和提升。

同时,通过这次课程设计,我们更深入地理解了可变计数器的设计和实现原理,提高了我们的硬件设计能力。

四、总结与展望
本次课程设计让我们深入了解了VHDL编程语言和FPGA开发技术,提高了我们的硬件设计能力。

通过实际的设计和测试,我们成功地实现了一个可变模值的计数器,达到了课程设计的要求。

在未来的学习和工作中,我们将继续深入学习FPGA设计和VHDL编程,不断提高自己的硬件设计能力。

同时,我们也期待将这种技术应用于更多的实际项目中,为工程实践做出贡献。

数字逻辑电路实验_东南大学中国大学mooc课后章节答案期末考试题库2023年

数字逻辑电路实验_东南大学中国大学mooc课后章节答案期末考试题库2023年

数字逻辑电路实验_东南大学中国大学mooc课后章节答案期末考试题库2023年1.下面四个选项,哪些能实现如下的功能表?【图片】参考答案:__2.中规模组合逻辑电路实验中要注意一些问题,以下说法正确的是:参考答案:两个4选1数据选择器加一个或门可以扩展成一个8选1数据选择器;_输入端要注意高低位顺序;_控制端不能悬空,必须接有效的高电平或者低电平;3.下面关于双D触发器7474的描述有哪些是正确的参考答案:清零端R是异步工作的,当R=‘0’的时候,触发器清零;_时钟端CLK是上升沿触发的;_每个触发器有两个输出端,其中一个是原变量输出,另一个是反变量输出;4.下面关于计数器74161的说法哪些是正确的:参考答案:清零端CLR是异步工作的,当CLR=‘0’的时候,计数器清零;_当计数器使能端ENT和ENP都为’0’时,计数器保持当前的计数值不变;_只有当计数器记到“1111”的时候,计数器进位输出端RCO输出‘1‘,其他时候输出‘0’;5.下面三个电路分别是什么模的计数器?【图片】参考答案:模6、模5、模6;6.下面关于广告流水灯实验的说法哪些是正确的:参考答案:触发器时钟端接单脉冲按钮,可以帮助我们单步调试计数器功能;_将触发器的输出Q接到译码器74138的地址端A,其中Q2-->A2,Q1-->A1,Q0-->A0,不可接反;_如果广告流水灯的8个灯全亮,且74138供电正常,则需要检查74138的6脚是否接‘1’,5脚和4脚是否接‘0’;7.下面关于序列发生器实验的说法哪些是正确的:参考答案:序列的长度决定了计数器的模值;_1个74161+1个3-8译码器,配合适量的与非门,可以实现多个长度相同的序列发生器;8.使用可编程逻辑器件设计电路的步骤:1编译;2输入原理图; 3下载;4仿真验证结果;5创建新工程参考答案:5-2-1-4-39.下面关于可编程数字逻辑器件说法正确的是:参考答案:内部预置了大量易于实现各种逻辑函数的结构;_利用软件工具来进行设计;_有保持信息或控制连接的特殊结构;_是一种大规模的集成电路;10.下面有关仿真说法正确的是:参考答案:功能仿真速度快,适合于复杂大系统的初步功能检查:_时序仿真速度比较慢;_功能仿真主要是检查逻辑功能是否正确,不考虑任何延迟信息;_时序仿真是利用在布局布线中获得的精确延时参数进行的精确仿真;11.下图仿真波形正确的说法:【图片】参考答案:Q3能够实现对输入CLK的10分频_这是一个模10计数器;12.下面关于多方向交通灯主控制器设计说法正确的是:参考答案:不同状态下,根据外部输入条件,控制相应的计数器计数或者保持;_根据状态图列出状态表、写出表达式,画出原理图;_最简由四个状态实现;13.关于多方向交通灯主干道计时器下面说法正确的是:参考答案:是可变模倒计数器;_使能端信号由控制单元产生;_高低位分别由一个4位二进制计数器组成;14.数字系统模块划分下面说法正确的是:参考答案:分控制单元和数据处理单元;_控制单元决定数据处理单元执行的顺序;_数据处理单元通常可以分成多个子系统,每个子系统实现一个指定的逻辑功能;_数据处理单元负责执行数据处理的操作;15.数字系统的设计方法主要有以下几种:参考答案:自顶向下为主,自底向上为辅的方法;_自底向上法;_自顶向下法;16.多方向交通灯系统中,根据系统框图,下面说法正确的是:参考答案:该系统有3个输入信号;17.对数字TTL器件,电源电压要求正确的是:参考答案:VCC=5V, GND=0V18.对74HC系列器件,当工作电源是5V时,下列说法正确的是:参考答案:Vihmin约3.5V19.示波器测量脉冲信号时,方法错误的是:参考答案:测量高频脉冲信号的上升时间,示波器探头开关在*1和*10两档测量结果相同20.有关面包板说法正确的是:参考答案:窄条面包板,横向一组5个孔相通;_宽条面包板,纵向一组5个孔相通;21.数字电路静态验证故障排除中,下列说法错误的是:参考答案:电路出现故障时,最好的办法是拆掉电路重新搭接一遍;22.可以使用的故障排除方法有:参考答案:从前往后查;_从后往前查;23.对初学者,在面包板上搭接数字电路,要注意避免以下问题:参考答案:芯片插反了;_芯片选型错误;_引脚号数错了;_导线及芯片未插到面包板底部;24.一位8421BCD码与4位二进制数的说法正确的是:参考答案:一位8421BCD码仅有0-9十种状态,后6种状态不用考虑,可以做任意输出;_4位二进制数有0-15 共计16种状态;25.下图中输入和输出的对应关系正确的是:【图片】参考答案:输出不确定。

实验二_模可变计数器设计(模23模109)南昌大学

实验二_模可变计数器设计(模23模109)南昌大学

实验二模可变计数器设计(模23/模109)一、实验目的1.学习一般的数字电路设计;2.学习数码管的输出方法;3.进一步熟悉Quartes II集成开发软件的使用以及PH-1V型实验装置的使用二、实验要求1.设置一位控制位M,要求M=0:模23计数;M=1:模109计数;2.计数结果用两位数码管显示,显示BCD码;3.给出此项设计的仿真波形;三、实验设计数字电路以前学过模值计数器的设计,而这个实验只是在原类型题加了一个模值转换的设置,再加上要求用数码管显示,所以必须把计数结果转换成BCD 码,所以干脆直接使用BCD码进行模值控制。

1、实验程序2、波形仿真(1)、模23计数波形分析:M为0,所以用模23计数。

当CQ1即个位开始计数,满9进1则CQ2加1,依次计数。

在CQ1达到22时,COUT发出脉冲,表示开始进位。

(2)、模109计数波形分析:M为1,所以用模109计数,当CQ1即个位开始计数,满108进1,依次计数。

在CQ1达到108时,COUT发出脉冲,表示开始进位。

3、引脚设置完成引脚设置后,就可以进行试验箱运行检验了。

四、实验步骤:1.建立工作库文件夹和编辑设计文件(1)在D盘下建立一个文件夹保存工程文件;(2)打开QuartusII,建立新的VHDL文件,再打开的页面下输入程序。

2.编译过程(1)输入完程序之后逐个编译(2)逐个编译无错之后进行全程编译3.系统仿真(1)建立新的波形激励文件(2)在波形编辑器窗口添加节点(3)通过Edit->End Time 来设定仿真结束时间(4)点击save保存(5)通过Tools下的Simulator Tools项进行仿真,然后观察输出波形。

4.引脚锁定(1)通过Assignment->Assignment Editor->Pin查找到所有的引脚(2)选择各个输入输出信号来锁定到不同引脚,进行全编译。

5.编程下载(1)选择Tools->Programmer菜单,点击Hardware Setup窗口完成硬件设置(2)点击Start开始编程下载。

时序逻辑电路习题解答

时序逻辑电路习题解答

5-1分析图所示时序电路的逻辑功能,写出电路的驱动方程、状态方程和输出方程, 画出电路的状态转换图和时序图。

解:从给定的电路图写出驱动方程为:D o (Q 0Q i n)e Q 2D i Q 01D 2 Q i nQ 01 1(Q 0Q n)eQ ;Q i n 1Q 0Q 21Q ;由电路图可知,输出方程为Z Q ;CLK将驱动方程代入D 触发器的特征方程Q n 1D ,得到状态方程为:5-1(a )所示,时序图如图题解Z图题5-1图根据状态方程和输出方程,画出的状态转换图如图题解题解5-1(a )状态转换图综上分析可知,该电路是一个四进制计数器。

5-2分析图所示电路的逻辑功能,写出电路的驱动方程、状态方程和输出方程,画出电路的状态转换图。

A 为输入变量。

解:首先从电路图写出驱动方程为:D o A& D i A Qg :A (Q : Q i n)将上式代入触发器的特征方程后得到状态方程Q 0 1AQ :Q :1 AQ 0Q :A (Q nQ :)电路的输出方程为:CLKQ i12345——-A1 11 t----------- 1------------ 1|| 1 » 1 1 1----------- 1 ---------- 1 --------------►CLK0 Q 2/Z 仝题解5-1(b )时序图0 Q o 胃AY图题5-2图丫AQoQ;根据状态方程和输出方程,画出的状态转换图如图题解5-2 所示综上分析可知该电路的逻辑功能为:当输入为0时,无论电路初态为何,次态均为状态" 00”,即均复位;当输入为1时,无论电路初态为何,在若干CLK 的作用下,电路最终回到状态“10”。

5-3已知同步时序电路如图(a )所示,其输入波形如图 (b )所示。

试写出电路的驱动方 程、状态方程和输出方程,画出电路的状态转换图和时序图,并说明该电路的功能。

CLK 1 2345678(b )输入波形 图题5-3图解:电路的驱动方程、状态方程和输出方程分别为:J 。

模可变计数器

模可变计数器

南昌大学实验报告学生姓名:俞鑫学号: 106100210075 专业班级:通信102班实验类型:□验证□综合□设计□创新实验日期:实验成绩:模可变计数器的设计一、实验要求利用控制位M来改变模长要求M=1时模为114计数,M=0时模为16计数;二、实验步骤1.选目标器件CycloneII中的EP2C35F672C8,建立名为count的工作库文件夹,输入计数器的VHDL代码。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY count ISPORT(CLK,M,EN,RST:IN STD_LOGIC;sel0,sel1,sel2:buffer STD_LOGIC;SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管八段CLK1:buffer STD_LOGIC;GW,SW,BW: buffer STD_LOGIC_VECTOR(3 DOWNTO 0);--计数器的个,十,百位 COUT:OUT STD_LOGIC; --溢出信号SEL:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) --位选信号);END count;ARCHITECTURE behav OF count ISSIGNAL CNT : STD_LOGIC_VECTOR(7 DOWNTO 0); --数码管分频计数 SIGNAL J : STD_LOGIC_VECTOR(11 DOWNTO 0); --12位BCD计数值SIGNAL CNT8: STD_LOGIC_VECTOR(2 DOWNTO 0); --数码管选择SIGNAL A : STD_LOGIC_VECTOR(3 DOWNTO 0); --数码管显示值0SIGNAL MODEL : STD_LOGIC_VECTOR(11 DOWNTO 0); --模长信号BEGINP1:PROCESS(CLK) --进程P1分出的频率用来数码管的位选扫描BEGINIF CLK'EVENT AND CLK = '1' THEN CNT<=CNT+1;IF CNT=130 THEN CLK1<='1'; --130分频ELSE CLK1<='0';END IF;END IF;END PROCESS;P2:PROCESS(EN,RST,M,CLK1) --计数BEGINCASE M ISWHEN '0'=>MODEL<="000000010101"; --16WHEN '1'=>MODEL<="000100010011"; --114END CASE;GW<=J(3 downto 0);SW<=J(7 downto 4);BW<=J(11 downto 8);IF RST='1' THEN J<=(others=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF EN='1' THENIF J<MODEL THENIF GW=9 THEN --个位为9时加7调整 J<=J+7;IF SW=9 THEN --十位为9时加103调整 J<=J+103;END IF;ELSE J<=J+1;END IF;ELSE J<=(others=>'0');END IF;END IF;END IF;END PROCESS;P3:PROCESS( CLK) --数码管控制BEGINIF CLK'EVENT AND CLK='1' THENIF CNT8<"010" THEN CNT8 <=CNT8+1;ELSE CNT8<=(OTHERS=>'0');END IF;END IF;SEL(0)<=sel0 ;SEL(1)<=sel1 ;SEL(2)<=sel2 ;CASE CNT8 IS --个、十、百分别送数码管动态显示WHEN "000" => sel2<='0';sel1<='1';sel0<='0';A<=GW;WHEN "001" => sel2<='0';sel1<='0';sel0<='1';A<=SW;WHEN "010" => sel2<='0';sel1<='0';sel0<='0';A<=BW;WHEN OTHERS =>NULL;END CASE;END PROCESS ;P4:PROCESS(A) --七段译码BEGINCASE A ISWHEN "0000" =>SG<="00111111"; WHEN "0001" =>SG<="00000110";WHEN "0010" =>SG<="01011011"; WHEN "0011" =>SG<="01001111";WHEN "0100" =>SG<="01100110"; WHEN "0101" =>SG<="01101101";WHEN "0110" =>SG<="01111101"; WHEN "0111" =>SG<="00000111";WHEN "1000" =>SG<="01111111"; WHEN "1001" =>SG<="01101111";WHEN OTHERS=>NULL;END CASE;END PROCESS;COUT <='1' WHEN J =MODEL ELSE '0';END behav;2.将上述编辑的文件保存,并编译3.建立仿真波形文件,进行波形仿真。

变模计数器设计

变模计数器设计

武汉理工大学
数字电子技术基础课程设计报告
姓名:
班级:
学号:
指导老师:华剑
一.设计要求
设计一个变模计数器
当:X=0时,实现七进制加计数
X=1时,实现五进制加计数
二.设计思路
计数器最大为七进制,因此采用四位二进制计数器即可实现。

因此采用74LS161来进行设计。

三.元器件介绍
1.74LS161原理图和管脚图
74LS161逻辑功能表 U374LS161D QA 14QB 13QC 12QD 11RCO 15
A 3
B 4
C 5
D 6
ENP 7ENT 10
~LOAD 9~CLR 1
CLK 2
2.或门
3.与非门
4.单刀双掷开关
5.函数发生器
6.显示译码器
三.
电路模块设计
S2
键 = 空格
XFG1
U1
DCD_HEX
1.时钟信号输入
2.数字显示电路
3.同步置0电路
四.电路图
五.工作过程
1.X=0时,显示译码器从0到6依次循环显示
计数器从零开始计数。

当QDQCQBQA=0110时,经过或门和与非门得到低电平信号,使得LD=0,计数器置0。

接下来又从0开始循环计数。

2.X=1时,显示译码器从0到4依次循环显示
计数器从零开始计数。

当QDQCQBQA=0100时,经过或门和与非门得到低电平信号,使得LD=0,计数器置0。

接下来又从0开始循环计数。

六.仿真
经过仿真软件模拟,可以实现所要求实现的功能,设计成功。

可变模计数器

可变模计数器

实验名称:可变模数计数器一、实验目的:设计一个可变模计数器,计数器由3个触发器构成,在外部控制信号S2S1的控制下分别实现模3、模5、模7和模8的计数,即(1)、S2S1=00时,实现模3计数,触发器状态依次为0→1→2→0;(2)、S2S1=01时,实现模5计数,触发器状态依次为0→1→2→3→4→0;(3)、S2S1=10时,实现模7计数,触发器状态依次为0→1→2→3→4→5→6→0;(4)、S2S1=11时,实现模8计数,触发器状态依次为0→1→2→3→4→5→6→7→0;二、实验内容:(1)、顶层原理图:(2)、各个模块程序:1、模3:(库略)entity cnt3 isport(s2,s1,en,rd:in std_logic;clk:in std_logic;q:out std_logic_vector(3 downto 0));end cnt3;architecture cnt of cnt3 issignal qn:std_logic_vector(3 downto 0);beginprocess(clk,s1,s2)beginif (rd='0' ) thenqn<=X"0";elsif (en='0') thenqn<=X"0";elsif (clk'event and clk='1' and s1='0' and s2='0') thenif qn(3 downto 0)= X"2" then qn( 3 downto 0 )<="0000"; else qn<=qn+1; end if; end if; end process; q<=qn; end cnt; 2、模5:(库略) entity cnt5 is port( s2,s1,en,rd:in std_logic; clk:in std_logic; q:out std_logic_vector(3 downto 0) ); end cnt5;architecture cnt of cnt5 is signal qn:std_logic_vector(3 downto 0); begin process(clk,s1,s2) begin if (rd='0' ) then qn<=X"0"; elsif (en='0') then qn<=X"0"; elsif (clk'event and clk='1' and s1='1' and s2='0') then if qn(3 downto 0)= X"4" then qn( 3 downto 0 )<="0000"; elseqn<=qn+1;end if; --else --qn<=X"0"; end if; end process; q<=qn; end cnt;3、模7:(库略) entity cnt7 is port( s2,s1,en,rd:in std_logic; clk:in std_logic; q:out std_logic_vector(3 downto 0) ); end cnt7;architecture cnt of cnt7 is signal qn:std_logic_vector(3 downto 0); begin process(clk,s1,s2) begin if (rd='0' ) then qn<=X"0"; elsif (en='0') then qn<=X"0"; elsif (clk'event and clk='1' and s1='0' and s2='1') then if qn(3 downto 0)= X"6" then qn( 3 downto 0 )<="0000"; else qn<=qn+1;end if;--else--qn<=X"0";end if;end process;q<=qn;end cnt;4、模8:(库略)entity cnt8 isport(s2,s1,en,rd:in std_logic;clk:in std_logic;q:out std_logic_vector(3 downto 0));end cnt8;architecture cnt of cnt8 issignal qn:std_logic_vector(3 downto 0);beginprocess(clk,s1,s2)beginif (rd='0' ) thenqn<=X"0";elsif (en='0') thenqn<=X"0";elsif (clk'event and clk='1' and s1='1' and s2='1') thenif qn(3 downto 0)= X"7" thenqn( 3 downto 0 )<="0000";elseqn<=qn+1;end if;--else--qn<=X"0";end if;end process;q<=qn;end cnt;5、decoder显示:(库略)entity decoder isport(s1,s2:in std_logic;seg:out std_logic_vector(6 downto 0);done,dtwo,dthree,dfour:instd_logic_vector(3 downto 0));end decoder;architecture dec of decoder issignal d : std_logic_vector(3 downto 0); beginprocess(s1,s2)beginif ( s1='0' and s2='0') thend <=done;elsif ( s1='1' and s2='0') thend <=dtwo;elsif ( s1='0' and s2='1') thend <=dthree;elsed<=dfour;end if;end process;with d selectseg <="0111111" when "0000","0000110" when "0001","1011011" when "0010","1001111" when "0011","1100110" when "0100","1101101" when "0101","1111101" when "0110","0000111" when "0111","1111111" when "1000","1101111" when "1001","0000000" when others;end dec;三、实验总结:通过本次实验,掌握了从顶层文件原理图开始,自上而下的设计电路的方法,感受到此方法的在各个模块程序调试时的方便,有更好的逻辑思路。

EDA实验:可变模计数器

EDA实验:可变模计数器

EDA实验:可变模计数器文档包括错误程序分析和正确程序及其注释。

通过拨码开关SW1,SW0实现计数器模值的选择,可选的模值有12进制、24进制、30进制、60进制。

First.vhdl 原版本程序以及错误分析LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY houmingzhen051 ISPORT(CLK:IN STD_LOGIC;M1,M0:IN STD_LOGIC;A:OUT INTEGER RANGE 0 TO 60; --在这里混淆了数据对象和变量的定义B,C:OUT INTEGER RANGE 0 TO 9; --A原意指计数数据,B,C分别表示计数数值的十位和个位,本应是过程变量DATA_OUT1,DATA_OUT2:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) --定义两个标准逻辑矢量,分别作为两位数码管的输入);END houmingzhen051;ARCHITECTURE beh OF houmingzhen051 ISBEGINPROCESS(CLK) --这里应该有分频,使得计数时长为1SIF CLK'EVENT AND CLK=1 THENELSIF(M0=0 AND M1=0) THENIF(A>11) THENA:=0;ELSIF(A=11) THENA:=0;ELSE A:=A+1;END IFELSIF(M0=0 AND M1=1) THENIF(A>23) THENA:=0;ELSE(A=23) THENA:=0;ELSE A:=A+1;END IF;ELSIF(M0=1 AND M1=0) THENIF(A>29) THENA:=0;ELSIF(A=29) THENA:=0ELSE A:=A+1;END IF;ELSIF(M0=1 AND M1=1) THENIF(A>59) THENA:=0;ELSIF(A=59) THENA:=0;ELSE A:A+1;END IF;END IF;B:A REM 10;C:=A/10;case B iswhen 0 DATA_OUT<="0000001"; --由于编译一直出问题,反复修改最后也把这里改出了问题when 1 DATA_OUT<="1001111";when 2 DATA_OUT<="0010010";when 3 DATA_OUT<="0000110";when 4 DATA_OUT<="1001100";when 5 DATA_OUT<="0100100";when 6 DATA_OUT<="0100000";when 7 DATA_OUT<="0001111";when 8 DATA_OUT<="0000000";when 9 DATA_OUT<="0000100";end case;case C iswhen 0 DATA_OUT<="0000001";when 1 DATA_OUT<="1001111";when 2 DATA_OUT<="0010010";when 3 DATA_OUT<="0000110";when 4 DATA_OUT<="1001100";when 5 DATA_OUT<="0100100";when 6 DATA_OUT<="0100000";when 7 DATA_OUT<="0001111";when 8 DATA_OUT<="0000000";when 9 DATA_OUT<="0000100";end case;END PROCESS(CLK);END beh; --总的来说,问题主要是变量定义错误、缺少时钟分频函数Newversion.vhdl 修改版本及程序详细注释LIBRARY IEEE; --库资源同时声明以下3个,可以省去很多麻烦USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY houmingzhen051 IS --以下部分是可变模计数器的实体说明,描述外部接口情况PORT (CLK: IN STD_LOGIC; --50MHZ时钟输入CLOCK_50 引脚:PIN_N2M0: IN STD_LOGIC;--M0,M1分别指拨码开关SW0和SW1的输入引脚:PIN_N25 PIN_N26M1: IN STD_LOGIC;DATA_OUT1,DAT_OUT2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --作为数码管显示输入END ENTITY houmingzhen051;ARCHITECTURE BEHAV OF houmingzhen051 IS --以下部分是结构体说明SIGNAL CLK_1HZ: STD_LOGIC; --这里CLK_1Hz是分频时钟信号BEGINTEMP1:PROCESS(CLK)VARIABLE CNT1:INTEGER:=0;VARIABLE CNT2:INTEGER:=24999999;BEGIN --以下语句CNT1从0加到25MHz,在50MHz的时钟下需要0.5sIF CLK'EVENT AND CLK='1' THEN --然后CLK_1HZ取反,上升沿加下降沿正好等于一个时钟周期=1sIF (CNT1 = CNT2) THEN --从而得到分频时钟信号CNT1:=0;CLK_1HZ<=NOT CLK_1HZ;ELSECNT1:=CNT1+1;END IF;END IF;END PROCESS TEMP1;TEMP2:PROCESS(CLK_1HZ)VARIABLE C:INTEGER:=0; --这里定义过程变量C表示计数值,F,E 分别表示计数值的十位和个位VARIABLE E:INTEGER:=0;VARIABLE F:INTEGER:=0;BEGINIF(CLK_1HZ'EVENT AND CLK_1HZ='1') THENIF ( M0='0' AND M1='0') THEN --SW0和SW1都是低电平时为12进制计数器IF (C=11) THEN --计数值到11时,计数值C重新置0C:=0;ELSEC:=C+1; --从0计到11,得到12进制计数器END IF;ELSIF ( M0='0' AND M1='1') THEN --SW0=0,SW1=1的时候为24进制计数器IF (C=23) THENC:=0;ELSEC:=C+1;END IF;ELSIF ( M0='1' AND M1='0') THEN --SW0=1,SW1=0的时候为30进制计数器IF (C=29) THENC:=0;ELSEC:=C+1;END IF;ELSIF ( M0='1' AND M1='1') THEN --SW0=1,SW1=1,的时候为60进制计数器IF (C=59) THENC:=0;ELSEC:=C+1;END IF;E:= C REM 10; --求计数值的个位F:= C / 10; --求计数值的十位CASE E IS --显示个位译码操作WHEN 0=>DATA_OUT1<="1000000";WHEN 1=>DATA_OUT1<="1111001";WHEN 2=>DATA_OUT1<="0100100";WHEN 3=>DATA_OUT1<="0110000";WHEN 4=>DATA_OUT1<="0011001";WHEN 5=>DATA_OUT1<="0010010";WHEN 6=>DATA_OUT1<="0000010";WHEN 7=>DATA_OUT1<="1111000";WHEN 8=>DATA_OUT1<="0000000";WHEN 9=>DATA_OUT1<="0010000";WHEN OTHERS=>DATA_OUT1<="1111111";END CASE;CASE F IS --显示十位译码操作WHEN 0=>DATA_OUT2<="1000000";WHEN 1=>DATA_OUT2<="1111001";WHEN 2=>DATA_OUT2<="0100100";WHEN 3=>DATA_OUT2<="0110000";WHEN 4=>DATA_OUT2<="0011001";WHEN 5=>DATA_OUT2<="0010010";WHEN 6=>DATA_OUT2<="0000010";WHEN 7=>DATA_OUT2<="1111000";WHEN 8=>DATA_OUT2<="0000000";WHEN 9=>DATA_OUT2<="0010000";WHEN OTHERS=>DATA_OUT2<="1111111";END CASE;END IF;END IF;END PROCESS;END BEHAV;。

可变模计数器

可变模计数器

一、实验目的:1. 掌握用 VHDL 硬件描述语言做电路综合设计方法。

2. 熟悉掌握程序的编译、仿真、生成模块及芯片引脚号码锁定方法并下载到目标芯片。

二、实验仪器:ZY11EDA13BE 型实验箱三、实验内容及要求:1. 设计一个可变模计数器。

2. 设计一个可变模计数器, 计数器有 3个触发器构成, 在外部控制信号 S2和 S1的控制下分别实现模 3、模 5、模 7和模 8计数器,即(1 S2S1=00时,实现模 3计数,触发器的状态一次0→ 1→ 2→ 0;(2 S2S1=01时,实现模 5计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 0;(3 S2S1=10时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→ 0;(4 S2S1=11时,实现模 7计数,触发器的状态一次0→ 1→ 2→ 3→ 4→ 5→ 6→7→ 0; 并将结果输出到数码管上。

四实验程序二四译码部分LIBRARY IEEE;ENTITY M2_45 ISPORT(A: IN STD_LOGIC_VECTOR(1 DOWNTO 0; Y3,Y2,Y1,Y0: BUFFER STD_LOGIC;END M2_45;ARCHITECTURE A OF M2_45 ISSIGNAL SEL :STD_LOGIC_VECTOR(1 DOWNTO 0; SIGNAL QN :STD_LOGIC_VECTOR(2 DOWNTO 0; BEGINSEL(0<=A(0;SEL(1<=A(1;WITH SEL SELECTQN<="0001"WHEN"00", "0010"WHEN"01","0100"WHEN"10","1000"WHEN"11","0000"WHEN OTHERS;Y0<=QN(0;Y1<=QN(1;Y2<=QN(2;Y3<=QN(3;END A;模三部分LIBRARY IEEE;ENTITY MO3 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO3;ARCHITECTURE A OF MO3 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="010"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模五部分LIBRARY IEEE;ENTITY MO5 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO5;ARCHITECTURE A OF MO5 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="100"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模七部分LIBRARY IEEE;ENTITY MO7 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0 ;END MO7;ARCHITECTURE A OF MO7 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGIN PROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THENIF(QN="110"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;模八部分LIBRARY IEEE;ENTITY MO8 ISPORT(CP,EN:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(2 DOWNTO 0;END MO8;ARCHITECTURE A OF MO8 ISSIGNAL QN:STD_LOGIC_VECTOR(2 DOWNTO 0 ; BEGINPROCESS(CP,ENBEGINIF(EN='0'THENQN<="000";ELSIF(CP'EVENT AND CP='1'THEN IF(QN="111"THENQN<="000";ELSEQN<=QN+1;END IF;END IF;END PROCESS;Q<=QN;END A;动态扫描部分LIBRARY IEEE;ENTITY CTL ISPORT(CP:IN STD_LOGIC;MO3,MO5,MO7,MO8:IN STD_LOGIC_VECTOR(2 DOWNTO 0; SEL:IN STD_LOGIC_VECTOR(1 DOWNTO 0;COUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0;END CTL;ARCHITECTURE A OF CTL ISBEGINPROCESS(CPBEGINIF(CP'EVENT AND CP='1'THENCASE SEL ISWHEN "00"=>COUT<=MO3(2 DOWNTO 0;WHEN "01"=>COUT<=MO5(2 DOWNTO 0;WHEN "10"=>COUT<=MO7(2 DOWNTO 0;WHEN "11"=>COUT<=MO8(2 DOWNTO 0;WHEN OTHERS=>COUT<="000";END CASE;END IF;END PROCESS;END A;BCD 译码部分LIBRARY IEEE;ENTITY BCDYM ISPORT(D:IN STD_LOGIC_VECTOR(2 DOWNTO 0; Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0; END BCDYM;ARCHITECTURE QQ OF BCDYM ISBEGINPROCESS(DBEGINCASE D ISWHEN"000"=>Q<="0111111";WHEN"001"=>Q<="0000110";WHEN"010"=>Q<="1011011";WHEN"011"=>Q<="1001111";WHEN"100"=>Q<="1100110";WHEN"101"=>Q<="1101101";WHEN"110"=>Q<="1111101";WHEN"111"=>Q<="0000111";WHEN OTHERS=>Q<="0000000";END CASE;END PROCESS;END QQ;五实验电路图 MO3 CP INPUT VCC CP Q[2..0] EN 0. inst3 M2_45 A[1..0] INPUT VCC A[1..0] Y0 Y1 Y2 Y3 MO5 CP Q[2..0] EN CTL BCDY M D[2..0] CP MO3[2..0] MO5[2..0] inst11 COUT[2..0] Q[6..0] inst inst5 MO7[2..0] MO8[2..0]SEL[1..0] MO7 CP Q[2..0] EN inst10 Q[6..0] inst7 OUTPUT MO8 CP Q[2..0] EN inst8 //。

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

南昌大学实验报告
学生姓名:郑西冰学号:6100209045专业班级:电子091班
实验类型:□验证□综合□设计□创新实验日期:实验成绩:
实验二:模可变计数器
一、实验目的
1.学习一般的数字电路设计;
2.学习数码管的输出方法;
3.进一步熟悉Quartes II集成开发软件的使用以及PH-1V型实验装置的使用
二、实验要求
学习多层次设计法,设置一位控制位M,要求M=0:模24计数;M=1:模100计数;计数结果用静态数码管显示。

三、实验步骤:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FENP IS
PORT(CLK:IN BIT;
CLK1:BUFFER BIT);
END ENTITY;
ARCHITECTURE OO OF FENP IS
BEGIN
PROCESS(CLK)
V ARIABLE TEMP1: NA TURAL;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
TEMP1:=TEMP1+1;
IF TEMP1=400 THEN
TEMP1:=0;
CLK1<=NOT CLK1;
END IF;
END IF;
END PROCESS;
END;
将其转换成可调用元件:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entity cnt109 is
port(clk,rst,en,M:instd_logic;
cq,cqq,cqqq: out std_logic_vector (3 downto 0)) ;
end cnt109;
architecturebehav of cnt109 is
begin
process(clk,rst,en,M)
variable cq1:std_logic_vector (11 downto 0);
variable Z:std_logic_vector (11 downto 0);
begin
case M is
when '0' => Z:="000000100100";
when '1' => Z:="000100000000";
end case;
ifrst='1' then cq1:=(others=>'0');
elsifclk'event and clk='1' then
if en='1' then
if cq1<Z then
if cq1(7 downto 0) =153 then cq1:=cq1+103;
elsif cq1(3 downto 0)=9 then cq1:=cq1+7;
else cq1:=cq1+1;
end if;
else cq1 :=( others =>'0') ;
end if;
end if;
end if;
cq<=cq1( 3 downto 0);cqq<=cq1 ( 7 downto 4 ) ;cqqq<=cq1 ( 11 downto 8); end process;
endbehav;
将其转换成可调用元件:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entity scan is
port(clk: in std_logic;
num1,num2,num3:instd_logic_vector(3 downto 0); sel:outstd_logic_vector(2 downto 0);
num:outstd_logic_vector(3 downto 0));
end;
architecture behave of scan is
signal q:std_logic_vector(2 downto 0);
begin
process(clk)
begin
ifrising_edge(clk) then
if q="000" then num<=num1;sel<="000";q<=q+1;end if;
if q="001" then num<=num2;sel<="001";q<="111";end if;
if q="111" then num<=num3;sel<="010";q<=q+1;end if;
end if;
end process;
end behave;
将其转换成可调用元件:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DECL7S IS
PORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END DECL7S;
ARCHITECTURE one OF DECL7S IS
BEGIN
PROCESS(D)
BEGIN
CASE D IS
WHEN "0000"=>LED7S<="00111111"; WHEN "0001"=>LED7S<="00000110"; WHEN "0010"=>LED7S<="01011011"; WHEN "0011"=>LED7S<="01001111"; WHEN "0100"=>LED7S<="01100110"; WHEN "0101"=>LED7S<="01101101"; WHEN "0110"=>LED7S<="01111101"; WHEN "0111"=>LED7S<="00000111"; WHEN "1000"=>LED7S<="01111111"; WHEN "1001"=>LED7S<="01101111"; WHEN OTHERS=> NULL;
END CASE;
END PROCESS;
END ARCHITECTURE;
将其转换成可调用元件:
顶层文件
其引脚锁定如下:
对其进行整体仿真
实验现象及分析
当M接低电平,数码管在0—22循环,计数到23时,LED8亮一次;当M接高电平,数码管在0—108循环,计数到99时,LED8亮一次。

相关文档
最新文档