实验二 异步清零和同步使能的4位计数器

合集下载

实验五 含异步清零和同步使能4位加法计数器的VHDL设计

实验五 含异步清零和同步使能4位加法计数器的VHDL设计

实验五含异步清零和同步使能4位加法计数器的VHDL设计一、实验目的1掌握计数器的VHDL设计方法;2掌握异步复位和同步复位和使能的概念;3掌握寄存器性能的分析方法(即分析芯片所能达到的最高时钟频率)。

二、实验内容1异步复位4位加法计数器的设计;2同步复位4位加法计数器的设计。

3异步清0和同步时钟使能的4位加法计数器三、实验原理复位:给计数器一个初值叫复位,如果所给初值为0,则称复位为清零。

异步复位:复位跟时钟无关,只要复位信号的复位电平出现,计数器立即复位,如图5-1所示;同步复位:复位跟时钟有关,当复位信号的复位电平出现时,计数器并不立即复位,而是要等到时钟沿到来时才复位,如图5-2所示。

异步复位4位加法计数器的VHDL设计代码见教材P122-P123,仿真波形如图5-3所示。

同步复位4位加法计数器的VHDL部分代码如下,仿真波形如图5-4所示。

.图5-1异步复位图5-2同步复位图5-3异步复位计数器仿真波形图5-4同步复位计数器仿真波形四、实验步骤(一)异步复位4位加法计数器的设计1建立一个设计工程,工程名为CNT4B;2打开文本编辑器,建立一个VHDL设计文件,其VHDL代码见教材P164中的例6-20,文件名存为CNT4B.VHD。

注意文件的扩展名要选为.vhd,而且要求工程名、文件名和设计实体名必须相同。

3选器件:ACEX1K,EP1K30TC144-3(旧)或Cyclone,EP3C40Q240C8目标芯片。

4编译;5建立波形文件,然后保存,其文件名必须与工程名一致;【波形设置:①设置仿真时间为10us:②设置输入信号的波形:时钟周期设置为200ns,其他输入信号的波形设置参看图6-3。

】6仿真,观察输出波形是否正确;7时序分析:分析芯片所能达到的最高时钟频率。

【打开时序分析器,然后执行菜单命令:analysis/register performance/start,可以看到最高时钟频率为100.00MHZ】(二)同步复位4位加法计数器的设计8建立一个设计工程,工程名为CNT4B_SYS;9打开文本编辑器,建立一个VHDL设计文件,其VHDL代码参看异步计数器代码和实验原理中的参考代码,文件名存为CNT4B_SYS.VHD。

实验4:同步计数器及其应用实验报告

实验4:同步计数器及其应用实验报告

实验4:同步计数器及其应用实验报告
一、实验目的
1、了解可编程数字系统设计的流程
2、掌握Quartus II 软件的使用方法
3、掌握原理图输入方式设计数字系统的方法和流程
4、掌握74LS161同步16进制计数器的特点及其应用
二、实验设备
1、计算机:Quartus II 软件
2、Altera DE0 多媒体开发平台
3、集成电路:74LS10
4、集成电路:74LS161
三、实验内容
1、74LS161逻辑功能的测试
2、用74LS161实现12进制计数(异步清零)
3、用74LS161实现12进制计数(同步置数)
四、实验原理
74LS161
1、74LS161:异步清零、同步置数四位二进制计数器
2、引脚的定义:
使用74161实现16进制和12进制
1)首先使用quartus软件建立原理图,首先实现16进制,所以只
需要将需要的输入输出接到相应的引脚上,其中需要注意的是
我们需要让这个板子开始工作,所以需要将T和P引脚接响应
的高电压,然后将cp信号接入相应的输入;q0q1q2q3接到相
应的输出就可以了,然后编译。

现在在建立波形文件完成仿真,
通过仿真结果就可以看到自己的电路是否正确。

最后一步就是
实现在FPGA上的应用,我们需要做的就是给原来的原理图分
配相应的引脚,然后重新编译后,插入线就可以看到仿真结果
了。

2)12进制可以采取两种方式,也就是同步置数和异步清零两种
方式,我使用的异步清零,从而只需要对q0q1q2q3在12的时
候执行清零的动作就可以了,也就是加一个而输入的与非门就
可以了。

五、实验结果。

实验一2 含异步清0

实验一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

如何使用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,出现如下图所示的工程信息报告对话框,提示设计者看到工程文件配置信息报告。

设计含异步使能清0和同步时钟使能的加法计数器

设计含异步使能清0和同步时钟使能的加法计数器

综合课程设计实验设计含异步使能清0和同步时钟使能的加法计数器1.实验目的1.计数器的设计2.QUARTUS 2中SIGNALTAP 2实时测试技术3.FPGA配置芯片的使用4.继续熟悉实验的软硬件平台2.实验步骤与结果1.设计含异步使能清0和同步时钟使能的加法计数器源代码: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 )VARIABLE CQI :STD:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST=’1’ THEN CQI:=(OTHERS=>’0’); --复位信号ELSIF CLK’EVENT AND CLK=’1’ THENIF EN=’1’ THEN --使能信号IF CQI<9 THEN CQI:=CQI+1;ELSE CQI:=(O THERS=>’0’);END IF;END IF;IF CQI=9 THEN COUT<=’1’; --进位ELSE COUT<=’0’;END IF;CQ<=CQI;END PROCESS;END BEHAV;实验结果:键2低电平时允许计数,键1高电平时允许计数,数码管最后一位正确计数0到9,当有进位时,发光管D1显示进位信号。

2.使用嵌入式逻辑分析仪SIGNALTAP2 进行实时测试按如图设置SIGNALTAP 2获得实验波形:可以看到CQ的波形为锯齿状的3.将计数器设计文件烧到实验板上FPGA的配置器件EPCS1中,实现掉电保护实验结果:掉电重启以后实验板上程序的功能正常。

实验四四位二进制同步计数器

实验四四位二进制同步计数器

实验四四位二进制同步计数器一、目的:1.能了解四位元二进制同步计数器的设计原理及其特性。

2.能设计一个四位元二进制同步计数器。

3.能自行以CPLD数位发展实验系统验证所设计电路的正确性。

二、电路图:三、实验器配置图:四、实验步骤与画面:1.建立一个名为count16.vhd的新文件,并在QuartusⅡ文字编辑器中,以VHDL语言来设计程式,图为四位二进制计数器的VHDL代码。

其中clk为时钟端口,clk为异步清零端,Q为计数输出端口,co为进位输出端口。

2.存储、检查及编译。

3.创建元件符号。

4.创建波形文件,设定合适的端口信号,仿真元件的波形。

观察波形图可以看出当芯片可以实现16进制计数功能。

五、相关说明:1.同步计数器的意义是将所有正反器的时脉连接在一起,当时脉进来时,所有的正反器同时被触发而动作,因此传递延迟时间就可以大为缩短,计数的速度就会增快。

2.我们可以利用MAX+plusⅡ的Timing Analyzer来比较同步计数器与非同步计数器(单元十)的传递延迟状况,图U12-3(a)与图U12-3(b)为分析所得结果,从图中可以发现,同步计数器从时脉输入到各级的输出,其传递延迟时间皆相同,而非同步计数器则越到后级传递延迟时间越长。

3.图U12-2的程式设计方法,也可以改用D型正反器来设计,如图U12-4所示,您可以发现此种设计同步计数器的方法较简洁。

4.若要将图U12-4改成下数计数器,只要将叙述ff[].d=ff[].q+1;改成ff[].d=ff[].q-l;即可。

5.图U12-5为四位元含致能及清除的模10上下数计数器,其中的设计重点为:(1)为了能在高频计数电路应用,本电路的清除方式采同步清除式设计,并不利用正反器本身的elrn脚,而是当clr脚输入为鬲态时,令所有正反器的D输入脚为o,达到清除的目的。

(2)程式中使用了巢状的IF THEN叙述,须注意每一层的IF THEN、 ELSIF、ELSE及END IF的对应,不要弄乱了,否则会很麻烦。

实验二-异步清零和同步使能的4位计数器

实验二-异步清零和同步使能的4位计数器

西南科技大学实验报告FPGA现代数字系统设计实验题目:含异步清零和同步使能的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;//寄存器变量OUTY,位宽为1wire 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) /*当CLK上升沿或者RST上升沿时,触发always模块执行*/beginif(!RST)beginOUTY<=4'b0000;COUT<=1'b0;/*当复位信号等于0时,计数OUTY、COUT置0*/endelseif(ENA) /*当使能信号为1时,计数器计数工作*/beginOUTY<=OUTY+1;COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3]; /*计数显示*/endendendmodule2保存计数器程序为CNT4B.vhd,进行功能仿真、全编译、时序仿真,如出现错误请按照错误提示进行修改,保证设计的正确性。

四位全加器

四位全加器

4位加法计数器一、实验目的(1)学习时序电路的VHDL描述方法。

(2)掌握时序进程中同步、异步控制信号的设计。

(3)熟悉EDA的仿真分析和硬件测试技术。

二、实验原理设计一个含计数使能、异步复位和并行预置功能的4位加法计数器,RST是异步复位信号,高电平有效;CLK是时钟信号;当使能信号ENA为1时,加法计数,COUT为计数进位输出,OUTY为计数输出。

VHDL参考程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity CNT4B isport(clk:in std_logic;rst:in std_logic;ena:in std_logic;outy:out std_logic_vector(3 downto 0);cout:out std_logic);end CNT4B;architecture BEHA V 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;end if;end if;outy <= CQI;end process P_REG;cout <= CQI(0) and CQI(1) and CQI(2) and CQI(3);end BEHA V;三、实验任务(1)编写4位二进制加法计数器的VHDL程序。

(2)在ispDsignEXPERT System或者Quartu sⅡ上对加法计数器进行仿真。

含异步清0和同步时钟使能的4位加法计数器 EDA技术与Verilog HDL实验报告

含异步清0和同步时钟使能的4位加法计数器 EDA技术与Verilog HDL实验报告

含异步清0和同步时钟使能的4位加法计数器一.实验目的熟悉在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器。

二.实验内容在QuartusII下设计含异步清0和同步时钟使能的4位加法计数器,并编译、仿真验证其功能。

三.程序清单计数器顶层文件设计:10进制计数器文本输入:module CNT10(clk,rst,en,load,cout,dout,data);input clk,en,rst,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;endmodule60位计数器文本输入:module CNT60(CLK,EN,RST,LOAD,COUT1,COUT2,DOUT1,DOUT2,DATA);input CLK,EN,RST,LOAD;input [3:0] DATA;output[3:0] DOUT1;output[2:0] DOUT2;output COUT1;output COUT2;reg [3:0] Q1;reg [2:0] Q2;reg COUT1;reg COUT2;assign DOUT1 = Q1;assign DOUT2 = Q2;always @(negedge 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) COUT1=1'b1;elseCOUT1=1'b0;always @(negedge COUT1 or negedge RST)beginif(!RST) Q2<=0;else if (EN) beginif (!LOAD) Q2<=DATA;else if (Q2<5) Q2<=Q2+1;else Q2<=4'b0000;endendalways @(Q2)if ((Q1==4'h9)&&(Q2==3'h5)) COUT2=1'b1;elseCOUT2=1'b0;endmodule60位计数器图形输入:四.实验步骤1、新建一个名称为CNT10的工程,并在该文件夹中新建一个CNT10.v的文件。

异步清零和同步时钟使能的4位加法计数器 实验报告

异步清零和同步时钟使能的4位加法计数器 实验报告

异步清零和同步时钟使能的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对上述设计进行编译、综合、仿真,给出其所有信号的仿真波形和时序分析数据。

含异步清零和同步时钟使能的4位加法器

含异步清零和同步时钟使能的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;六.实验现象。

实验二含异步清零和同步使能的加法计数器

实验二含异步清零和同步使能的加法计数器

实验二含异步清零和同步使能的加法计数器一、实验目的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所示。

实验2 设计含异步清零和同步时钟使能的加法计数器(5-3)

实验2 设计含异步清零和同步时钟使能的加法计数器(5-3)

实验2 含异步清零和同步时钟使能的加法计数器设计(1)实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

(2)实验原理:实验程序为例4-22;实验原理参考4.4节(计数器设计),设计流程参考第5章。

【例4-22】设计一个带有异步复位和同步时钟使能的十进制加法计数器。

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 : 0UT STD_LOGIC);END ENTITY CNT10;ARCHITECTURE behav OF CNT10 ISBEGINPROCESS (CLK,RST,EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST=‘1’ THEN CQI:=(OTHERS =>‘0’);--计数器异步复位ELSIF C LK’E VENT AND CLK=‘1’ THEN --检测时钟上升沿IF EN=‘1’ THEN --检测是否允许计数(同步他能) IF CQI<9 THEN CQI:=CQI+1; --允许计数,检测是否小于9ELSE CQI := (OTHERS => ‘0’); --大于9,计数值清零END IF;END IF;END IF;IF CQI=9 THEN COUT<=‘1’; --计数大于9,输出进位信号ELSE COUT<=‘0’;END IF;CQ<=CQI; --将计数值向端口输出END PROCESS;END ARCHITECTURE behav;(3)实验内容1:在Quartus II 上对例4-22进行编辑、编译、综合、适配、仿真。

实验二 四位加法计数器设计

实验二 四位加法计数器设计

设计要求:
1异步复位,即复位端有效,则计数器输出0; 2时钟信号上升沿有效,且计数器使能端有效, 计数器加1输出;
3设计为16进制计数器,即计数值为F则又 回0,进位输出1;
4位加法器(加1器) 多路选择器 4位锁存器
含计数使能、异步复位和
计数值并行预置功能4位加法计数器
【CNT4B】 module cnt4b (clk, rst, en, cq, cout); input clk; input rst; input en; output[3:0] cq; output cout; reg[3:0] cq; reg cout; reg[3:0] cqi;
(6)实验报告:将实验原理、设计过 程、编译仿真波形和分析结果、硬件测 试实验结果写进实验报告。
实验仿真波形图
定义数码管1 显示4位计数输出 定义LED1显示进位 选择模式5 定义键1控制清0
其余作默认设置
选择Clock0作时钟 输入频率选择4Hz
定义键2控制使能
end
end if (cqi == 15) begin cout <= 1'b1 ; end else begin cout <= 1'b0 ; end cq <= cqi ;
end endmodule
(4)实验内容2: 引脚锁定以及硬件下载测试 若目标器件是EPM7128SLC84-15,建议选实验 电路模式5,用键8(PIO7)控制RST;用键7( PIO6)控制ENA;计数溢出COUT接发光管D8( PIO15);OUTY是计数输出,接数码1(PIO19PIO16,低位靠右);时钟CLK接clock0,通过 跳线选择4Hz信号。引脚锁定后进行编译、下 载和硬件测试实验。将实验过程和实验结果写 进实验报告。

含异步清0和同步时钟使能的4-位加法计数器-报告

含异步清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产生的数据与代码上的编程相符合。

设计含异步清0和同步时钟使能的加法计数器

设计含异步清0和同步时钟使能的加法计数器

设计含异步清0和同步时钟使能的加法计数器一.实验目的学习计数器的设计,仿真和硬度测试,进一步熟悉VHDL设计技术。

二.实验原理写出实验程序,实验原理参考4-5节。

三.实验内容1.按照步骤,在MAX+PULSII上对程序进行编辑,编译,综合,适配,仿真,说明例中各语句的作用,详细描述示例的功能特点,给出所有信号的时序仿真波形。

2.引脚锁定以及硬件下载测试。

建议选择电路模式1(参考附录2),用键8(地址4)控制RST,键7(地址5)控制EN,计数溢出COUT 接发光管D8(地址15);CQ是计数输出,接数码1(L8-L5,低位靠右,地址为24,22,2120);时钟CLK接clock1(地址为83),通过跳线选择4Hz信号。

引脚锁定后进行编译、下载和硬件测试实验。

将实验过程和实验结果写进实验报告。

实验程序:编译:仿真图形:硬件测试:四.实验结果用键8(地址4)控制RST,键7(地址5)控制EN,计数溢出COUT 接发光管D8(地址15);CQ是计数输出,接数码1(L8-L5,低位靠右,地址为24,22,2120);时钟CLK接clock1(地址为83),通过跳线选择4Hz信号。

RST为复位清零端,EN为使能端,所以RST为高电平,EN为低电平时计数清零并禁止计数。

但是当RST为低电平,EN为高电平时,每一个CLK的上升沿后,CQ输出加1,而当CQ输出为9时,COUT输出高电平进位信号。

但是当EN为低电平,计数保持。

五.思考题:在例5-3中是否可以不定义信号CQI,而直接用输出端口信号完成加法运算,即:CQ <= CQ + 1?为什么?答:不可以,因为信号CQ定义的端口模式是OUT,是单向输出模式,所以只能作为输出信,不能在结构体内再用来作为输入信号;如果CQ定义的端口模式是BUFFER,就可以将计数器输出的计数信号回读来作为下一个计数值的初值。

在本实验中,该信号是一个反馈信号。

六.实验心得通过不断实验,加深了我们动手的能力也让我们不断的熟悉实验软件和环境等,也让我们在理论中学到的知识在实验室中得以证明和实践,大大的提高了我们对知识学习的兴趣。

计算机组成原理4位二进制计数器实验报告

计算机组成原理4位二进制计数器实验报告

计算机组成原理实验一4位二进制计数器实验姓名:李云弟 学号:1205110115 网工1201【实验环境】1. Windows 2000 或 Windows XP2. QuartusII9.1 sp2、DE2-115计算机组成原理教学实验系统一台,排线若干。

【实验目的】1、熟悉VHDL 语言的编写。

2、验证计数器的计数功能。

【实验要求】本实验要求设计一个4位二进制计数器。

要求在时钟脉冲的作用下,完成计数功能,能在输出端看到0-9,A-F 的数据显示。

(其次要求下载到实验版实现显示)【实验原理】计数器是一种用来实现计数功能的时序部件,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。

计数器由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS 触发器、T 触发器、D 触发器及JK 触发器等。

计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。

计数器按计数进制不同,可分为二进制计数器、十进制计数器、其他进制计数器和可变进制计数器,若按计数单元中各触发器所接收计数脉冲和翻转顺序或计数功能来划分,则有异步计数器和同步计数器两大类,以及加法计数器、减法计数器、加/减计数器等,如按预置和清除方式来分,则有并行预置、直接预置、异步清除和同步清除等差别,按权码来分,则有“8421”码,“5421”码、余“3”码等计数器,按集成度来分,有单、双位计数器等等,其最基本的分类如下:计数器的种类⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧⎪⎩⎪⎨⎧⎪⎩⎪⎨⎧⎩⎨⎧进制计数器十进制计数器二进制计数器进制可逆计数器减法计数器加法计数器功能异步计数器同步计数器结构N 、、、321 下面对同步二进制加法计数器做一些介绍。

同步计数器中,所有触发器的CP 端是相连的,CP 的每一个触发沿都会使所有的触发器状态更新。

实验二含异步清零和同步使能的加法计数器

实验二含异步清零和同步使能的加法计数器

实验⼆含异步清零和同步使能的加法计数器实验⼆含异步清零和同步使能的加法计数器⼀、实验⽬的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 数字时钟信号模块电路原理表3-1 数字时钟输出与FPGA的管脚连接表按键开关模块的电路原理如图3-3所⽰,表3-2是按键开关的输出与FPGA的管脚连接表。

图3-3 按键开关模块电路原理表3-2 按键开关与FPGA的管脚连接表四、实验步骤1、打开QUARTUSII软件,新建⼀个⼯程。

2、建完⼯程之后,再新建⼀个VHDL File,打开VHDL编辑器对话框。

3、按照实验原理和⾃⼰的想法,在VHDL编辑窗⼝编写VHDL程序,⽤户可参照光盘中提供的⽰例程序。

EDA课程设计之含异步清0和同步时钟使能的加法计数器

EDA课程设计之含异步清0和同步时钟使能的加法计数器

实验2 含异步清0和同步时钟使能的加法计数器(1) 实验目的:学习计数器的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

(2) 实验原理:实验程序为例3-3,实验原理在第二章,设计流程参考第二章。

【例3-3】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)VARIABLE 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;(3) 实验内容1:在QuartusⅡ上对例3-3进行编辑、编译、综合、适配、仿真。

说明例中各语句的作用,详细描述示例的功能特点,给出其所有信号的时序仿真波形。

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

西南科技大学
实验报告FPGA现代数字系统设计
实验题目:含异步清零和同步使能的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;//寄存器变量OUTY,位宽为1
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) /*当CLK上升沿或者RST上升沿时,触发always模块执行*/
begin
if(!RST)
begin
OUTY<=4'b0000;
COUT<=1'b0;/*当复位信号等于0时,计数OUTY、COUT置0*/
end
else
if(ENA) /*当使能信号为1时,计数器计数工作*/
begin
OUTY<=OUTY+1;
COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3]; /*计数显示*/
end
end
endmodule
2保存计数器程序为CNT4B.vhd,进行功能仿真、全编译、时序仿真,如出现错误请按照错误提示进行修改,保证设计的正确性。

3锁定引脚
pin location DE2上的名称
ENA PIN_N25SW[0]
CLK PIN_G26KEY0
RST PIN_N23KEY1
OUTY[0]PIN_AC21LEDR[7]
OUTY[1]PIN_AA14LEDR[8]
OUTY[2]PIN_Y13LEDR[9]
OUTY[3]PIN_AA13LEDR[10]
COUT PIN_Y12LEDG[8]
CLK_1PIN_AE22LEDG[0]
RST_1PIN_AF22LEDG[1]
ENA_1PIN_AE23LEDR[0]
4下载
采用JATG方式进行下载,通过ENA,CLK,RST输入,观察的LEDR[0],LEDR[7],LEDR[8],LEDR[9],LEDR[10],LEDG[0],LEDG[1],LEDG[8]亮灭验证计数器的
逻辑功能。

5使用SIGNALTAP II对CNT4B计数器中的COUT, OUTY进行实时测试。

四、实验结果与分析
功能仿真:
时序编译:
时序仿真:
下载情况:
最终结果:
五、思考题
1、改写例2-1,用两个always语句实现模块功能?
答: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)
begin
if(!RST)
begin
OUTY<=4'b0000;
COUT<=1'b0;
end
else
OUTY= OUTY+1;
always@(OUTY)
if(ENA)
begin
OUTY<=OUTY+2’b1;
COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3];
end
end
assign COUT<=OUTY[0] & OUTY[1] & OUTY[2] & OUTY[3];
endmodule
2、逻辑分析仪的功能是什么?它在FPGA设计中的作用是什么?简述SIGNALTAP II的使用流程。

答:逻辑分析仪可以监测硬件电路工作时的逻辑电平(高或低),并加以存储,用图形的方式直观地表达出来,便于用户检测,分析电路设计(硬件设计和软件设计) 中的错误。

逻辑分析仪在FPGA的作用主要是用于调试。

SIGNALTAP II的使用流程:设计人员在完成设计并编译工程后,建立SignalTap II (.stp)文件并加入工程、配置STP文件、编译并下载设计到FPGA、在Quartus II软件中显示被测信号的波形;在测试完毕后将该逻辑分析仪从项目中删除。

相关文档
最新文档