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

合集下载

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

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

设计含异步清零和同步时钟使能的加法计数器附表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四、仿真结果:七、实验心得:通过本次实验,使我进一步熟悉了QuartusII的VerilogHDL文本设计流程以及电路仿真和硬件测试。

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

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

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SCAN_LED ISPORT ( CLK : IN STD_LOGIC;LEDOUT : OUT STD_LOGIC_VECTOR(8 DOWNTO 0); --将多余发光二极管熄灭SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --段码信号输出BT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --位码信号输出CLR : IN STD_LOGIC; --异步清零EN : IN STD_LOGIC --同步使能);END;ARCHITECTURE one OF SCAN_LED ISSIGNAL CNT10 : STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL A : INTEGER RANGE 0 TO 15;SIGNAL q : std_logic_vector(25 downto 0);SIGNAL CLK1 : STD_LOGIC;BEGINP0: process(clk)beginif clk'event and clk='1' thenq<=q+1;end if;end process P0;CLK1 <= q(23);P1: PROCESS(CLK1)BEGINIF CLR ='1' THENCNT10 <= "0000";LEDOUT <= "111111111";ELSEIF EN = '1' THENIF CLK1'EVENT AND CLK1 = '1' THENCNT10 <= CNT10 + 1;LEDOUT <="111111111";IF CNT10 = "1001" THENCNT10 <= "0000";LEDOUT <= "111111110";END IF;END IF;END IF;END IF;END PROCESS P1 ;P2: PROCESS( CNT10 )BEGINCASE CNT10 ISWHEN "0000" => BT <= "0000001" ; A <= 0 ;WHEN "0001" => BT <= "0000001" ; A <= 1 ;WHEN "0010" => BT <= "0000001" ; A <= 2 ;WHEN "0011" => BT <= "0000001" ; A <= 3 ;WHEN "0100" => BT <= "0000001" ; A <= 4 ;WHEN "0101" => BT <= "0000001" ; A <= 5 ;WHEN "0110" => BT <= "0000001" ; A <= 6 ;WHEN "0111" => BT <= "0000001" ; A <= 7 ;WHEN "1000" => BT <= "0000001" ; A <= 8 ;WHEN "1001" => BT <= "0000001" ; A <= 9 ;WHEN OTHERS => NULL ;END CASE ;END PROCESS P2;P3: PROCESS( A ) --译码电路BEGINCASE A ISWHEN 0 => SG <= "0111111";WHEN 1 => SG <= "0000110";WHEN 2 => SG <= "1011011";WHEN 3 => SG <= "1001111";WHEN 4 => SG <= "1100110";WHEN 5 => SG <= "1101101";WHEN 6 => SG <= "1111101";WHEN 7 => SG <= "0000111";WHEN 8 => SG <= "1111111";WHEN 9 => SG <= "1101111";WHEN 10 => SG <= "1110111";WHEN 11 => SG <= "1111100";WHEN 12 => SG <= "0111001";WHEN 13 => SG <= "1011110";WHEN 14 => SG <= "1111001";WHEN 15 => SG <= "1110001";WHEN OTHERS => NULL ;END CASE ;END PROCESS P3;END;。

设计含异步使能清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中,实现掉电保护实验结果:掉电重启以后实验板上程序的功能正常。

实验三 含异步清0和同步时钟使能的十进制

实验三 含异步清0和同步时钟使能的十进制

EDA技术基础实验报告实验名称:含异步清0和同步时钟使能的十进制加法法计数器姓名:李江虹学号:068专业及班级:通信工程(3)班指导老师:刘文进实验三含异步清0和同步时钟使能的十进制加法法计数器一、实验目的:学习时序电路的设计、仿真和硬件测试,进一步熟悉VHDL设计技术。

二、实验原理实验图1是一含计数使能、异步复位十进制加法计数器,例1是其VHDL描述。

由实验图1所示,图中间是4位锁存器;rst是异步清信号,高电平有效;clk是锁存信号;D[3..0]是4位数据输入端。

当ENA为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当ENA为'0'时将"0000"加载于锁存器。

图1 含计数使能、异步复位十进制加法计数器三、实验内容在MAX+plusII上参照例1(4位二进制计数器)进行设计、编辑、编译、综合、适配、仿真。

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

【例1】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;LOAD : IN STD_LOGIC;DATA :IN STD_LOGIC_VECTOR(3 DOWNTO 0);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,LOAD)BEGINIF RST = '1' THEN CQI <="0000"; ELSIF CLK'EVENT AND CLK = '1' THEN IF LOAD = '1' THEN CQI <= DATA; ELSIF CQI>="1001"THENCQI<="0000";COUT <='1';ELSECQI<=CQI+1;COUT <='0';END IF;END IF;OUTY <= CQI ;END PROCESS P_REG ;END behav;四、引脚锁定以及硬件下载测试。

EDA实验二 含异步清零和同步使能的十进制加减法计数器

EDA实验二 含异步清零和同步使能的十进制加减法计数器

EDA实验二 含异步清零和同步使能的十进制加减法计数器一、实验目的1.了解加减计数器的工作原理。

2.进一步熟悉QUARTUSII 软件的使用方法和VHDL 输入。

3.熟悉仿真时序设定。

二、实验设备1.PC机 一台;四、实验内容完成一个0~99计数器,有四个输入信号:复位reset、使能enable、时钟clk和加减选择sel,三路输出信号:计数值、进位和借位信号。

要求每来一个时钟信号,加或减1(sel=‘0’时执行加,sel=‘1’时执行减);计数值为99时再加1,输出进位信号,并且计数值归零;计数值为0时再减1,输出借位信号,并且计数值变成99(即0~99循环计数);复位信号reset有效时(低电平有效)计数值清0,使能信号enable有效时(高电平有效)计数器才进行工作,否则不进行累加或累减。

五、实验步骤1.打开QUARTUSII 软件,新建一个VHDL文件。

2.输入程序代码,点击保存时,系统会提示建立一个新的工程(Project),按照QUARTUSII的提示建立好工程;3.按照实验原理和自己的想法,在VHDL 编辑窗口调整完成VHDL 程序;4.对自己编写的VHDL 程序进行编译,对程序的错误进行修改;5.进行仿真,附录:电路实体定义可参照如下:ENTITY counter ISPORT( clk, reset, enable ,sel : IN STD_LOGIC; --定义时钟、异步复位、同步使能、选择信号cq : OUT STD_LOGIC_VECTOR(6 downto 0); --计数值c1out : OUT STD_LOGIC; --进位信号c2out : OUT STD_LOGIC --借位信号);END counter;VHDL程序代码如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISPORT( clk, reset, enable ,sel : IN STD_LOGIC; --定义时钟、异步复位、同步使能、选择信号cq : OUT STD_LOGIC_VECTOR(6 downto 0); --计数值c1out : OUT STD_LOGIC; --进位信号c2out : OUT STD_LOGIC --借位信号);END counter;ARCHITECTURE counter99 OF counter ISBEGINPROCESS(clk, reset, enable ,sel)VARIABLE cot :STD_LOGIC_VECTOR(6 downto 0);BEGINIF reset='0' THEN cot:=(OTHERS=>'0');ELSIF clk'EVENT AND clk ='1' THENIF enable='1' THENIF sel='0' THEN c2out<='0';IF cot<99 THEN cot:=cot+1;c1out<='0';ELSE cot:=(OTHERS=>'0');c1out<='1';END IF;ELSIF sel='1' THEN c1out<='0';IF cot>0 THEN cot:=cot-1;c2out<='0';ELSE cot:="1100011";c2out<='1';END IF;END IF;END IF;END IF;cq<=cot;END PROCESS; END counter99;仿真结果如下:。

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

设计含异步清零和同步加载与时钟使能的计数器

设计含异步清零和同步加载与时钟使能的计数器

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位加法计数器

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

附表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位的并行加载数据DATA
output[3:0] DOUT; //定义4位的计数输出数据DOUT
output COUT; //定义进位输出信号COUT
reg[3:0] Q1; //定义4位的寄存器型中间变量Q1
reg COUT;
assign DOUT = Q1; //将内部寄存器的计数结果输出至DOUT
always @(posedge CLK or negedge RST) //时序过程
begin
if(!RST) Q1 <= 0; //RST=0时,对内部寄存器单元异步清0
else if(EN)
begin //同步使能EN=1,则允许加载或计数
if(!LOAD) Q1 <= DATA; //当LOAD=0,向内部寄存器加载数据
else if(Q1<9) Q1 <=Q1+1; //当Q1小于9时,允许累加
else Q1 <=4'b0000; //否则一个时钟后清零返回初值
end
end
always @(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所示。

五、引脚锁定:
六、硬件测试结果:
程序下载
硬件测试效果(模式5)
硬件测试的结果现象为:当键1(RST)、键2(EN)、键3(LOAD)均处于高电平时,数码管1依照时钟信号的周期(CLOCK0=1Hz),从0依次变化到9,当计数到9时,LED灯(D8:COUT)亮起。

数码管1显示的过程中,按下键1(RST)时(变为低电平),数码管1即刻清零;按下键2(EN)时(变为低电平),数码管1保持显示当前的数字(如上硬件测试效果图:保持显示数字5);按下键3(LOAD)时(变为低电平),数码管1显示的数字变为由键8-键5确定的DATA 值(上图为:0011B,就是十进制数3),恢复键1-键3的高电平状态,计数功能正常运行。

七、实验心得:
通过本次实验,使我进一步熟悉了QuartusII的VerilogHDL文本设计流程以及电路仿真和硬件测试。

本次实验的重难点是引脚锁定,数码管的显示是需要先经过译码器的处理,所以我选择了模式5。

通过对照实验电路结构图以及芯片引脚的定义表,正确进行引脚锁定,否则编译会出错或者达不到预期的效果。

总的来说,本次实验还是有一定的挑战性。

八、思考题:
给出含异步清零和同步使能的16位二进制加减可控计数器的VerilogHDL描述。

module UPDOWNCNT16(Q,COUT,DATA,LOAD,EN,CLK,RST,UP_DOWN)
input[15:0] DATA;
input LOAD,EN,CLK,RST,UP_DOWN;
output[15:0] Q;
项目名称”栏以上部分统一。

相关文档
最新文档