用FPGA实现的七段数码管vhdl代码
用FPGA实现的七段数码管vhdl代码
具体设计:Vhd代码:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;---- Uncomment the following library declaration if instantiating---- any Xilinx primitives in this code.--library UNISIM;--use UNISIM.VComponents.all;entity sevenled_vhd isPort (input : in STD_LOGIC_VECTOR (3 downto 0);led : out STD_LOGIC_VECTOR (7 downto 0)); end sevenled_vhd;architecture Behavioral of sevenled_vhd isbeginled<= "11000000" when input="0000" else -- 0"11111001" when input="0001" else -- 1"10100100" when input="0010" else -- 2"10110000" when input="0011" else -- 3"10011001" when input="0100" else -- 4"10010010" when input="0101" else -- 5"10000010" when input="0110" else -- 6"11111000" when input="0111" else -- 7"10000000" when input="1000" else -- 8"10010000" when input="1001" else -- 9"10001000" when input="1010" else -- A"10000011" when input="1011" else -- b"10100111" when input="1100" else -- c"10100001" when input="1101" else -- d"10000110" when input="1110" else -- E"10001110"; -- F end Behavioral;管脚约束:Net "led<7>" LOC=N19;Net "led<6>" LOC=N15;Net "led<5>" LOC=R20;Net "led<4>" LOC=R18;Net "led<3>" LOC=U20;Net "led<2>" LOC=T18;Net "led<1>" LOC=U18;Net "led<0>" LOC=W20;Net "input<3>" LOC=F18;Net "input<2>" LOC=G20;Net "input<1>" LOC=J18;Net "input<0>" LOC=L18;综合结果:仿真:wait for 100ms; --0input<="0000";wait for 100ms; --1input<="0001";wait for 100ms; --2input<="0010";wait for 100ms; --3input<="0011";wait for 100ms; --4input<="0100";wait for 100ms; --5input<="0101";wait for 100ms; --6input<="0110";wait for 100ms; --7input<="0111";wait for 100ms; --8input<="1000";wait for 100ms; --9input<="1001";wait for 100ms; --Ainput<="1010";wait for 100ms; --Binput<="1011";wait for 100ms; --Cinput<="1100";wait for 100ms; --Dinput<="1101";wait for 100ms; --Einput<="1110";wait for 100ms; --Finput<="1111";烧录程序结果扩展板由8个数码管,选择其中一个显示。
(VHDL实验报告)数码管显示(一位数码管显示0-9,八位数码管显示学号后八位)
(1)一位数码管显示0-9:
(2)八位数码管显示学号后八位: 七、心得体会
七段码管位选输入信号 七段码管位选输入信号 七段码管位选输入信号
五、 实验步骤
1、打开 QUARTUSII 软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3、按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序。其 程序如下所示:
(1)一位数码管显示0-9:
电子科技大学成都学院学院
标准实验报告
(实验)课程名称 数字电路 EDA 设计与应用
姓名 乱弹的枇杷 学号 专业 指导教师
一、 实验名称 数码管显示(一位数码管显示 0-9,八位数码管显示学号
后八位)
二、 实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、掌握 VHDL 的 CASE 语句及多层次设计方法。
信号名称对应fpga管脚名说明7segaf13七段码管段输入信号7segbf14七段码管段输入信号7segcf15七段码管段输入信号7segde15七段码管段输入信号7segef16七段码管段输入信号7segff17七段码管段输入信号7segge18七段码管段输入信号7segdpf18七段码管dp段输入信号7segsel0g18七段码管位选输入信号7segsel1g17七段码管位选输入信号7segsel2g16七段码管位选输入信号实验步骤1打开quartusii软件新建一个工程
信号名称 7SEG-A 7SEG-B 7SEG-C 7SEG-D 7SEG-E 7SEG-F 7SEG-G 7SEG-DP 7SEG-SEL0 7SEG-SEL1 7SEG-SEL2
vhdl_4位七段数码管
基于vhdl 实现的4位七段数码管显示显示内容为4位16进制数,数码管共阴极连接。
有置数及自加一功能。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE ieee.std_logic_unsigned.all;ENTITY counter0000_ffff ISPORT ( clk, en :in STD_LOGIC;set_ch:in std_logic_vector( 1 downto 0);set_num :in std_logic_vector( 3 downto 0);data : out STD_LOGIC_VECTOR(6 DOWNTO 0);sel : out STD_LOGIC_VECTOR(2 DOWNTO 0) );END counter0000_ffff;architecture behave of counter0000_ffff issignal num,num1,num2,num3,num4: std_logic_vector (3 downto 0); signal num_counter:std_logic;begina:process( clk )variable cc: integer range 0 to 3:=0;beginif( clk = '0' ) thencase cc iswhen 0 => num <= num2;sel <= "011";cc:=1;when 1 => num <= num3;sel <= "010";cc:=2;when 2 => num <= num4;sel <= "001";cc:=3;when 3 => num <= num1;sel <= "000";cc:=0;end case;case num iswhen "0000" => data <= "0111111";when "0001" => data <= "0000110";when "0010" => data <= "1011011";when "0011" => data <= "1001111";when "0100" => data <= "1100110";when "0101" => data <= "1101101";when "0110" => data <= "1111101";when "0111" => data <= "0000111";when "1000" => data <= "1111111";when "1001" => data <= "1101111";when "1010" => data <= "1110111";when "1011" => data <= "1111100";when "1100" => data <= "0111001";when "1101" => data <= "1011110";when "1110" => data <= "1111001";when "1111" => data <= "1110001";end case;end if;end process;b:process( clk ) –自加一beginif( clk = '0') thenif( en = '1') thenCASE set_ch ISwhen "00" => num1<=set_num;when "01" => num2<=set_num;when "10" => num3<=set_num;when "11" => num4<=set_num;end case;elseif num_counter = '0' thenif num1 = "1111" thennum1 <= "0000";num2 <= num2 + 1;else num1 <= num1 +1;end if;if num2 = "1111" thennum2 <= "0000";num3 <= num3 + 1;end if;if num3 = "1111" thennum3 <= "0000";num4 <= num4 + 1;end if;if num4 = "1111" thennum4 <= "0000";end if;end if;END IF;end if;end process;c:process( clk ) –分频variable a:integer range 0 to 9999:=0;beginif( clk = '1') thenif( a = 9999 ) thennum_counter <= not num_counter;a := 0;elsea := a + 1;end if;end if;end process;end behave;。
FPGA_触发器与计数器实验报告
电力学院FPGA应用开发实验报告实验名称:触发器与计数器专业:电子科学与技术姓名:班级:学号:1.触发器功能的模拟实现实验目的:1.掌握触发器功能的测试方法。
2.掌握基本RS触发器的组成及工作原理。
3.掌握集成JK触发器和D触发器的逻辑功能及触发方式。
4.掌握几种主要触发器之间相互转换的方法。
5.通过实验,体会EPLD芯片的高集成度和多I/O口。
实验说明:将基本RS触发器,同步RS触发器,集成J-K触发器,D触发器同时集一个FPGA芯片中模拟其功能,并研究其相互转化的方法。
实验的具体实现要连线测试,实验原理如图所示:2.计数器在VHDL中,可以用Q<=Q+1简单地实现一个计数器,也可以用LPM来实现。
下面分别对这两种方法进行介绍。
方法一:第1步:新建一个Quartus项目。
第2步:建立一个VHDL文件,实现一个8位计数器。
计数器从“00000000”开始计到“11111111”,计数器的模是256。
计数器模块还需要包含一个时钟clock、一个使能信号en、一个异步清0信号aclr和一个同步数据加载信号sload。
模块符号如下图所示:第3步:VHDL代码如下:第4步:将VHDL文件另存为counter_8bit.vhd,并将其设定为项目的最顶层文件,再进行语法检查。
第5步:语法检查通过以后,用KEY[0]表示clock,SW[7..0]表示data,SW[8~10]分别表示en、sload和aclr;LEDR[7..0]表示q。
第6步:引脚分配完成后,编译并下载。
第7步:修改上述代码,把计数器的模更改为100,应如何操作。
模为100的计数器,VHDL代码如下:方法二:使用LPM实现8位计数器。
LPM是指参数化功能模块,用LPM可以非常方便快捷地实现一个计数器。
第1步:选择Tools->MegaWizard Plug-In Manager命令,打开如下图所示的对话框。
第2步:直接单击Next按钮,出现如下图所示的对话框。
fpga触发器及计数器实验报告
XX电力学院FPGA应用开发实验报告实验名称:触发器与计数器专业:电子科学与技术姓名:班级:学号:1.触发器功能的模拟实现实验目的:1.掌握触发器功能的测试方法。
2.掌握基本RS触发器的组成及工作原理。
3.掌握集成JK触发器和D触发器的逻辑功能及触发方式。
4.掌握几种主要触发器之间相互转换的方法。
5.通过实验,体会EPLD芯片的高集成度和多I/O口。
实验说明:将基本RS触发器,同步RS触发器,集成J-K触发器,D触发器同时集一个FPGA芯片中模拟其功能,并研究其相互转化的方法。
实验的具体实现要连线测试,实验原理如图所示:2.计数器在VHDL中,可以用Q<=Q+1简单地实现一个计数器,也可以用LPM来实现。
下面分别对这两种方法进行介绍。
方法一:第1步:新建一个Quartus项目。
第2步:建立一个VHDL文件,实现一个8位计数器。
计数器从“00000000”开始计到“11111111”,计数器的模是256。
计数器模块还需要包含一个时钟clock、一个使能信号en、一个异步清0信号aclr和一个同步数据加载信号sload。
模块符号如下图所示:第3步:VHDL代码如下:第4步:将VHDL文件另存为counter_8bit.vhd,并将其设定为项目的最顶层文件,再进行语法检查。
第5步:语法检查通过以后,用KEY[0]表示clock,SW[7..0]表示data,SW[8~10]分别表示en、sload和aclr;LEDR[7..0]表示q。
第6步:引脚分配完成后,编译并下载。
第7步:修改上述代码,把计数器的模更改为100,应如何操作。
模为100的计数器,VHDL代码如下:方法二:使用LPM实现8位计数器。
LPM是指参数化功能模块,用LPM可以非常方便快捷地实现一个计数器。
第1步:选择Tools->MegaWizard Plug-In Manager命令,打开如下图所示的对话框。
第2步:直接单击Next按钮,出现如下图所示的对话框。
EDA实验二_VHDL七段数码管显示译码
EDA实验二七段数码管显示译码的设计一、实验目的1、掌握七段数码管译码器的工作原理;2、学会运用波形仿真测试检验程序的正确性;3、学会运用波形仿真测试检验程序的正确性。
二、实验设备ZYE1502C型实验箱三、内容要求1、用拨位开关输入8421BCD码,七段数码管显示“0-F”16个16进制的数字。
2、观察字符亮度和显示刷新的效果:(1)在8个七段数码管上同时显示某一数字;(2)在8个七段数码管上动态显示某一数字。
3、扩展内容:(1)动态显示时,能即时改变显示的顺序;(2)动态显示时,实现显示数字从0~F的循环显示。
四、实验步骤1、输入:设计部分采用VHDL语言完成;2、编译;3、仿真;4、下载;5、连线。
(1)四个拨位开关(在P1、P2处选择)连接D3、D2、D1、D0信号所对应的管脚。
时钟CLK所对应的管脚同实验箱上的时钟源相连。
(2)扫描片选信号DIG(0 TO 3)的管脚同七段数码管(共阴)相连;(3)七段数码管驱动信号A,B,C,D,E,F,G的管脚分别同扫描数码管的段输入PCLK处的连接线孔A,B,C,D,E,F,G相连。
五、实验报告1、论述实验过程和步骤;2、填写正确的实验结果。
(1)通过两种显示效果分析:字符显示亮度同扫描频率的关系,且让人眼感觉不出光闪烁现象的最低扫描频率是多少?答:扫描频率越高,显示亮度越低。
人眼看是否闪烁与所用的时钟和分频方式有关,在频率稳定和分频均匀的情况下,最低扫描频率为256Hz,若分频不均匀或频率不稳定,则需更高频率。
(2)字形编码的种类,即一个7段数码管可产生多少种字符,产生所有字符需要多少根被译码信号线?答:一个7段数码管可产生2^7=128种字符,产生所有字符至少需要7根被译码信号线。
但假如只编译0-F,16个字符,则至少只需要4根被译码信号线。
六、实验小结。
答:1、不同控制端需要预先分配控制优先级,否则编写的时候会出现很多问题。
优先级分为普通和特殊,一般错误情况可以跨越权限显示出来。
基于FPGA的七段数码管显示设计
基于FPGA的七段数码管显示设计FPGA是一种灵活可编程的集成电路芯片,可以根据需要重新配置其内部电路的功能和连接。
七段数码管是一种常见的数字显示器,可以显示0-9和一些字母如A、B、C等。
在本文中,我们将介绍如何使用FPGA设计一个基于七段数码管的显示系统。
首先,我们需要一个FPGA开发板,如Xilinx的Spartan-6系列开发板。
开发板上通常配有多个七段数码管和其他外设,以供我们进行测试和验证设计的正确性。
接下来,我们需要使用HDL(硬件描述语言)来描述我们的设计。
VHDL和Verilog是最常用的HDL。
在此我们以VHDL为例进行介绍。
首先,我们需要定义输入输出接口,以及需要的信号。
对于七段数码管显示系统,我们需要定义输入信号来控制要显示的数字或字母,以及一些控制信号如使能信号等。
同时,我们还需要定义输出信号来控制七段数码管的显示。
我们可以借助于状态机的设计方法来实现七段数码管的控制。
状态机是一种用于控制电子系统行为的有限状态自动机。
在状态机设计中,我们首先需要定义系统的各种状态。
对于七段数码管显示系统,我们可以定义六种状态:显示0、显示1、显示2、显示3、显示4和显示5、每个状态表示在对应的数字或字母上显示亮。
接下来,我们需要定义状态转换和输出逻辑。
对于状态转换,我们可以根据输入信号和当前状态来确定下一个状态。
对于输出逻辑,我们可以使用真值表或使用逻辑门等元件的连接来确定每个段显示器的输出信号。
最后,我们需要定义时钟周期和时序逻辑。
时钟周期是指任何一个操作从开始到完成所经过的时间,而时序逻辑是指操作发生的顺序和时间。
在设计完成后,我们需要将设计编译成二进制文件。
编译器将把我们的设计转换为可由FPGA芯片执行的二进制代码。
然后,我们将编译生成的二进制文件烧录到FPGA芯片中,并进行测试验证。
我们可以输入不同的数字或字母,观察七段数码管的显示情况,以确保设计满足我们的需求。
通过以上步骤,我们可以设计一个基于FPGA的七段数码管显示系统。
VHDL数码管扫描显示实验代码
静态数字显示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY staticdigital ISPORT (clk,rst: IN STD_LOGIC; --rst复位,高有效figures: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --七段数码管cats: OUT STD_LOGIC_VECTOR(5 DOWNTO 0)); --控制端END staticdigital;ARCHITECTURE digital OF staticdigital ISSIGNAL address: STD_LOGIC_VECTOR(2 DOWNTO 0); --记录控制端信号中‘0’的位--置,亦即当前数码管的位置SIGNAL colti: INTEGER RANGE 1 TO 2500; --外部时钟,控制一次状态显示的时间BEGINPROCESS(clk,rst)BEGINIF(rst = '1') THEN --复位端有效address <= "111";ELSIF(clk'EVENT AND clk = '1') THEN --等待时钟上升沿的到来colti <= colti + 1;IF(address = "101") THENIF (colti = 2500) THEN --但是要考虑外部时钟是否停留了足够的时间address <= "000";END IF;ELSEIF (colti = 2500) THENaddress <= address + 1;END IF;END IF;END IF;END PROCESS;PROCESS(address)--一个结构体可以有多个进程,--进程之间是并行运行的。
EDA实验报告31_十六进制7段数码管显示译码设计
实验结果及分析
1.十六进制计数器计数到“1111”时cout产生进位信号
2.每一次计数对应数码管不同的显示译码输出,由顶层文件nt_7seg_top.vhdl的时序仿真波形图可见,当数码管显示到“71”即对应的十六进制“F”时,计数值清零(rst0 <= ‘0’),数码管重新从“3F”即‘1’递增至‘F’循环显示。
2.输出信号LED_7seg的7位分别接数码管的7个段a-b-c-d-e-f-g(-h),高位在左,低位在右(如果有小数点,增加h段)。由于使用的是共阴极数码管,各个段接高电平时发光,低电平不亮。
实验内容
实验一:十六进制7段数码显示译码设计
1.用VHDL文本输入方法,完成十六进制计数器和7段数码显示译码电路设计
EDA技术与应用实验报告
姓名
学号
专业年级
电子信息工程
实验题目
十六进制7段数码显示译码设计
实验目的
1.学习7段数码显示译码设计和硬件验证
2.通过VHDL语言设计7段数码显示译码电路,进一步掌握层次化设计方法
实验原理
1.数字系统中的数据处理和运算都是二进制的,输出表达为十六进制数。为了满足十六进制数的译码显示,可利用译码程序在FPGA/CPLD中来实现
3.将clk0接到78脚的时钟输出端,可以获得0-1MHz的时钟调节范围,这解决了数码管循环显示过快,看不清译码输出的问题
附录
(原理图或VHDL代码)
实验过程中所遇到的问题及相应的解决方法
FPGA与数字系统设计-实验六7段数码显示译码器设计
7段数码显示译码器设计1、实验目的熟悉ISE系列软件的设计流程和基本工具使用,学习7段数码显示译码器设计,学习VHDL的CASE语句应用。
2、实验内容7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是二进制的,所以输出表达都是十六进制的,为了满足十六进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中实现。
本实验中,7段译码器的数码管采用共阴数码管,而且不考虑小数点的发光管。
其输出信号LED7S的7位分别接数码管的7个段,高电平有效。
例如,当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。
3、实验器材Spartan 3E开发板。
4、实验说明实验中所需要的源文件在本报告附录中。
5、实验步骤步骤1:创建ISE工程(1)启动桌面上的ISE9.1图标,在Project Navigator中选择File→New Project。
(2)在弹出的对话框(见图1)中,设置工程名为ymq7s,工程存放路径为E:\work\,顶层模块类型选择HDL,并单击Next按钮。
图1 ISE工程属性对话框(3)出现图2所示对话框,目标器件选择spartan3E,具体设计如下图。
图2 ISE工程属性对话框(4)一直点击Next,直到出现图3(即是刚才所设定的),最后点击Finish。
图3 工程设计总表出现图4,这就是所建立的工程,现在我们需要在里面完成我们的设计。
图4 ISE工程属性对话框步骤2:创建新的VHDL设计文件(1)在ISE用户界面中,选择Project→New Source。
(2)在弹出的对话框(见图5)中,选择VHDL Module作为源程序类型,设置文件名为ymq7s,并单击“下一步”按钮。
图5 VHDL的New Source Wizard(3)点击Next,直到出现图6,直到Finish。
7段数码显示译码器
7段数码显示译码器一、实验目的1.掌握QuartusII的使用使用方法,基本操作。
2.熟练掌握Verilog语言的语法,能够写出基本程序3.学习7段数码显示译码器的Verilog硬件设计,并在试验箱上验证。
二、实验环境1.计算机2.EDA试验箱二、实验原理7段数码是纯组合电路,通常的小规模专用IC,如74或6000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是二进制的,所以输出表达都是十六进制的,为了满足十六进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现。
可设输入4位码位A[3:0],输出控制7段共阴数码管的7位数据位LED7S[6:0].输出信号LED7S的7位分别接图2数码管的7个段,高位在左,低位在右。
例如当LED7S输出为“1101101”时,数码管的7个段g,f,e,d,c,b,a分别接1,1,0,1,1,0,1;接有高电平的段发亮,于是数码管显示“5”。
注意,这里没有考虑表示小数点的发光管,如果要考虑,需要增加段h。
三、实验内容将设计好的Verilog程序在Quartus II上进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形,并在硬件平台上进行测试。
四、实验步骤1.新建一个Verilog HDL文件。
2.创建工程,并将文件添加进去。
3.设置并进行全程编译,修改出错的地方,直到程序正确编译。
4.设置芯片相应的管脚。
5.进行时序和功能仿真。
6.选择试验箱模式4。
7.配置下载。
module seg7(IN,led7);input [3:0] IN;output [6:0] led7;reg[6:0] led7;always @(IN)begincase(IN)4'b0000: led7<=7'b0111111;4'b0001: led7<=7'b0000110;4'b0010: led7<=7'b1011011;4'b0011: led7<=7'b1001111;4'b0100: led7<=7'b1100110;4'b0101: led7<=7'b1101101;4'b0110: led7<=7'b1111101;4'b0111: led7<=7'b0000111;4'b1000: led7<=7'b1111111;4'b1001: led7<=7'b1101111;4'b1010: led7<=7'b1110111;4'b1011: led7<=7'b1111100;4'b1100: led7<=7'b0111001;4'b1101: led7<=7'b1011110;4'b1110: led7<=7'b1111001;4'b1111: led7<=7'b1110001;default: led7<=0;endcaseendendmodule六、实验心得通过本次试验,熟悉了Quartus ii的基本操作,能够熟练的使用Verilog语言设计电路,对EDA软硬件平台有了更深的理解。
基于fpga的七段数码显示译码器的设计
基于fpga的七段数码显示译码器的设计实验名称:七段数码显示译码器的设计1. 实验目的:了解七段数码显示译码器的原理学习VHDL的CASE语句应用及多层次设计方法。
熟悉Quartus II的使用,熟练掌握程序的编译,波形的仿真及下载的过程。
2实验内容:编写七段数码显示译码器的程序,并编译,下载到试验箱中查看结果。
3. 实验方案(程序设计说明)七段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只能作十进制BCD码译码,然而数字系统中的数据处理和运算都是二进制的,所以输出表达都是十六进制的,为了满足十六进制的译码显示,最方便的方法就是利用译码程序在FPGA中来实现。
四个输入,七个输出。
4. 实验步骤或程序(经调试后正确的源程序)见附件A5(程序运行结果6(出现的问题及解决方法对于下载模式的选择掌握不牢固。
实验步骤或程序:程序:entity decl 7 isport(A:in bit_vector(3 downto 0); led7s:out bit_vector(6 DOWNTO 0) );end ;architecture one of decl 7 is begin process(A)begincase A iswhen"0000"=>Y<="0111111"; when"0001"=>Y<="0000110"; when"0010"=>Y<="1011011"; when"0011"=>Y<="1001111"; when"0100"=>Y<="1100110"; when"0101"=>Y<="1101101"; when"0110"=>Y<="1111101"; when"0111"=>Y<="0000111"; when"1000"=>Y<="1111111"; when"1001"=>Y<="1101111"; when"1010"=>Y<="1110111"; when"1011"=>Y<="1111100"; when"1100"=>Y<="0111001"; when"1101"=>Y<="1011110"; when"1110"=>Y<="1111001"; when"1111"=>Y<="1110001";when others=>null;end case;end process;end ;管脚设置:文案编辑词条B 添加义项 ?文案,原指放书的桌子,后来指在桌子上写字的人。
FPGA实验三 七段数码管静态与动态显示实验报告
得分:数字系统设计课程实验实验三七段数码管静态与动态显示实验项目三实验名称:七段数码管静态与动态显示实验目的:通过一个七段数码管显示器的设计,让学生掌握组合逻辑电路的设计方法;掌握组合逻辑电路的静态测试方法;再次基础上扩展了解数码管动态驱动方法并实现,要求在数码管上动态显示4个不同数字。
实验类型:设计、验证实验学时:2学时每组人数:1人实验内容及方法:用七段数码显示器显示0-F16个数字。
设计部分采用VHDL语言完成。
在完成静态显示后思考如何完成动态显示。
实验仪器设备:计算机,红芯开发板。
注意:实验板所用的数码管是共阳极。
原来PPT上讲的例子是共阴极。
在程序编写时注意频率的问题。
通过数码管片选信号选通数码管,以控制输出。
段选时0有效一、VHDL代码:--七段数码管静态与动态显-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;---------------------------------------------------------entity decl7isgeneric(DWIDTH:integer:=18);port(clk,en:in std_logic;led7s:out std_logic_vector(6downto0);bitsele:out std_logic_vector(3downto0));end decl7;---------------------------------------------------------architecture behave of decl7issignal key:std_logic_vector(3downto0);signal temp:std_logic_vector(DWIDTH-1downto0);signal count:std_logic_vector(1downto0);signal fp:std_logic;signal clkout:std_logic;------------------------------------------------------------------------------------------------------------------begin---------------------------------------------------------P1:process(clk)--时钟进行18次分频(引脚上接的是50MHZ时钟);beginif en='1'thenif clk'event and clk='1'then temp<=temp+'1';else NULL;end if;else NULL;end if;end process;clkout<=temp(DWIDTH-1);---------------------------------------------------------P2:process(clkout)--分频后的时钟作为位选时钟;beginif clkout'event and clkout='1'thenif count="11"then count<="00";else count<=count+"01";end if;else null;end if;end process;---------------------------------------------------------P3:process(count)--位选(片选)的同时跳转到段,位选(片选)0有效;begincase count iswhen"00"=>bitsele<="1110";key<="0010";--数码管最后一位显示2;when"01"=>bitsele<="1101";key<="0001";--数码管倒数第二位显示1;when"10"=>bitsele<="1011";key<="0100";--数码管第二位显示4;when"11"=>bitsele<="0111";key<="1001";--数码管第一位显示9;when others=>null;end case;end process;---------------------------------------------------------P4:process(key)--段选,数码管为共阳极,段选0有效;begincase key iswhen"0000"=>led7s<="1000000";--数码管显示0;when"0001"=>led7s<="1111001";--数码管显示1;when"0010"=>led7s<="0100100";--数码管显示2;when"0011"=>led7s<="0110000";--数码管显示3;when"0100"=>led7s<="0011001";--数码管显示4;when"0101"=>led7s<="0010010";--数码管显示5;when"0110"=>led7s<="0000010";--数码管显示6;when"0111"=>led7s<="1111000";--数码管显示7;when"1000"=>led7s<="0000000";--数码管显示8;when"1001"=>led7s<="0010000";--数码管显示9;when"1010"=>led7s<="0001000";--数码管显示A;when"1011"=>led7s<="0000011";--数码管显示b;when"1100"=>led7s<="1000110";--数码管显示c;when"1101"=>led7s<="0100001";--数码管显示d;when"1110"=>led7s<="0000110";--数码管显示E;when"1111"=>led7s<="0001110";--数码管显示F;when others=>null;end case;end process;---------------------------------------------------------end behave;---------------------------------------------------------二、波形仿真:波形仿真截图仿真时,clk输入的是50MHZ的方波,使能端en输入高低平有效,数码管位选输出1110,也就是在仿真的630ns内数码管最后一位被选通,与此同时,段选输出为0100100,也就是数码管显示数字2。
七段式数码管简介及其Verilog HDL 驱动编写
图1 七段数码管的显示单元图2.1 共阴极图2.2 共阳极a b c d e f g h七段式数码管就是使用七段点亮的线段来拼成常见的数字和某些字母。
再加上右下角的小数点。
实际上一个显示单元包含了8根控制信号线。
如上图所示,a,b,c,d,e,f,g,h 对应8根控制信号线。
一般数码管有8个如图1所示的显示单元,称为七段八位数码管。
由此引入段码和位码的概念。
段码(seg ):在本文中段码对应单独的显示单元。
或者说段码代表显示单元上显示的具体数值或符号。
位码(sel ):在本文中位码对应8个显示单元。
或者说位码代表相应位置上的显示单元被选通。
为什么数码管需要位码呢?因为数码管利用视觉暂留效应让人们觉得每一位上的数字一直保持着发亮。
其实各个位上的显示单元是按照顺序交替亮灭的,只是频率比较高,看起来就像是一直亮着的。
而位码就是用来按位循环扫描的。
段码与显示内容又是怎样对应的呢? 这就要说到显示原理了。
每一个显示单元中可以被控制亮灭的线段其实是LED 发光二极管。
他们以共阴极或者共阳极的方式接入。
如下图2.1和2.2。
b cclkrstData[31:0] Turn_off[7:0] Seg[7:0] Sel[2:0]如果想显示数字0,图1中的线段a,b,c,d,e,f应当点亮,g,h应该熄灭。
共阴极接入方式的话,输入端接高电平LED才会亮。
abcdefgh对应的电平状态是11111100 。
编码时顺序反过来a对应最低位,h对应最高位。
所以在共阴极接入方式下,显示数字0对应的段码是00111111,即0x3f;在共阳极接入方式下,显示数字0对应的段码是11000000,即0xc0;图2.1和2.2中的a,b,c,d,e,f, g,h称为段选线。
另一边的公共端称为位选线。
显示字母A,B,C,D,E,F分别对应段码:8’h88, 8’h83, 8’hC6, 8’hA1, 8’h86, 8’h8E;特别的,显示单元全灭对应的段码为:8’b1111_1111即是8’hFF;至此已经可以编写驱动程序的一个模块了,就是把显示数字转成段码的模块。
《EDA技术与VHDL》实验七段数码管程序
EDA技术与VHDL实验:七段数码管程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_Unsigned.ALL;ENTITY showseg7 ISPORT(clk: IN STD_LOGIC;seg0,seg1,seg2,seg3,seg4,seg5,seg6,seg7:OUT STD_LOGIC;dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7:OUT STD_LOGIC);END ENTITY showseg7;ARCHITECTURE one OF showseg7 ISSIGNAL count: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL dig_r: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data: STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL disp_r: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINdata <= "00000001001000110100010101100111"; --??????,???????? PROCESS(clk) --1kHzBEGINIF clk'EVENT AND clk='1' THENIF count<=7 THEN count<=count+1;ELSE count<="000";END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN "000" => disp_r<=data(31 DOWNTO 28);dig_r<="01111111";--"00000000";-- WHEN "001" => disp_r<=data(27 DOWNTO 24);dig_r<="10111111";--"00000000";-- WHEN "010" => disp_r<=data(23 DOWNTO 20);dig_r<="11011111";--"00000000";-- WHEN "011" => disp_r<=data(19 DOWNTO 16);dig_r<="11101111";--"00000000";-- WHEN "100" => disp_r<=data(15 DOWNTO 12);dig_r<="11110111";--"00000000";-- WHEN "101" => disp_r<=data(11 DOWNTO 8);dig_r<="11111011";--"00000000";-- WHEN "110" => disp_r<=data(7 DOWNTO 4);dig_r<="11111101";--"00000000";--WHEN "111" => disp_r<=data(3 DOWNTO 0);dig_r<="11111110";--"00000000";--WHEN OTHERS => NULL;END CASE;END PROCESS;PROCESS(disp_r)BEGINCASE disp_r ISWHEN "0000" => seg_r<="00000011";--"10000001";WHEN "0001" => seg_r<="10011111";--"11111001";WHEN "0010" => seg_r<="00100101";--"10110001";WHEN "0011" => seg_r<="00001101";--"11000010";WHEN "0100" => seg_r<="10011001";--"11011000";WHEN "0101" => seg_r<="01001001";--"10100100";WHEN "0110" => seg_r<="11000001";--"10100000";WHEN "0111" => seg_r<="00011111";--"10001111";WHEN "1000" => seg_r<="00000000";--"10000000";WHEN "1001" => seg_r<="00001001";--"10000100"; -- WHEN "1010" => seg_r<="";-- WHEN "1011" => seg_r<="";-- WHEN "1100" => seg_r<="";-- WHEN "1101" => seg_r<="";-- WHEN "1110" => seg_r<="";-- WHEN "1111" => seg_r<="";WHEN OTHERS => NULL;END CASE;END PROCESS;seg0<=seg_r(0);seg1<=seg_r(1);seg2<=seg_r(2);seg3<=seg_r(3);seg4<=seg_r(4);seg5<=seg_r(5);seg6<=seg_r(6);seg7<=seg_r(7);dig0<=dig_r(0);dig1<=dig_r(1);dig2<=dig_r(2);dig3<=dig_r(3);dig4<=dig_r(4);dig5<=dig_r(5);dig6<=dig_r(6);dig7<=dig_r(7);end architecture one;。
《EDA技术与VHDL》实验七段数码管程序
EDA技术与VHDL实验:七段数码管程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_Unsigned.ALL;ENTITY showseg7 ISPORT(clk: IN STD_LOGIC;seg0,seg1,seg2,seg3,seg4,seg5,seg6,seg7:OUT STD_LOGIC;dig0,dig1,dig2,dig3,dig4,dig5,dig6,dig7:OUT STD_LOGIC);END ENTITY showseg7;ARCHITECTURE one OF showseg7 ISSIGNAL count: STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL dig_r: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data: STD_LOGIC_VECTOR(31 DOWNTO 0);SIGNAL disp_r: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINdata <= "00000001001000110100010101100111"; --??????,???????? PROCESS(clk) --1kHzBEGINIF clk'EVENT AND clk='1' THENIF count<=7 THEN count<=count+1;ELSE count<="000";END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN "000" => disp_r<=data(31 DOWNTO 28);dig_r<="01111111";--"00000000";--WHEN "001" => disp_r<=data(27 DOWNTO 24);dig_r<="10111111";--"00000000";--WHEN "010" => disp_r<=data(23 DOWNTO 20);dig_r<="11011111";--"00000000";--WHEN "011" => disp_r<=data(19 DOWNTO 16);dig_r<="11101111";--"00000000";--WHEN "100" => disp_r<=data(15 DOWNTO 12);dig_r<="11110111";--"00000000";--WHEN "101" => disp_r<=data(11 DOWNTO 8);dig_r<="11111011";--"00000000";--WHEN "110" => disp_r<=data(7 DOWNTO 4);dig_r<="11111101";--"00000000";--WHEN "111" => disp_r<=data(3 DOWNTO 0);dig_r<="11111110";--"00000000";--WHEN OTHERS => NULL;END CASE;END PROCESS;PROCESS(disp_r)BEGINCASE disp_r ISWHEN "0000" => seg_r<="00000011";--"10000001";WHEN "0001" => seg_r<="10011111";--"11111001";WHEN "0010" => seg_r<="00100101";--"10110001";WHEN "0011" => seg_r<="00001101";--"11000010";WHEN "0100" => seg_r<="10011001";--"11011000";WHEN "0101" => seg_r<="01001001";--"10100100";WHEN "0110" => seg_r<="11000001";--"10100000";WHEN "0111" => seg_r<="00011111";--"10001111";WHEN "1000" => seg_r<="00000000";--"10000000";WHEN "1001" => seg_r<="00001001";--"10000100";-- WHEN "1010" => seg_r<="";-- WHEN "1011" => seg_r<="";-- WHEN "1100" => seg_r<="";-- WHEN "1101" => seg_r<="";-- WHEN "1110" => seg_r<="";-- WHEN "1111" => seg_r<="";WHEN OTHERS => NULL;END CASE;END PROCESS;seg0<=seg_r(0);seg1<=seg_r(1);seg2<=seg_r(2);seg3<=seg_r(3);seg4<=seg_r(4);seg5<=seg_r(5);seg6<=seg_r(6);seg7<=seg_r(7); dig0<=dig_r(0);dig1<=dig_r(1);dig2<=dig_r(2);dig3<=dig_r(3);dig4<=dig_r(4);dig5<=dig_r(5);dig6<=dig_r(6);dig7<=dig_r(7); end architecture one;。
数码管VHDL代码
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity vga isport(clk:in std_logic;key:in std_logic_vector(7 downto 0);hs:out std_logic;vs:out std_logic;r:out std_logic;g:out std_logic;b:out std_logic);end vga;architecture one of vga issignal clk25:std_logic;signal clk1hz:std_logic;signal flag:integer range 0 to 9;signal hcnt,vcnt:std_logic_vector(9 downto 0); signal x:integer:=345;signal y:integer:=365;signal m:integer:=250;signal n:integer:=270;beginprocess(clk)beginif rising_edge(clk) thenclk25<=not clk25;end if;end process;process(clk)variable cnt:integer range 0 to 24999999; beginif rising_edge(clk) thenif cnt=24999999 thenclk1hz<=not clk1hz;cnt:=0;elsecnt:=cnt+1;end if;end if;end process;process(clk1hz)beginif rising_edge(clk1hz) thenif flag=0 thenflag<=9;elseflag<=flag-1;end if;end if;end process;process(clk1hz)beginif rising_edge(clk1hz) thenif key="01110101"thenx<=x-30;y<=y-30;elsif key="01110010" thenx<=x+30;y<=y+30;end if;end if;end process;process(clk1hz)beginif rising_edge(clk1hz) thenif key="01110100" thenm<=m+30;n<=n+30;elsif key="01101011" thenm<=m-30;n<=n-30;end if;end if;end process;process(clk25)beginif rising_edge(clk25) thenif hcnt<800 thenhcnt<=hcnt+1;elsehcnt<=(others=>'0');end if;end if;end process;process(clk25)beginif rising_edge(clk25) thenif hcnt=640+8 thenif vcnt<525 thenvcnt<=vcnt+1;elsevcnt<=(others=>'0');end if;end if;end if;end process;process(clk25)beginif rising_edge(clk25) thenif((hcnt>=640+8+8) and (hcnt<640+8+8+96)) thenhs<='0';elsehs<='1';end if;end if;end process;process(vcnt)beginif((vcnt>=480+8+2) and (vcnt<480+8+2+2)) thenvs<='0';elsevs<='1';end if;end process;process(clk25)beginif rising_edge(clk25) thenif(((hcnt>=270 and hcnt<280)and(vcnt>=60 and vcnt<120))or((hcnt>=360 and hcnt<370)and(vcnt>=60 and vcnt<120))or((hcnt>=270 and hcnt<370)and(vcnt>=120 and vcnt<130)))thenr<='1';g<='1';b<='1';elsif((hcnt>=m and hcnt<n)and(vcnt>=x and vcnt<y)) thenr<='1';g<='0';b<='0';elsif((hcnt>=310 and hcnt<330)and(vcnt>=345 and vcnt<365)) then r<='0';g<='1';b<='0';elsif((hcnt>=370 and hcnt<390)and(vcnt>=345 and vcnt<365))thenr<='0';g<='0';b<='1';elsif((hcnt>=0 and hcnt<640)and (vcnt>=365 and vcnt<370))thenr<='1';g<='1';b<='1';elsif (((hcnt>=300-293 and hcnt<340-293)and(vcnt>=380 and vcnt<385)) or((hcnt>=300-293 and hcnt<305-293)and(vcnt>=385 and vcnt<415))or((hcnt>=335-293 and hcnt<340-293)and(vcnt>=385 and vcnt<415))or((hcnt>=300-293 and hcnt<340-293)and(vcnt>=415 and vcnt<420))or((hcnt>=335-293 and hcnt<340-293)and(vcnt>=420 and vcnt<455))or((hcnt>=300-293 and hcnt<340-293)and(vcnt>=455 and vcnt<460)))then if flag=9 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300-246 and hcnt<340-246)and(vcnt>=380 and vcnt<385)) or((hcnt>=300-246 and hcnt<305-246)and(vcnt>=385 and vcnt<455))or((hcnt>=335-246 and hcnt<340-246)and(vcnt>=385 and vcnt<455))or((hcnt>=305-246 and hcnt<335-246)and(vcnt>=417 and vcnt<422))or((hcnt>=300-246 and hcnt<340-246)and(vcnt>=455 and vcnt<460)))then if flag=8 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300-199 and hcnt<340-199)and (vcnt>=380 and vcnt<385)) or((hcnt>=335-199 and hcnt<340-199)and(vcnt>=385 and vcnt<460)))then if flag=7 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300-152 and hcnt<340-152)and(vcnt>=380 and vcnt<385)) or((hcnt>=300-152 and hcnt<305-152)and(vcnt>=385 and vcnt<455))or((hcnt>=305-152 and hcnt<340-152)and(vcnt>=420 and vcnt<425))or((hcnt>=335-152 and hcnt<340-152)and(vcnt>=425 and vcnt<455))or((hcnt>=300-152 and hcnt<340-152)and(vcnt>=455 and vcnt<460)))then if flag=6 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300-105 and hcnt<340-105)and(vcnt>=380 and vcnt<385)) or((hcnt>=300-105 and hcnt<305-105)and(vcnt>=385 and vcnt<415))or((hcnt>=300-105 and hcnt<340-105)and(vcnt>=415 and vcnt<420))or((hcnt>=335-105 and hcnt<340-105)and(vcnt>=420 and vcnt<455))or((hcnt>=300-105 and hcnt<340-105)and(vcnt>=455 and vcnt<460)))then if flag=5 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300-58 and hcnt<305-58)and(vcnt>=380 and vcnt<415)) or((hcnt>=300-58 and hcnt<335-58)and(vcnt>=415 and vcnt<420))or((hcnt>=335-58 and hcnt<340-58)and(vcnt>=380 and vcnt<460)))thenif flag=4 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300 and hcnt<335)and(vcnt>=380 and vcnt<385))or((hcnt>=300 and hcnt<335)and(vcnt>=415 and vcnt<420))or((hcnt>=300 and hcnt<335)and(vcnt>=455 and vcnt<460))or((hcnt>=335 and hcnt<340)and(vcnt>=380 and vcnt<460)))thenif flag=3 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300+47 and hcnt<340+47)and(vcnt>=380 and vcnt<385)) or((hcnt>=335+47 and hcnt<340+47)and(vcnt>=385 and vcnt<415))or((hcnt>=300+47 and hcnt<340+47)and(vcnt>=415 and vcnt<420))or((hcnt>=300+47 and hcnt<305+47)and(vcnt>=420 and vcnt<455))or((hcnt>=300+47 and hcnt<340+47)and(vcnt>=455 and vcnt<460)))then if flag=2 thenr<='0';g<='1';b<='0';end if;elsif ((hcnt>=335+94 and hcnt<340+94)and(vcnt>=380 and vcnt<460))then if flag=1 thenr<='0';g<='1';b<='0';end if;elsif (((hcnt>=300+141 and hcnt<340+141)and(vcnt>=380 and vcnt<385)) or((hcnt>=300+141 and hcnt<305+141)and(vcnt>=385 and vcnt<455))or((hcnt>=335+141 and hcnt<340+141)and(vcnt>=385 and vcnt<455))or((hcnt>=300+141 and hcnt<340+141)and(vcnt>=455 and vcnt<460)))then if flag=0 thenr<='0';g<='1';b<='0';end if;elser<='0';g<='0';b<='0';end if;end if;end process;end one;。
FPGA入门系列实验教程二_seg7实验以及仿真
实验二 7段数码管实验以及仿真设置一. 实验目的1. 进一步了解FPGA的设计流程和加深对QII的使用。
2. 学习和了解动态扫描数码管的工作原理的程序设计方法。
3. 加强和熟悉VHDL语言的设计方法和特点,学会掌握常用的 计数器,译码器的设计,功能宏模块使用方法。
4. 学习使用QII中的仿真功能。
二. 实验原理1、管脚映射:略(参考例子)2、开发板上使用了一个4位联体的共阳极7段数码管,动态扫描显示接口是数码管应用最为广泛的一种显示方式之一。
其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O 线控制。
CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM端,而这一端是由I/O控制的,所以我们就可以自行决定何时显示哪一位了。
而所谓动态扫描就是指我们采用分时的方法,轮流控制各个数码管的COM端,使各个LED轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上每个显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
4位7段共阳数码管参考图三. 实验步骤本实验要实现一个增加的数在数码管上显示。
1. 设计主电路模块在QII中新建一个工程,本实验开发板为例。
先建一个顶层图,另存为seg7led.bdf(与所在文件夹名相同).再新建一个.V文件,另存为segmain.v(必需与程序中的模块名 module “segmain“相同,如两处蓝色字体指出的名字必需相同)。
输入以下程序(Verilog以及VHDL程序可以参考光盘中例子):module segmain(clk,reset_n,datain,seg_data,seg_com);input clk;input reset_n;input [15:0] datain;output [7:0]seg_data;output [3:0]seg_com;reg [3:0]seg_com;reg [7:0]seg_data;reg [3:0]bcd_led;reg [36:0]count;always @(posedge clk)beginif(!reset_n)count<=0;elsecount=count+1;endalways @(count[14:13] or datain)begincase(count[14:13])2'b00:beginbcd_led =datain[3:0];seg_com =4'b1110; //低有效end2'b01:beginbcd_led=datain[7:4];seg_com=4'b1101;end2'b10:beginbcd_led=datain[11:8];seg_com=4'b1011;end2'b11:beginbcd_led=datain[15:12];seg_com=4'b0111;endendcaseendalways @(seg_com or bcd_led)begincase(bcd_led)4'h0:seg_data=8'hc0;// 0 //共阳,低有效4'h1:seg_data=8'hf9;// 14'h2:seg_data=8'ha4;// 24'h3:seg_data=8'hb0;// 34'h4:seg_data=8'h99;// 44'h5:seg_data=8'h92;// 54'h6:seg_data=8'h82;// 64'h7:seg_data=8'hf8;// 74'h8:seg_data=8'h80;// 84'h9:seg_data=8'h90;// 94'ha:seg_data=8'h88;// A4'hb:seg_data=8'h83;// b4'hc:seg_data=8'hc6;// c4'hd:seg_data=8'ha1;// D4'he:seg_data=8'h86;// E4'hf:seg_data=8'h8e;// Fdefault:seg_data=8'hc0;endcaseendendmodule2. 开始分析综合这个模块注意:开始分析综合前要把当前要编译的模块设成顶层实体后再开始。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Output(7 downto 0)
具体设计:
Vhd代码:
library IEEE;
use Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code.
--library UNISIM;
--use sevenled_vhd is
Port (
input : in STD_LOGIC_VECTOR (3 downto 0);
led : out STD_LOGIC_VECTOR (7 downto 0)); end sevenled_vhd;
architecture Behavioral of sevenled_vhd is
begin
led<= "" when input="0000" else -- 0
"" when input="0001" else -- 1
"" when input="0010" else -- 2
"" when input="0011" else -- 3
"" when input="0100" else -- 4
"" when input="0101" else -- 5
"" when input="0110" else -- 6
"" when input="0111" else -- 7
"" when input="1000" else -- 8
"" when input="1001" else -- 9
"" when input="1010" else -- A
"" when input="1011" else -- b
"" when input="1100" else -- c
"" when input="1101" else -- d
"" when input="1110" else -- E
""; -- F
end Behavioral;
管脚约束:
Net "led<7>" LOC=N19;
Net "led<6>" LOC=N15;
Net "led<5>" LOC=R20;
Net "led<4>" LOC=R18;
Net "led<3>" LOC=U20;
Net "led<2>" LOC=T18;
Net "led<1>" LOC=U18;
Net "led<0>" LOC=W20;
Net "input<3>" LOC=F18;
Net "input<2>" LOC=G20;
Net "input<1>" LOC=J18;
Net "input<0>" LOC=L18;
综合结果:
仿真:
wait for 100ms; --0
input<="0000";
wait for 100ms; --1
input<="0001";
wait for 100ms; --2
input<="0010";
wait for 100ms; --3
input<="0011";
wait for 100ms; --4
input<="0100";
wait for 100ms; --5
input<="0101";
wait for 100ms; --6
input<="0110";
wait for 100ms; --7
input<="0111";
wait for 100ms; --8
input<="1000";
wait for 100ms; --9
input<="1001";
wait for 100ms; --A
input<="1010";
wait for 100ms; --B
input<="1011";
wait for 100ms; --C
input<="1100";
wait for 100ms; --D
input<="1101";
wait for 100ms; --E
input<="1110";
wait for 100ms; --F
input<="1111";
烧录程序结果
扩展板由8个数码管,选择其中一个显示。
将5V电源连接到其中一个数码管。