实验二含异步清零和同步使能的加法计数器
实验一2 含异步清0
1)根据DE2_pin_assignments文件内容、格式 已制作本设计引脚对应文件的引脚锁定文 件:CNT4B.csv 2) 由Assignments->Import Assignment,打开 对话框,调入引脚对应文件即可。
• 进行编译、下载,通过实验,检查引脚锁定是 否正确。
• 将波形文件存盘为CNT4B.vwf
• 设定CNT4B.v是目前的顶层文件
• 由Processing->start->start annlysis & elaboration对程序进行初步的分析
• 由view->utility window->node finder,得到 如下对话框,
Filter中选择Pins: all 然后按List得到输 入输出端口列表, 用鼠标将它们拖到 波形编辑窗口
• 将instance框中的名字改为CNT4B(选中右击选择Rename Instance)
• 为看清楚,按
,将窗口浮动
• 在CNT4B框双击(Double-click to add node), 弹出节点(noder)对话框,Filter项选择all, 然后点击List
选中要观察的端口COUT、OUTY然后单击>加 入,点OK。
功能仿真
• 由Processing->generate functional simulation netlist,提取功能仿真的网表 • 由assigments->settings,对仿真工具设定为 功能仿真,并将激gt; start simulation 进行功能仿 真,并对结果进行分析。
• 锁好引脚,进行全编译(compile),重新布 局布线,时序仿真 引脚锁定,仿真结果核对无误后,准备下载
如何使用QuartusII7.0
EDA实验技术文档含异步清0和同步时钟使能的4位加法计数器一、实验内容与实验原理利用Quartus II建立一个含计数使能、异步复位的4位加法计数器,并进行仿真测试和硬件测试。
由实验开发板上数字信号源Clock0提供一个输入为4Hz的时钟输入信号clk,由开发板上拨挡开关SW1控制计数使能端ena并由LED1指示,由核心板上SYS_RST按键控制复位端rst并由LED2指示,进位输出由LED3指示,计数值由数码管显示。
二、实验步骤1、使用Quartus II建立空白工程,然后命名为cnt_4b.qbf双击打开桌面上的Altera公司提供的Quartus II7.0(32-Bit)图标,显示如下软件界面;●选择菜单栏中File>>New Project Wizard来新建工程,点击后弹出新建工程向导对话框如下分别提示完成五项工作1)项目名称与保存路径2)顶层设计实体名称3)加入已有文件和相关库4)指定目标Altera器件封装和型号5)设置项目的其他EDA工具●单击Next进入如下图所示界面,并按图新建工程路径、名称、顶层实体在这里,工程名与顶层文件的实体名同名为cnt_4,文件夹所在路径名和文件夹名中不能用中文,不能用空格,不能用括号(),可以用下划线_或英文字母或数字,但最好也不要以数字开头。
●单击Next进入如下图所示界面,这里是添加已有相关工程文件,这里我们是建立空白工程,所以不需要添加任何文件●单击Next进入如下图所示界面,这一步是对所用实验核心板中FPGA器件进行设置,以确保代码顺利编译和下载。
MagicSOPC实验箱上的FPGA标配为:Altera公司CycloneII系列的EP2C35F672。
设置相关参数如图所示。
设置完成后,单击Next, 进入如下图所示界面,这里不需要设置其他EDA工具●再单击Next,出现如下图所示的工程信息报告对话框,提示设计者看到工程文件配置信息报告。
一、设计含异步清零和同步加载与时钟使能的计数器
实验1设计含异步清零和同步加载与时钟使能的计数器一实验目的1.熟悉QuartusII的VHDL文本设计流程全过程,学习计数器的设计与仿真2.掌握简单逻辑电路的设计方法与功能仿真技巧。
3.学习使用V AHDL语言进行含异步清零和同步加载与时钟使能的计数器的设计二实验仪器设备1.PC机,1台2.QuartusII系统三实验原理含计数使能、异步复位4位加法计数器,其中有锁存器、rst是异步清零信号,低电平有效;clk是锁存信号、当ena为1时使能锁存器。
四实验内容用VHDL语言设计一个含异步清零和同步加载与时钟使能的计数器,并进行编辑,编译与仿真。
要求(1)设计含有异步清零CLR和时钟使能端ENA。
(2)用D触发器设计带有上述功能的十进制的加法计数器。
(3)对于所设计的程序进行编译,检查纠错。
(4)程序完善之后进行程序的仿真并进行波形的记录与分析。
五实验参考程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN,LOAD: IN STD_LOGIC;DA TA:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT:OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK,RST,EN,LOAD)V ARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF RST='0' THEN Q:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF (LOAD='0') THEN Q:=DATA; ELSEIF Q<9 THEN Q:=Q+1;ELSE Q:= (OTHERS=>'0');END IF;END IF;END IF;IF Q="1001" THEN COUT<='1';ELSE COUT<='0'; END IF;DOUT <=Q;END IF;END PROCESS;END behav;六. 实验仿真图形。
EDA实验报告
湖北民族学院信息工程学院实验报告(电气、电子类专业用)班级: 09 姓名:周鹏学号:030940908 实验成绩:实验地点: EDA实验室课程名称:数字系统分析与设计实验类型:设计型实验题目:实验一简单的QUARTUSII实例设计,基于VHDL格雷码编码器的设计实验仪器:HH-SOC-EP3C40EDA/SOPC实验开发平台,PC机。
一、实验目的1、通过一个简单的3—8译码器的设计,掌握组合逻辑电路的设计方法。
2、初步了解QUARTUSII原理图输入设计的全过程。
3、掌握组合逻辑电路的静态测试方法。
4、了解格雷码变换的原理。
5、进一步熟悉QUARTUSII软件的使用方法和VHDL输入的全过程。
6、进一步掌握实验系统的使用。
二、实验原理、原理图及电路图3-8译码器三输入,八输出。
当输入信号按二进制方式的表示值为N时,输出端标号为N的输出端输出高电平表示有信号产生,而其它则为低电平表示无信号产生。
因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为高电平的情况下,能表示所有的输入组合。
其真值表如表1-1所示输入输出A B C D7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 0 1 00 1 0 0 0 0 0 0 1 0 00 1 1 0 0 0 0 1 0 0 01 0 0 0 0 0 1 0 0 0 01 0 1 0 0 1 0 0 0 0 01 1 0 1 0 0 0 0 0 01 1 1 1 0 0 0 0 0 0 0表1-1 三-八译码器真值表译码器不需要像编码器那样用一个输出端指示输出是否有效。
但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。
本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。
实验二含异步清0和同步使能的4位加法计数器
实验二含异步清0和同步使能的4位加法计数器一、实验目的:学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL技术。
二、原理说明:图2.1是一含计数使能、异步复位和计数值并行预置功能4位加法计数器,例2.1是其VHDL描述。
由图2-1所示,4位锁存器;rst是异步清0信号,高电平有效;clk是锁存信号;D[3..0]是4位数据输入端。
ENA是使能信号,当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将"0000"加载于锁存器。
图2-1含计数使能、异步复位和计数值并行预置功能4位加法计数器三、实验内容:1、在QuartusII上对例2-1进行编辑、编译、综合、适配、仿真。
说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
【例2-1】module CNT4B(CLK,RST,ENA,CLK_1,RST_1,ENA_1,OUTY,COUT);input CLK,RST,ENA;output CLK_1,RST_1,ENA_1;output[3:0] OUTY;output COUT;reg[3:0] OUTY;reg COUT;wire CLK_1;wire RST_1;wire ENA_1;assign CLK_1 = CLK;assign RST_1 = RST;assign ENA_1 = ENA;always@(posedge CLK or negedge RST)beginif(!RST)beginOUTY<=4'b0000;COUT<=1'b0;endelseif(ENA)beginOUTY<=OUTY+1;COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3];endendendmodule2保存计数器程序为CNT4B.vhd,进行功能仿真、全编译、时序仿真,如出现错误请按照错误提示进行修改,保证设计的正确性3锁定引脚4下载采用JATG方式进行下载,通过ENA,CLK,RST输入,观察的LEDR[0],LEDR[7],LEDR[8],LEDR[9],LEDR[10],LEDG[0],LEDG[1],LEDG[8]亮灭验证计数器的逻辑功能。
设计含异步清零和同步使能的加法计数器
实验二设计含异步清零和同步使能的加法计数器1.实验目的学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
2.实验内容或原理在Quartus II 上对源程序进行编辑、编译、综合、适配、仿真。
说明源程序各语句的作用,详细描述其功能特点,给出其所有信号的时序仿真波形。
RST为异步清零信号,高电平有效;CLK是锁存信号;EN为计数使能信号。
当时钟信号CLK、复位信号RST或时钟使能信号EN中任一信号发生变化,都将启动进程语句PROCESS。
此时如果RST为‘1’,将对计数器清零,即复位,这项操作是独立于CLK的,因而称异步。
3.实验仪器(1)GW48系列SOPC/EDA实验开发系统(2)配套计算机及Quartus II 软件4.实验步骤(1)完成含异步清零和同步使能的加法计数器的VHDL描述,并对其进行波形仿真,确定结果正确。
(2)建议选择实验电路模式5对该设计进行硬件验证。
5. VHDL仿真实验(1)为此工程新建一个文件夹。
启动QuartusII软件工作平台,新建工程设计文件名为CNT10.vhd。
在新建的VHDL模型窗口下编写源程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT (CLK,RST,EN: IN STD_LOGIC;CQ: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT: OUT STD_LOGIC);END CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS(CLK,RST,EN)V ARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1'THEN CQI := (OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1'THENIF EN='1'THENIF CQI<9 THEN CQI :=CQI+1;ELSE CQI :=(OTHERS=>'0');END IF;END IF;END IF;IF CQI=9 THEN COUT<='1';ELSE COUT<='0';END IF;CQ<=CQI;END PROCESS;END behav;(2)创建工程及全程编译。
含异步清零和同步时钟使能的4位加法器
含异步清零和同步时钟使能的4位加法器宁波⼯程学院电信学院EDA系统设计与实践实验报告实验名称含异步清零和同步时钟使能的4位加法器班级电科(系统设计)08-2 姓名学号 0840*******组员姓名实验⽇期2011-5-12指导⽼师实验四含异步清零和同步时钟使能的4位加法器⼀.实验⽬的学习计数器的设计,仿真和硬件测试。
进⼀步熟悉VHDL的编程⽅法。
⼆.实验内容本实验的内容是Quartus 11建⽴⼀个含计数使能、异步复位的4位加分计数器,SmartSOPC试验箱上进⾏硬件测试,由KEY1控制技术使能端ena并由LED指⽰,KEY2控制复位端rst并由LED2指⽰。
计数值由数码管指⽰。
三.实验原理Rst是异步清零信号,⾼电平有效。
Ema为是能端,能开始与暂停程序,当ena为0时,能所存信号。
四.实验步骤(1)破解Quartus 11;(2)建⽴⼯程:启动Quartus 11,建⽴空⽩⼯程。
命名为giui;(3)创建源程序⽂件:新建VHDL源程序⽂件giui,输⼊程序代码并保存,进⾏编译,若在编译过程中发现错误,则找出并更正,直⾄编译成功。
(4)编译并运⾏:编译并运⾏程序或者原理图,编译⽆误后,进⾏引脚锁定;(5)外部连接⽅式跟第2节相似。
五.实验程序⼀.在⼀个数码管上显⽰0~Flibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity giui isport(clk48:in std_logic;key_2bit:in std_logic;dig_4bit:out std_logic_vector(3 downto 0);seg:out std_logic_vector(7 downto 0));end giui;architecture m1 of giui issignal num1:std_logic_vector(3 downto 0);signal cnt:std_logic_vector(23 downto 0);signal t: std_logic;signal q:std_logic;beginfre:process(clk48,cnt)beginif clk48'event and clk48='1' thencnt<=cnt+1;end if;q<=cnt(23);end process fre;coun:process(q)beginif q'event and q='1' thenif t='1' then num1<="0000";elsenum1<=num1+1;end if;end if;end process;SEG<= "11000000" when num1="0000" else "11111001" when num1="0001" else "10100100" when num1="0010" else"10110000" when num1="0011" else"10011001" when num1="0100" else"10010010" when num1="0101" else"10000010" when num1="0110" else"11111000" when num1="0111" else"10000000" when num1="1000" else"10010000" when num1="1001" else"10001000" when num1="1010" else"10000011" when num1="1011" else"01000110" when num1="1100" else"10100001" when num1="1101" else"10000110" when num1="1110" else"11111111";dig_4bit<="1110" when t='1' else"1111" when t='0';end m1;⼆.4位加法器Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sun_adder isport(clk:in std_logic;key:in std_logic;led1:out std_logic;dig:out std_logic_vector(3 downto 0);seg:out std_logic_vector(7 downto 0)); end sun_adder;architecture a of sun_adder issignal tmp:std_logic_vector(23 downto 0); signal tmp1:std_logic_vector(10 downto 0); signal address,pp:std_logic_vector(3 downto 0); signal p:std_logic_vector(1 downto 0);signal tt,t,q,q1: std_logic;signal num1,num2,num3,num4:std_logic_vector(3 downto 0);beginprocess(clk)beginif clk'event and clk='1' then tmp<=tmp+1;tmp1<=tmp1+1;end if;end process;q<=tmp(23);q1<=tmp1(10);process(q1)beginif q1'event and q1='1' then case p iswhen "00"=>pp<="1110";when "01"=>pp<="1101";when "10"=>pp<="1011";when others=>pp<="0111";end case;dig<=pp;case pp iswhen "1110"=>address<=num1;when "1101"=>address<=num2;when "1011"=>address<=num3;when others=>address<=num4;end case;p<=p+1;end if;end process;process(key)beginIf key'event and key='1' thent<= not t;end if;end process;process(q)beginif q'event and q='1' thenif t='1' then num1<="0000";num2<="0000";num3<="0000";num4<="0000";else num1<=num1+1;if num1="1001" then num1<="0000";tt<='1';if num2="1001" then num2<="0000";if num3="1001" then num3<="0000";if num4="1001" then num4<="0000";else num4<=num4+1; end if;else num3<=num3+1; end if;else num2<=num2+1; `1212212345123451233123`12341234123412341312end if; else num1<=num1+1;tt<='0'; end if; end if;end if;end process;seg<= "11000000" when address="0000" else"11111001" when address="0001" else"10100100" when address="0010" else"10110000" when address="0011" else"10011001" when address="0100" else"10010010" when address="0101" else"10000010" when address="0110" else "11111000" when address="0111" else "10000000" when address="1000" else "10010000" when address="1001" else "11111111";led1<='0' when tt='1' else'1' when tt='0';end a;六.实验现象。
设计含异步清零和同步加载与时钟使能的计数器
4-1 设计含异步清零和同步加载与时钟使能的计数器(1)实验目的:熟悉Quartus Ⅱ的VHDL文本设计流程全过程,学习计数器的设计,仿真和硬件测试。
掌握原理图与文本混合设计方法。
(2)实验原理:参考3.4节。
实验程序为例3-20。
(3)实验内容1:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt10 ISPORT (CLK,RST,EN,LOAD : IN STD_LOGIC;DATA : IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END cnt10;ARCHITECTURE behav OF cnt10 ISBEGINPROCESS (CLK, RST, EN, LOAD)V ARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='0' THEN Q := (OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF (LOAD='0') THEN Q := DATA; ELSEIF Q<9 THEN Q := Q + 1;ELSE Q := (OTHERS=>'0');END IF;END IF;END IF;END IF;IF Q = "1001" THEN COUT <= '1';ELSE COUT <= '0';END IF;DOUT <= Q;END PROCESS;END behav;实验内容2:(4)实验结果:实验内容1的时序仿真切图:实验内容2的时序仿真切图:。
异步清零和同步时钟使能的4位加法计数器
Error (10482): VHDL error at CNT4.vhd(18): object "COUNT" is used but not declared异步清零和同步时钟使能的4位加法计数器一、实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。
二、实验原理本试验中所要设计的计数器,由4位带异步清零的加法计数器和一个4位锁存器组成。
其中,rst是异步清零信号,高电平有效;clk是计数时钟,同时也是锁存信号;ENA为计数器输出使能控制。
当ENA为‘1’时,加法计数器的输出值加载于锁存器的数据端,;当ENA为‘0’时锁存器输出为高阻态。
当计数器输出“1111”时,进位信号COUT为“1”。
三、实验内容1)画出该计数器的实体框图02)用VHDL语言完成上述计数器的行为级设计。
------------------------------------------------------------------------------------------------------- 程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4 ISPORT (RST,CLK,ENA:IN STD_LOGIC;COUT: OUT STD_LOGIC;OUTY :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CNT4;ARCHITECTURE behv OF CNT4 ISBEGINPROCESS (RST,ENA,CLK)VARIABLE CQI :STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1' THEN CQI :=(OTHERS =>'0');ELSIF CLK'EVENT AND CLK='1' THENIF ENA ='1' THENIF CQI < 15 THEN CQI:=CQI+1;ELSE CQI :=(OTHERS =>'0');END IF;END IF;END IF;IF CQI =15 THEN COUT<='1';ELSE COUT <='0';END IF;OUTY <=CQI;END PROCESS;END behv;3)用QuartusII对上述设计进行编译、综合、仿真,给出其所有信号的仿真波形和时序分析数据。
实验二含异步清零和同步使能的加法计数器
实验二含异步清零和同步使能的加法计数器一、实验目的1、了解二进制计数器的工作原理。
2、进一步熟悉QUARTUSII软件的使用方法和VHDL输入。
3、时钟在编程过程中的作用。
二、实验原理二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。
在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。
其工作时序如图3-1所示:图3-1 计数器的工作时序三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。
实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关K1表示使能端信号,用复位开关S1表示复位信号,用LED模块的LED1~LED11来表示计数的二进制结果。
实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。
通过输入不同的值模拟计数器的工作时序,观察计数的结果。
实验箱中的拨动开关、与FPGA的接口电路,LED灯与FPGA的接口电路以及拨动开关、LED与FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
数字时钟信号模块的电路原理如图3-2所示,表3-1是其时钟输出与FPGA的管脚连接表。
图3-2 数字时钟信号模块电路原理信号名称对应FPGA管脚名说明DIGITAL-CLK A14数字时钟信号送至FPGA的A14表3-1 数字时钟输出与FPGA的管脚连接表按键开关模块的电路原理如图3-3所示,表3-2是按键开关的输出与FPGA的管脚连接表。
图3-3 按键开关模块电路原理信号名称FPGA I/O名称核心板接口管脚号功能说明S[0]PIN_AF5JP1_91‘S1’ SwitchS[1]PIN_AH6JP1_93‘S2’ SwitchS[2]PIN_AH7JP1_95‘S3’ SwitchS[3]PIN_AH8JP1_97‘S4’ SwitchS[4]PIN_AG10JP1_99‘S5’ SwitchS[5]PIN_AG11JP1_101‘S6’ SwitchS[6]PIN_AH14JP1_90‘S7’ SwitchS[7]PIN_AG7JP1_92‘S8’ Switch表3-2 按键开关与FPGA的管脚连接表四、实验步骤1、打开QUARTUSII软件,新建一个工程。
设计含异步清零和同步时钟使能的加法计数器
附表1:广州大学学生实验报告开课学院及实验室:物理与电子工程学院-电子楼317室2016年 4 月21 日学院物电年级、专业、班姓名Jason.P 学号实验课程名称EDA技术实验成绩实验项目名称设计含异步清零和同步时钟使能的加法计数器指导教师一、实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VerilogHDL设计技术。
二、实验内容:含异步清0和同步时钟使能的4位加法器(1)实验原理:上图是一含计数使能、异步复位的4位加法计数器,书中例3-15是其VerilogHDL描述。
由图2-1所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3:0]是4位数据输入端。
当ENA为‘1’时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为‘0’时保持上一次的输出。
(2)实验步骤:(2)-1按照发给大家的文件“Quartus II 9.0基本设计流程-VerilogHDL.ppt”所讲述的步骤,在QuartusII上对例3-15(第四版)(第五版p124例5-15)进行编辑、编译、综合、适配、仿真。
说明例2-1各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。
(2)-2引脚锁定以及硬件下载测试:若目标器件是EP3C40Q240C8N,建议选实验电路模式5,用键8(PIO7)控制RST;用键7控制ENA;计数溢出COUT接发光管D8;OUTY是计数输出接数码1;时钟CLK接clock2,通过跳线选择4Hz信号。
引脚锁定后进行编译、下载和硬件测试实验。
将实验过程和实验结果写进实验报告。
三、实验HDL描述:module CNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA)input CLK,EN,RST,LOAD; //定义输入信号input[3:0] DATA; //定义4位的并行加载数据DATAoutput[3:0] DOUT; //定义4位的计数输出数据DOUToutput COUT; //定义进位输出信号COUTreg[3:0] Q1; //定义4位的寄存器型中间变量Q1reg COUT;assign DOUT = Q1; //将内部寄存器的计数结果输出至DOUTalways @(posedge CLK or negedge RST) //时序过程beginif(!RST) Q1 <= 0; //RST=0时,对内部寄存器单元异步清0else if(EN)begin //同步使能EN=1,则允许加载或计数if(!LOAD) Q1 <= DATA; //当LOAD=0,向内部寄存器加载数据else if(Q1<9) Q1 <=Q1+1; //当Q1小于9时,允许累加else Q1 <=4'b0000; //否则一个时钟后清零返回初值endendalways @(Q1) //组合过程if (Q1==4'h9) COUT = 1'b1;else COUT = 1'b0;endmodule四、仿真结果:图1图2由图1的时序波形可见,当EN=0时,DOUT的输出数据3保持了一段时间;当EN=1,且在时钟CLK的上升沿时间范围LOAD=0时,4位输入数据DATA=0被加载,在LOAD=1后作为计数器的计数初值(图1);当EN=1,LOAD=1时,输入的数据不被加载;RST在任意时刻均有效,即使CLK非上升沿时,计数也能即刻清0(图2:计数到3后清0);当计数到9时,COUT输出进位1,如图2所示。
加法计数器和分频器的设计电信
利用Verilog HDL设计
• 利用Verilog HDL方式设计含异步清零和同步使能的加法计数器 • 程序请自行查找或者设计, 1. clk:FPGA时钟信号,硬件接数字时钟CLOCK4,并将这组时钟 设 为1HZ。 2. rst:计数复位信号,硬件接一个按键开关K1。 3. en:计数使能信号,硬件接一个拨动开关S1。 4. cq:计数进位信号,硬件接一个LED灯D8。 5. cout:计数输出,硬件接四个连续的LED灯D1-D4。 • 进行波形仿真 • 将仿真波形存储下来 • 生成符号文件 • 保存本次实验结果,待下次实验使用
数控分频器设计原理ຫໍສະໝຸດ 求• 数控分频器的功能就是当输入端给定不同 的输入数据时,将对输入的时钟信号有不 同的分频比,数控分频器就是用计数值可 并行预置的加法计数器来设计完成的,方 法是将计数溢出位与预置数加载输入信号 相接得到。
利用Verilog HDL设计
• 利用Verilog HDL方式设计含异步清零和同步使能的加法 计数器 • 程序请自行查找或者设计, 1. inclk:FPGA时钟信号,硬件接数字时钟CLOCK3,并将 这组时钟设为1464HZ。 2. data[7:0]:分频数据输入信号,硬件分别接拨动开关的 S7-S1。 3. fout:分频输出信号,硬件接一个LED灯LED1。 • 进行波形仿真 • 将仿真波形存储下来 • 生成符号文件 • 保存本次实验结果,待下次实验使用
异步清零和同步使能的加法计数器 设计原理要求
• 在时钟上升沿的情况下,检测使能端是否允许计数,如果 允许计数(定义使能端高电平有效)则开始计数,否则一 直检测使能端信号。在计数过程中再检测复位信号是否有 效(低电平有效),当复位信号起作用时,使计数值清零, 继续进行检测和计数。其工作时序如图所示:
含异步清零和同步时钟使能的加法计数器设计
广州大学学生实验报告实验室:电子信息楼 317EDA 2017 年 9月 18 日学院机电学院年级、专业、班电信151姓名苏伟强学号51实验课程名称可编程逻辑器件及硬件描述语言成绩实验项目名称实验2 含异步清零的同步时钟使能控制的加法计数器指导老师秦剑一实验目的a)学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术;二实验原理图是一含计数使能、异步复位的4位加法计数器,例2-1是其VHDL描述。
图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3:0]是4位数据输入端。
当ENA为‘1’时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为‘0’时保持上一次的输出。
三实验设备a)FPGA实验箱,Cyclone III EP3C40Q24C08四实验内容和结果a)编程根据实验原理编程VHDL,rst是异步清信号,高电平有效;clk是锁存信号;CQ[3:0]是计数输出端,COUT 是进位输出。
上升沿计数,在计数到1111的时候进位(这里判断CQI的所有位为1时进位,表示计数到top 值),清零,继续计数,将进位数据锁存在COUT端,不断更新。
可以看到在进程中,首先判断rst信号是否为1,为1的话进行置位,优先级最高而且不受时钟信号控制(放在以时钟边沿测试表述clock’event and clock=’1’为条件语句的if语句以外),是异步置位。
b)波形仿真新建波形仿真文件,文件名和实体名称保持一致,可以看到,使能信号为1,在时钟信号的上升沿计数加一,如果有置位信号,则产生异步置位(置位最优先),计数到1111top值,进位并且自动清零,符合设计。
c)引脚锁定和硬件调试进入assignmen->assignment edit,category选择location,alt+1调出node finder,调出信号进行引脚绑定,引脚绑定的时候注意查看芯片引脚手册。
设计含异步清零同步使能的38进制加法计数器
一、实验题目:设计一个含异步清零同步使能38进制加法计数器。
二、实验目的:通过实践学习计数器的设计、仿真和硬件调试,进一步熟悉VHDL设计技术。
三、实验要求及设计思路:能熟练利用软件来设计计数器并通过实验来掌握计数器的工作原理。
本实验首先利用QuartusⅡ完成38进制计数器的文本编辑输入和仿真测试等步骤并给出仿真波形,最后在实验系统上验证此设计的功能。
四、实验程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT38 ISPORT (CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT38;ARCHITECTURE behav OF CNT38 ISBEGINPROCESS (CLK,RST,EN)VARIABLE CQI:STD_LOGIC_VECTOR(6 DOWNTO 0);BEGINIF RST='1' THEN CQI:= (OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF CQI<37 THEN CQI:=CQI+1;ELSE CQI:=(OTHERS=>'0');END IF;END IF;END IF;IF CQI=37 THEN COUT<='1';ELSE COUT<='0';END IF;CQ<=CQI;END PROCESS;END behav;五、功能仿真时序图与硬件电路图:六、设计总结:略。
含异步清0和同步时钟使能的4-位加法计数器-报告
含异步清0和同步时钟使能的4-位加法计数器-报告-CAL-FENGHAI.-(YICAI)-Company One1EDA设计课程实验报告实验题目:含异步清0和同步时钟使能的4 位加法计数器学院名称:专业:班级:姓名:高胜学号小组成员:指导教师:一、实验目的学习计数器的设计,仿真和硬件测试,进一步熟悉VHDL 的编程方法。
二、设计任务及要求1.设计总体要求:利用Quartus II建立一个含技术使能、异步复位的4位加法计数器,在SmartSOPC试验箱上进行硬件测试,由KEY1控制技术使能端ena并由LED1指示,KEY2控制复位端rst 并由LED2指示。
计数值由数码管指示。
2.设计基本要求:(1)进行正常的加法计数功能。
(2)由四个数码管显示其计数情况。
三、系统设计1、整体设计方案含异步清零与同步时钟使能计数器由译码显示电路、脉冲发生电路和16进制计数器这3个基本电路组成的。
此次设计要实现的功能有:正常的计数,异步清零,同步使能功能。
整体设计系统框图如图1所示:图1 含异步清零与同步时钟使能计数器系统结构图2、功能模块电路设计(1)各模块设计:译码显示电路模块框图(见图2):图2 译码显示电路系统输入输出模块框图脉冲发生电路模块框图(见图3):图3 秒脉冲发生电路系统输入输出模块框图16位进制计数电路系模块框图(见图4):图4 16位进制计数电路系统输入输出模块框图秒脉冲发生电路产生脉冲输入到16位计数器电路,计数器电路响应脉冲计数然后将计数响应输入到译码显示电路,译码显示电路响应,这时实验箱上8个数码管的后4位将进行从0到F计数的循环显示。
整体输入输出模块框图(见图5):图5 含异步清零与同步时钟使能计数器系统输入输出模块框图(2)模块逻辑表达(见表一和表二)功能 clk rst ena dout[3:0] 异步清零 X 0 X 0 0 0 0表一 16进制计数器的真值表表二译码显示电路的真值表(3)算法流程图译码显示电路流程图(见图6):图6 译码显示电路算法流程图16位计数器流程图(见图7):图7 16位计数器电路算法流程图(4)Verilog源代码译码显示电路代码:module dec(d,seg,dig); //定义模块名与输入输出input[3:0] d;output[7:0] seg;output[3:0] dig; //定义输入输出与数据类型reg[7:0] seg_r; //定义一个reg类型数据assign dig=4'b0000; //给dig赋值0assign seg=seg_r; //将reg类型数据与wire类型数据进行转换always @(d) //检测目标信号dbegincase(d) //case语句,目标公式为d4'b0000:seg_r=8'hc0; //当4位的d数据变化时对应的rge数据类型的seg_r数值4'b0001:seg_r=8'hf9;4'b0010:seg_r=8'ha4;4'b0011:seg_r=8'hb0;4'b0100:seg_r=8'h99;4'b0101:seg_r=8'h92;4'b0110:seg_r=8'h82;4'b0111:seg_r=8'hf8;4'b1000:seg_r=8'h80;4'b1001:seg_r=8'h90;4'b1010:seg_r=8'h88;4'b1011:seg_r=8'h83;4'b1100:seg_r=8'hc6;4'b1101:seg_r=8'ha1;4'b1110:seg_r=8'h86;4'b1111:seg_r=8'h8e;default:seg_r=8'h0; //其余d的显示的数据seg_r显示为0endcase //结束case语句end //结束always语句endmodule //结束程序16进制计数器电路代码:module jsqt(clk,rst,ena,dout); //定义模块名与输入输出input clk,rst,ena;output[3:0] dout; //定义输入输出与数据类型reg[3:0] dout_r; //定义一个reg数据类型assign dout=dout_r; //将reg类型数据与wire类型数据进行转换always @(posedge clk or negedge rst) //检测目标信号时钟或异步信号beginif(rst==0) //检测信号rst是否恒等于0dout_r=4'b0000; // 给reg数据类型的dout_r赋值0else if(ena==1) //检测信号ena是否恒等于1dout_r=dout_r+1; //数据dout_r加1end //结束always语句endmodule //结束程序四、系统调试1、仿真调试(1)仿真代码译码显示电路仿真代码:`timescale 1ns/1nsmodule dec_tp; //测试模块的名字reg[3:0] d; //测试输入信号定义为reg型wire[7:0] seg; //测试输出信号定义为wire型wire[3:0]dig; //测试输出信号定义为wire型parameter DELY=100; //延时100秒dec u1(d,seg,dig); //调用测试对象assign dig=4'b0000; //给dig赋值0initial begin //激励波形设定d=4'b0;#DELY d=4'b0001;#DELY d=4'b0010;#DELY d=4'b0011;#DELY d=4'b0100;#DELY d=4'b0101;#DELY d=4'b0110;#DELY d=4'b0111;#DELY d=4'b1000;#DELY d=4'b1001;#DELY d=4'b1010;#DELY d=4'b1011;#DELY d=4'b1100;#DELY d=4'b1101;#DELY d=4'b1110;#DELY d=4'b1111;#DELY $finish;endinitial $monitor($time,,,"seg=%d,dig=%d,d=%b",seg,d,dig); //输出格式i定义endmodulemodule dec(d,seg,dig); //命名模块名字input[3:0] d;output[7:0] seg;output[3:0] dig; //定义输入与输出reg[7:0] seg_r; // 定义seg_r的reg型数据assign dig=4'b0000; //给dig赋值0assign seg=seg_r; //将reg型数据转化为wire型数据always @(d) //检测d的数据是否变化begincase(d) //七段译码4'b0000:seg_r = 8'hc0; //显示04'b0001:seg_r = 8'hf9; //显示14'b0010:seg_r = 8'ha4; //显示24'b0011:seg_r = 8'hb0; //显示34'b0100:seg_r = 8'h99; //显示44'b0101:seg_r = 8'h92; //显示54'b0110:seg_r = 8'h82; //显示64'b0111:seg_r = 8'hf8; //显示74'b1000:seg_r = 8'h80; ///显示84'b1001:seg_r = 8'h90; //显示94'b1010:seg_r = 8'h88; //显示a4'b1011:seg_r = 8'h83; //显示b4'b1100:seg_r = 8'hc6; //显示c4'b1101:seg_r = 8'ha1; //显示d4'b1110:seg_r = 8'h86; //显示e4'b1111:seg_r = 8'h8e; ///显示fendcase //结束case语句end //结束always语句endmodule //结束程序16进制计数器仿真代码:`timescale 1ns/1nsmodule jsqt_tp; //测试模块的名字reg clk,rst,ena; //测试输入信号定义为reg型wire[3:0] dout; //测试输出信号定义为wire型parameter DELY=100; //延时100秒jsqt u1(clk,rst,ena,dout); //调用测试对象initial begin //激励波形设定clk=0;rst=1;ena=1;#DELY clk=1;rst=1;ena=1;#DELY clk=0;rst=1;ena=1;#DELY clk=1;rst=1;ena=1;#DELY clk=0;rst=1;ena=1;#DELY clk=1;rst=1;ena=1;#DELY clk=0;rst=1;ena=1;#DELY clk=1;rst=1;ena=1;#DELY clk=0;rst=1;ena=1;#DELY $finish;endinitial$monitor($time,,,"dout=%d,rst=%b,ena=%b,clk=%b",dout,rst,ena,clk); //输出格式i定义endmodulemodule jsqt(clk,rst,ena,dout); //定义模块名与输入输出input clk,rst,ena;output[3:0] dout; //定义输入输出与数据类型reg[3:0] dout_r; //定义一个reg数据类型assign dout=dout_r; //将reg类型数据与wire类型数据进行转换always @(posedge clk or negedge rst) //检测目标信号时钟或异步信号beginif(rst==0) //检测信号rst是否恒等于0dout_r=4'b0000; // 给reg数据类型的dout_r赋值0else if(ena==1) //检测信号ena是否恒等于1dout_r=0; //给dout_r赋初值dout_r=dout_r+4’b1; //数据dout_r加1end //结束always语句endmodule //结束程序(2)仿真波形图译码显示仿真波形图(见图8):图8 译码显示部分仿真波形图16进制计数器仿真波形图(见图9):图9 16进制计数器仿真波形图(3)波形分析由图6-1与图6-2可以看出给4位dig赋值0,每延迟100秒可以看见4位的d变化与8位seg产生的数据与代码上的编程相符合。
设计含异步清零和同步时钟使能的加法计数器.doc
设计含异步清零和同步时钟使能的加法计数器.doc加法计数器是一种常见的数字电路,它可以用于计数器、频率分频等应用。
本文将介绍一种具有异步清零和同步时钟使能的加法计数器的设计方法。
一、电路原理加法计数器由若干个触发器组成,每个触发器的输出连接到下一个触发器的时钟端。
当计数器接受到一个时钟信号时,每个触发器的状态将根据前一个触发器的状态和时钟信号发生变化,从而实现计数的功能。
本文介绍的加法计数器还包含了异步清零和同步时钟使能功能,它们分别被连接到清零端和时钟端。
当清零端接受到一个高电平信号时,计数器的状态将被清零;当时钟端接受到一个高电平信号时,计数器将在时钟上升沿时计数。
二、电路实现本文中的加法计数器由4个D触发器和一些逻辑门组成,如图所示。
其中,D触发器的输入资源于四个运算器之中,运算器分别为。
①.异或门(XOR):将A,B两个数字按位异或,当两个输入不同时,输出为1;当两个输入相同时,输出为0。
②.与非器(NAND):将AB两个输入同时取反再进行与运算,输出为非AB的结果。
在加法计数器中,D触发器的输入端连接到异或门,异或门的两个输入端分别连接到计数器输入和进位信号。
同时,计数器输出也会连接到一个4位数显。
逻辑门的输出信号会被连接到触发器的时钟控制端或清零控制端,从而实现对计数器状态的控制。
三、时序分析1.异步清零当异步清零端接受到一个高电平信号时,计数器的状态将被清零。
具体来说,所有触发器的输出都将被强制为低电平信号。
这种操作可以通过将清零信号连接到每个D触发器的清零输入实现。
2.同步时钟使能当同步时钟使能端接受到高电平信号时,计数器只在时钟上升沿时计数。
这种操作可以通过将时钟使能信号连接到所有D触发器的时钟输入实现。
具体来说,当A和B两个输入都为0时,输出为0;当A和B两个输入都为1时,输出为0;当A和B两个输入中有一个为1时,输出为1。
四、总结本文介绍了一种具有异步清零和同步时钟使能的加法计数器的设计方法。
含异步清和同步时钟使能的位加法计数器
题目含异步清0和同步时钟使能的4位加法计数器原理说明实验图1是一含计数使能,异步复位和计数值并行预置功能4位加法计数器,由实验图1所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3..0]是4位数据输入端.当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将"0000"加载于锁存器.V H D L 程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4B ISPORT (CLK : IN STD_LOGIC; ——CLK为标准的逻辑类型输入端口RST : IN STD_LOGIC; ——RST为标准的逻辑类型输入端口ENA : IN STD_LOGIC; ——ENA为标准的逻辑类型输入端口OUTY : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END CNT4B;ARCHITECTURE behav OF CNT4B ISSIGNAL CQI : STD_LOGIC_VECTOR( 3 DOWNTO 0 );BEGINP_REG: PROCESS( CLK, RST, ENA )BEGINIF RST = '1' THEN CQI <= "0000";ELSIF CLK'EVENT AND CLK = '1' THENIF ENA = '1' THEN CQI <= CQI + 1;ELSE CQI <= "0000";END IF;END IF;OUTY <= CQI ;END PROCESS P_REG ; ——进位输出COUT <= CQI(0) AND CQI(1) AND CQI(2) AND CQI(3); --END behav;波形图结果分析引脚锁定以及硬件下载测试.建议选实验电路模式6,用数码8显示译码输出(PIO46--PIO40),键8,键7,键6,键5四位控制输入,硬件验证译码器的工作性能.注意,在仿真中,4位输入A必须用总线方式给数据.将仿真波形。
带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计实验
带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计实验一、实验题目:带有异步复位、同步计数使能和可预置型十进制计数器的verilog设计。
二、实验目的:讨论学习经典数字计数器的Verilog描述方法和相关语法。
三、实验程序:module CNT10(CLK,RST,EN,LOAD,COUT,DOUT,DATA);input CLK,RST,EN,LOAD;input [3:0] DATA;output [3:0] DOUT;output COUT;reg [3:0] Q1;reg COUT;assign DOUT=Q1;always @(posedge CLK or negedge RST)beginif(!RST) Q1<=0;else if(EN)beginif(!LOAD) Q1<=DATA;else if(Q1<9) Q1<=Q1+1;else Q1<=4'b0000;endendalways @(Q1)if(Q1==4'h9) COUT=1'b1;else COUT=1'b0;endmodule四、实验仿真结果:五、仿真结果分析:(1)RST在任意时刻有效时,如CLK非上升沿时,计数也能清0。
(2)当EN=1,且在时钟CLK的上升沿时间范围LOAD=0时,4位输入数据DATA=0100被加载,在LOAD=1后作为计数器的计数初值,如图所示计数从0000加载到0100的时序。
计数到9时,COUT输出进位1。
(3)当EN=,LOAD=1,RST=1时,计数正常进行,在计数数据等于9时进位输出高电平。
另外,凡当计数从7计到8时有一毛刺信号,这是因为7到8的逻辑变化最大,每一位都发生了改变,导致各位信号传输路径不一致性增大。
六、硬件下载设置及测试过程:根据板子给定的引脚锁定图,选定相应的硬件把程序中的输入输出端和板子的相应引脚给锁定,编译并下载程序,定好DATA,选择合适的CLK,手动改变EN和LOAD的值,观察实验现象看是否符合程序的结果。
含异步清0和同步时钟使能的4位加法计数器
含异步清0和同步时钟使能的4位加法计数器含异步清0和同步时钟使能的4位加法计数器⼀、实验⽬的学习计数器的设计、仿真和硬件测试,进⼀步熟悉VHDL的编程⽅法⼆、实验内容本实验的内容是QuartusII建⽴⼀个含计数使能、异步复位的4位加法计数器,并执⾏仿真测试。
最后在SmartSOPC实验箱上进⾏硬件测试,有KEY1控制计数使能端ENA并有LED1指⽰,KEY2控制复位端并由LED2指⽰。
进位输出有LED8指⽰,计数值由数码管指⽰。
时钟CLK有分频模块int-div分频得到4HZ的信号。
三、实验原理实验图是⼀含计数使能、异步复位和计数值并⾏预置功能4位加法计数器,例1是其VHDL描述。
由实验图所⽰,图中间是4位锁存器;rst 是异步清信号,⾼电平有效;clk是锁存信号;D[3..0]是4位数据输⼊端。
当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将"0000"加载于锁存器。
四、实验步骤(1)启动QuartusII建⽴⼀个空⽩⼯程,然后命名为cnt-4b.qbf。
(2)新建VHDL源程序⽂件cnt4b.vhd,输⼊程序代码并保存,进⾏综合编译,若在编译过程中发现错误,则找出并更正错误,直到编译成功为⽌。
(3)建⽴波形仿真软件并进⾏仿真验证。
(4)将光盘中EDA⽬录下的int-div.bsf、int-div.vhd和decl7s.bsf、decl7s.vhd(5)新建图形设计⽂件(顶层模块)命名为cnt-4b.bdf并保存。
(6)选择⽬标器件并对相应的引脚进⾏锁定,在这⾥所选择的器件为Altera公司的Cyclone系列的EP1C12Q240C8芯⽚,引脚锁定⽅法如图,将未使⽤管脚设置为三态输⼊(⼀定要设置,否则可能会损坏芯⽚)。
(7)将cnt-4b.qbf.设置为顶层实体。
对该⼯程⽂件进⾏全程编译处理,若在编译过程中发现错误,则找出并更正错误,直到编译成功为⽌。
异步清零
7.用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
8.将数字信号源F的时钟选择为1HZ,使拨动开关SW1置为高电平(使拨动开关向上),观察四位发光管D1~D4的亮灭变化,以及D5(进位信号)的变化情况。当复位键(底板上的按键开关S1键)按下后,计数是否被清零。拨动开关SW1置为低电平(拨动开关向下)观察加法器的工作情况。记录实验现象是否与自己的编程思想一致。
课程名称EDA技术应用
专 业电子信息工程
班 级
学 号
学 生 姓 名
实验报告
实验名称
含异步清零和同步使能的加法计数器
实验时间学生学号学来自姓名同组人员专业班级
实验类型
设计性
指导老师
实验地点
学时
一、实验目的
1.了解二进制计数器的工作原理。
2.进一步熟悉QUARTUSII软件的使用方法和VHDL输入。
3.时钟在编程过程中的作用。
cout : out std_logic --进位信号
);
end cnt11;
--------------------------------------------------------------------
architecture behave of cnt11 is
begin
process(clk,ret,en)
variable cqi : std_logic_vector(3 downto 0);
begin
if ret='0' then cqi:=(others =>'0');--计数器异步复位
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二含异步清零和同步使能的加法计数器
一、实验目的
1、了解二进制计数器的工作原理。
2、进一步熟悉QUARTUSII软件的使用方法和VHDL输入。
3、时钟在编程过程中的作用。
二、实验原理
二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:
在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。
在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。
其工作时序如图3-1所示:
图3-1 计数器的工作时序
三、实验内容
本实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。
实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关K1表示使能端信号,用复位开关S1表示复位信号,用LED模块的LED1~LED11来表示计数的二进制结果。
实验LED亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。
通过输入不同的值模拟计数器的工作时序,观察计数的结果。
实验箱中的拨动开关、与FPGA的接口电路,LED灯与FPGA的接口电路以及拨动开关、LED与FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
数字时钟信号模块的电路原理如图3-2所示,表3-1是其时钟输出与FPGA的管脚连接表。
图3-2 数字时钟信号模块电路原理
信号名称对应FPGA管脚名说明
DIGITAL-CLK A14数字时钟信号送至FPGA的A14
表3-1 数字时钟输出与FPGA的管脚连接表
按键开关模块的电路原理如图3-3所示,表3-2是按键开关的输出与FPGA的管脚连接表。
图3-3 按键开关模块电路原理
信号名称FPGA I/O名称核心板接口管脚号功能说明S[0]PIN_AF5JP1_91‘S1’ Switch
S[1]PIN_AH6JP1_93‘S2’ Switch
S[2]PIN_AH7JP1_95‘S3’ Switch
S[3]PIN_AH8JP1_97‘S4’ Switch
S[4]PIN_AG10JP1_99‘S5’ Switch
S[5]PIN_AG11JP1_101‘S6’ Switch
S[6]PIN_AH14JP1_90‘S7’ Switch
S[7]PIN_AG7JP1_92‘S8’ Switch
表3-2 按键开关与FPGA的管脚连接表
四、实验步骤
1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光盘中
提供的示例程序。
4、编写完VHDL程序后,保存起来。
方法同实验一。
5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。
6、编译仿真无误后,依照拨动开关、LED与FPGA的管脚连接表(表1-1、表1-2)或
参照附录进行管脚分配。
表3-3是示例程序的管脚分配表。
分配完成后,再进行全编译一次,以使管脚分配生效。
表3-3 端口管脚分配表
7、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。
观察实验结果是否与自
己的编程思想一致。
五、实验现象与结果
以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源的时钟选择为1HZ,使拨动开关K1置为高电平(使拨动开关向上),四位LED会按照实验原理中依次被点亮,当加法器加到9时,LED12(进位信号)被点亮。
当复位键(按键开关的S1键)按下后,计数被清零。
如果拨动开关K1置为低电平(拨动开关向下)则加法器不工作。
六、实验报告
1、绘出仿真波形,并作说明。
2、写出在VHDL编程过程中需要说明的规则。
3、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试结果记录下来。
4、改变时钟频率,看实验现象会有什么改变,试解释这一现象。
实验代码:
//二进制计数器,时间间隔是1s
module counter (Clk, Rst_n, En_n, Cout, led) ;
input Clk; //系统时钟1Hz
input Rst_n; //全局复位,低电平有效
input En_n; //使能信号,高电平有效
output Cout; //进位信号
output [3:0] led;
reg [3:0] led;
reg Cout;
//同步使能,异步清零
always @ (posedge Clk, negedge Rst_n)
begin
if(Rst_n == 1'b0)
begin
led <= 4'd0;
Cout <= 1'b0;
end
else if(En_n == 1'b1)
begin
if(led == 4'b1001)
begin
Cout <= 1'b1;
led <= 4'd0;
end
else
led <= led +1'b1;
if(led == 4'b0000)
Cout <= 1'b0;
end
end
endmodule
/*另一种解决进位信号的方法,
就是为9(1001)的时候进位信号为1,
其他时候进位信号为0。
Cout<= led[0] & ~led[1] & ~led[2] & led[3];*/。