实验二 含异步清零和同步使能的加法计数器
- 格式:doc
- 大小:76.00 KB
- 文档页数:5
实验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;六. 实验仿真图形。
湖北民族学院信息工程学院实验报告(电气、电子类专业用)班级: 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 三-八译码器真值表译码器不需要像编码器那样用一个输出端指示输出是否有效。
但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。
本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。
1.含有异步清零和计数使能的16位二进制加减可控计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cnt16 ISPORT(EN,RST,UPD,CLK : IN STD_LOGIC;OUT1: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END cnt16;ARCHITECTURE bhv OF cnt16 ISSIGNAL QQ:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(EN,RST,UPD)BEGINIF RST='1' THENQQ<=(OTHERS=>'0'); --有复位信号清零ELSIF EN='1' THEN --EN位高电平开始计数IF CLK'EVENT AND CLK='1' THENIF UPD='1' THEN --当UDP为1加计数QQ<=QQ+1;ELSE --当UDP不为1减计数IF QQ > "0" THEN --当减到0时QQ<=QQ-1; --给QQ全1ELSEQQ<=(OTHERS=>'1');END IF;END IF;END IF;END IF;END PROCESS;OUT1<=QQ;END bhv;图1-1 16位二进制加减可控计数器的RTL图图1-2 16位二进制加减可控计数器的波形仿真图2.1 计数器和译码器合起来的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4_YM ISPORT(CLK,RST,ENA:IN STD_LOGIC;COUT:OUT STD_LOGIC;LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END CNT4_YM;ARCHITECTURE BEHV OF CNT4_YM ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK,RST,ENA)BEGINIF RST='1' THEN CQI<=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF ENA='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;END PROCESS;PROCESS(CQI)BEGINCASE CQI ISWHEN"0000"=>LED7S<="0111111";WHEN"0001"=>LED7S<="0000110";WHEN"0010"=>LED7S<="1011011";WHEN"0011"=>LED7S<="1001111";WHEN"0100"=>LED7S<="1100110";WHEN"0101"=>LED7S<="1101101";WHEN"0110"=>LED7S<="1111101";WHEN"0111"=>LED7S<="0000111";WHEN"1000"=>LED7S<="1111111";WHEN"1001"=>LED7S<="1101111";WHEN"1010"=>LED7S<="1110111";WHEN"1011"=>LED7S<="1111100";WHEN"1100"=>LED7S<="0111001";WHEN"1101"=>LED7S<="1011110";WHEN"1110"=>LED7S<="1111001";WHEN"1111"=>LED7S<="1110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END BEHV; 2.2 计数器和译码器分开的程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JSYM ISPORT(CLK,RST,ENA:IN STD_LOGIC;COUT:OUT STD_LOGIC;OUTY:OUTSTD_LOGIC_VECTOR(3 DOWNTO 0)); END JSYM;ARCHITECTURE BEHV OF JSYM ISBEGINPROCESS(CLK,RST,ENA)V ARIABLE 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<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;OUTY<=CQI;END PROCESS;END BEHV;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DECL7S ISPORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ); END DECL7S;ARCHITECTURE BEHV OF DECL7S ISBEGINPROCESS(A)BEGINCASE A ISWHEN"0000"=>LED7S<="0111111";WHEN"0001"=>LED7S<="0000110";WHEN"0010"=>LED7S<="1011011";WHEN"0011"=>LED7S<="1001111";WHEN"0100"=>LED7S<="1100110";WHEN"0100"=>LED7S<="1101101";WHEN"0101"=>LED7S<="1111101";WHEN"0110"=>LED7S<="0000111";WHEN"0111"=>LED7S<="1111111";WHEN"1000"=>LED7S<="1101111";WHEN"1010"=>LED7S<="1110111";WHEN"1011"=>LED7S<="1111100";WHEN"1100"=>LED7S<="0111001";WHEN"1101"=>LED7S<="1011110";WHEN"1110"=>LED7S<="1111001";WHEN"1111"=>LED7S<="1110001";WHEN OTHERS=>NULL;END CASE;END PROCESS;END;图2-1 计数器和译码器合起来的RTL图CLK RST ENACOUT LED7S[6..0]CNT4_YMinst图2- 2 计数器和译码器合起来的顶层文件原理图图2-3 计数器和译码器合起来的功能仿真波形A[3..0]LED7S[6..0]DECL7SinstCLKRST ENACOUT OUTY[3..0]cnt10inst1VCCrst0INPUT VCCclock0INPUT VCCena0INPUT cout0OUTPUTled[6..0]OUTPUT图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的时序仿真切图:。
实验二含异步清零和同步使能的加法计数器一、实验目的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所示。
实验二含异步清零和同步使能的加法计数器
一、实验目的
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程序,用户可参照光
盘中提供的示例程序。
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];*/。