如何用VHDL设计七段数码显示器的十六进制译码器,要求该译码器有三态输出

作者&投稿:梅成 (若有异议请与网页底部的电邮联系)
VHDL程序设计题,100F~

一 bcd加法器。 两位BCD数加法器其事用8位的二进制数加法器就可以了,以下是我最近几天才学的 , 呵呵, 我是EDA的 菜鸟呢

library IEEE;
use IEEE.std_logic_1164.all;
use ieee.numeric_std.all;

entity bcdadder is
port (a : in std_logic_vector(7 downto 0);
b : in std_logic_vector(7 downto 0);
cin : in std_logic;
sum : out std_logic_vector(7 downto 0);
cout : out std_logic);
end bcdadder;

architecture badder of bcdadder is
signal result : unsigned (8 downto 0);
signal carry : unsigned (8 downto 0);
constant zeros: unsigned (7 downto 0) := (others=>'0');
begin
carry <=(zeros & cin );
result <=('0' & unsigned(a) )+ ('0' & unsigned(b))+carry;
sum <= std_logic_vector(result(7 downto 0));
cout <= result (8);
end architecture badder;

编译通过,我还没仿真测试呢

后两个晚点写给你,太晚了,虽然明天是周日

下面是74LS49的VHDL描述,74LS49就是一个驱动共阴极数码管的译码器:
LIBRARY IEEE;
USE IEEE.Std_logic_1164.ALL;
ENTITY ls49 IS
PORT(bl_n:IN Std_logic;
bi:IN Std_logic_vector(3 DOWNTO 0);
a,b,c,d,e,f,g:OUT Std_logic);
END ls49;
ARCHITECTURE behave_49 OF ls49 IS
SIGNAL s:Std_logic_vector(6 DOWNTO 0);
BEGIN
PROCESS(bi,bl_n)
BEGIN
IF bl_n = ′0′ THEN
s ′0′);
ELSE
CASE bi IS
WHEN ″0000″ => s <= B″011_1111″;
WHEN ″0001″ => s <= B″000_0110″;
WHEN ″0010″ => s <= B″101_1011″;
WHEN ″0011″ => s <= B″100_1111″;
WHEN ″0100″ => s <= B″110_0110″;
WHEN ″0101″ => s <= B″110_1101″;
WHEN ″0110″ => s <= B″111_1101″;
WHEN ″0111″ => s <= B″010_0111″;
WHEN ″1000″ => s <= B″111_1111″;
WHEN ″1001″ => s <= B″110_1111″;
WHEN ″1010″ => s <= B″101_1000″;
WHEN ″1011″ => s <= B″100_1100″;
WHEN ″1100″ => s <= B″110_0010″;
WHEN ″1101″ => s <= B″111_1001″;
WHEN ″1110″ => s <= B″111_1000″;
WHEN ″1111″ => s <= B″000_0000″; -- 熄灭
WHENOTHERS=> s ′0′); -- 熄灭
END CASE;
END IF;
END PROCESS;
a <= s(0);
b <= s(1);
c <= s(2);
d <= s(3);
e <= s(4);
f <= s(5);
g <= s(6);
END behave_49;

用case语句就可以,当然也可以由with select,when。。。等语句。输出和数码管的接法有关,下面这个是我用case语句写的,是共阴的接法,共阳的话把q按位取反就是。我综合通过了。
library ieee;
use ieee.std_logic_1164.all;

entity smg_16 is
port( a:in std_logic_vector(3 downto 0);
q:out std_logic_vector(6 downto 0)
);
end smg_16;
architecture bhv of smg_16 is
begin
process(a)
begin
case a is
when "0000"=> q<="0111111";
when "0001"=> q<="0000110";
when "0010"=> q<="1011011";
when "0011"=> q<="1001111";
when "0100"=> q<="1100110";
when "0101"=> q<="1101101";
when "0110"=> q<="1111101";
when "0111"=> q<="0100111";
when "1000"=> q<="1111111";
when "1001"=> q<="1101111";
when "1010"=> q<="1110111";
when "1011"=> q<="1111100";
when "1100"=> q<="0111001";
when "1101"=> q<="1011110";
when "1110"=> q<="1111001";
when others=> q<="1110001";
end case;
end process;
end bhv;


请问在VHDL中,何种情况下需将变量定义为buffer型?
在定义输入输出双向口时可以使用buffer型和inout型,buffer和inout型区别在于输入信号来自于实体内部产生的回读输出的信号,也就是说允许反馈。

请问VHDL中端口、信号、变量有何异同?
端口跟信号:端口有方向,信号无方向之分,端口相当于元器件的引脚,信号就是元件内部的连线,除这个外端口可以看做信号 信号跟变量:变量只能在进程中使用,相当于C中的局部变量,生成的电路是暂存单元;信号相当于C中的全局变量,在进程内外均可使用,生成的是连线或存储单元 以上是我的理解,情况大致...

东时招学员笔试一般都考什么?
(未知) 57、用D触发器做4进制计数(华) 58、实现N位Johnson Counter,N=5(南山桥) 59、用熟悉设计式设计预置初值7进制循环计数器15进制呢(仕兰微 电) 60、数字电路设计必问Verilog\/VHDL设计计数器(未知) 61、BLOCKING NONBLOCKING 赋值区别(南山桥) 62、写异步D触发器verilog module(扬智电笔试) module dff8...

学习FPGA用哪种硬件描述语言比较好
HDL概述 随着EDA技术的发展,使用硬件语言设计PLD\/FPGA成为一种趋势。目前最主要的硬件描述语言是VHDL和Verilog HDL。 VHDL发展的较早,语法严格,而Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。 VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自...

VHDL中子程序调用与元件例化有何区别?函数与过程在具体使用上有何不...
子程序调用与元件例化没有本质的区别,调用一个子程序在硬件上相当于放置了一个电路模块。函数和过程的不同在于:函数只有一个输出,只能通过函数体内的RETURN语句来实现,函数体内不能有信号赋值语句;而过程却可以有不止一个输出,而且是通过过程体内的信号赋值语句或者变量赋值语句来实现的,过程体内的...

4*4矩阵键盘控制数码管的vhdl语言
dataout : OUT std_logic_vector(7 DOWNTO 0); -- 数码管显示数据 en : OUT std_logic); --数码管显示使能 END KEYSCAN;ARCHITECTURE arch OF KEYSCAN IS SIGNAL div_cnt : std_logic_vector(24 downto 0);SIGNAL scan_key : std_logic_vector(3 DOWNTO 0); --扫描码寄存...

VHDL中数据怎么更新
这要看你将数据放在何处。如果数据是存放在变量中的,随时可以用变量赋值语句来更新;如果是放在信号中的,那么在硬件中就会有一个元件来输出这个数据。如果想要更新这个数据的话,需要对这个信号赋值,这种赋值是有延迟的,不像变量随时可以更新赋值。通常在一个仿真周期中对信号只能赋值一次。

求高手解答:试比较(EDA技术)VHDL图形输入法和文本输入法有何优缺点?
比如说状态机吧,若用图形输入的话,需要比较繁琐的转化,转化成基本原件的连线很是耗时,若用文本输入的话,思路比较清晰,分析起来很简单!一般功能描述用文本输入法,逻辑描述用图形文件比较好

vhdl秒表
dat30 : out std_logic_vector(7 downto 0));end minutes;architecture Behavioral of minutes is signal dat31,dat32 : std_logic_vector(7 downto 0):=(others =>'0');begin process(rst3,B10,ky_2j)begin case selector2 is when '1' =>dat32<=dat31; if ky_2j'event and ky...

VHDL语言标准逻辑矢量型数据加法的运算问题!
std_logic_vector类型的“+”运算是在IEEE库的std_logic_arith程序包中被声明的,因此你需要在实体声明之前,先用USE IEEE.std_logic_arith.ALL;子句声明你引用的“+”函数在何处。

巢湖市17625753698: 如何用VHDL设计七段数码显示器的十六进制译码器,要求该译码器有三态输出 -
朝功替硝: 用case语句就可以,当然也可以由with select,when...等语句.输出和数码管的接法有关,下面这个是我用case语句写的,是共阴的接法,共阳的话把q按位取反就是.我综合通过了. library ieee; use ieee.std_logic_1164.all;entity smg_16 ...

巢湖市17625753698: 用VHDL语言编 七段数码管显示译码器(用并行语句) -
朝功替硝: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ymq is port( num:in std_logic_vector(3 downto 0); dout:out std_logic_vector(6 downto 0)); end ymq; architecture a1 of ymq is begin with num ...

巢湖市17625753698: VHDL编程控制七段数码管 -
朝功替硝: 可行.用扫描显示的方法主要是考虑到功耗的问题.同一个时刻一个管子工作,只要扫描频率合适就可以正常显示.当然这种方式显示的亮度比将信号直接连接数码管显示显得暗一些.

巢湖市17625753698: 使用VHDL的CASE语句,设计七段译码器程序, -
朝功替硝: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CL IS PORT ( Q : IN STD_LOGIC_VECTOR(3 DOWNTO 0); ----输入4位BCD码DOUT : OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --7段码...

巢湖市17625753698: 用VHDL设计两位的7段数码管显示两位计数器(低位十进制,高位四进制) -
朝功替硝: 这个可以. 之后再做一个最顶层的ENTITY, 把 add 和 seg_7 当 component 接起来.

巢湖市17625753698: 用VHDL语言设计7段数码管动态显示08210511这8个数 -
朝功替硝: 第一部分library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.std_logic_unsigned.all;entity dis_08210511 is port( clk:in std_logic; rst:in std_logic; dis:out std_logic_vector(6 downto 0) ); end dis_08210511;architecture Behavioral of dis_...

巢湖市17625753698: 用VHDL语言设计一个共阴极七段数码管的译码电路,急求大神解答,高分求助!!!不要粘贴复制的 -
朝功替硝: 74LS49是一个7段译码器,其VHDL描述如下:LIBRARYIEEE; USE IEEE.Std_logic_1164.ALL; ENTITYls49 IS PORT(bl: IN Std_logic; bi: IN Std_logic_vector(3 DOWNTO 0); a,b,c,d,e,f,g: OUT Std_logic); ENDls49; ARCHITECTURE behavl_49 OF ...

巢湖市17625753698: 用VHDL语言编写一个计数器,计数范围为0 - 99,并用七段数码管显示 -
朝功替硝: 用两个计数器实现,一个计数器作为个位计数,另一个为十位计数,两个计数器联合从0-99计数,这个应该没什么问题吧.然后,对于每一个计数器,分别用case语句对应0-9共十个分支,每个分支的部分点亮数码管的不同数字,这个需要参照数码管的FPGA管脚连接情况而定.代码我就不写了.

巢湖市17625753698: 如何用vhdl程序来控制9个7段的数码管 -
朝功替硝: EMP240里不是有好多端口的,端口可以自己定义是用来干什么的.你可以定义一个输入向量,向量的长度是7,用于存放待显示的字符,这七个引脚分别接到数码管的A~G上面.再定义一个长度为9的向量.这个是用来位选的(即选着哪一个数码管点亮,因为数码管显示都是采用动态扫面的方法实现的).在显示的时候比如说先点亮最右边的一位(数码管为共阴的)“1 1111 1110 ”,就选中最右边那一位,然后送段码.延时一段时间后,将位选的向量左移一位.选中第二个数码管.你要让左移后最右边补1才行.

巢湖市17625753698: 怎么用vhdl语言编写EPM1270T144C5上的七段数码管 -
朝功替硝: process(d) is begin case d is when"0000"=>q<="0111111"; --显示0 when"0001"=>q<="0000110"; --显示1 when"0010"=>q<="1011011"; --显示2 when"0011"=>q<="1001111"; --显示3 when"0100"=>q<="1100110...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网