建材秒知道
登录
建材号 > 设计 > 正文

用VHDL语言设计一个4位二进制数据比较器,应该怎么设计

单纯的饼干
包容的冰淇淋
2022-12-31 01:50:48

用VHDL语言设计一个4位二进制数据比较器,应该怎么设计?

最佳答案
单薄的路灯
贪玩的钢笔
2025-08-30 07:49:33

LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.ALL

USE IEEE.STD_LOGIC_UNSIGNED.ALL

ENTITY COMPARE4 IS                        ——四位比较器

PORT(IA_MORE_THAN_B:IN STD_LOGIC    ——高位比较的标志位的输入

IB_MORE_THAN_A:IN STD_LOGIC

IA_EQUAL_B:IN STD_LOGIC

A:IN STD_LOGIC_VECTOR(3 DOWNTO 0)——两个输入

B:IN STD_LOGIC_VECTOR(3 DOWNTO 0)

OA_MORE_THAN_B:OUT STD_LOGIC

OB_MORE_THAN_A:OUT STD_LOGIC

OA_EQUAL_B:OUT STD_LOGIC)

END COMPARE4

ARCHITECTURE BEHAV OF COMPARE4 IS

BEGIN

PROCESS(IB_MORE_THAN_A, IA_EQUAL_B,IA_EQUAL_B)

BEGIN

IF(IA_EQUAL_B='1')THEN

——从最高位比较,如果高位大则停止比较输出结果,否则进行下一位比较

IF(A(3)>B(3))THEN              

OA_MORE_THAN_B<='1'OB_MORE_THAN_A<='0'OA_EQUAL_B<='0'

ELSIF(A(3)<B(3))THEN

OA_MORE_THAN_B<='0'OB_MORE_THAN_A<='1'OA_EQUAL_B<='0'

ELSIF(A(2)>B(2))THEN

OA_MORE_THAN_B<='1'OB_MORE_THAN_A<='0'OA_EQUAL_B<='0'

ELSIF(A(2)<B(2))THEN

OA_MORE_THAN_B<='0'OB_MORE_THAN_A<='1'OA_EQUAL_B<='0'

ELSIF(A(1)>B(1))THEN

OA_MORE_THAN_B<='1'OB_MORE_THAN_A<='0'OA_EQUAL_B<='0'

ELSIF(A(1)<B(1))THEN

OA_MORE_THAN_B<='0'OB_MORE_THAN_A<='1'OA_EQUAL_B<='0'

ELSIF(A(0)>B(0))THEN

OA_MORE_THAN_B<='1'OB_MORE_THAN_A<='0'OA_EQUAL_B<='0'

ELSIF(A(0)<B(0))THEN

OA_MORE_THAN_B<='0'OB_MORE_THAN_A<='1'OA_EQUAL_B<='0'

ELSE

——如果输入中两个数相等的标志位为0,则表明高位不相等,停止比较,输出结果。

OA_MORE_THAN_B<='0'OB_MORE_THAN_A<='0'OA_EQUAL_B<='1'

END IF

ELSE

OA_MORE_THAN_B<=IA_MORE_THAN_BOB_MORE_THAN_A<=IB_MORE_THAN_A

OA_EQUAL_B<=IA_EQUAL_B

END IF

END PROCESS

END BEHAV

VHDL 的英文全名是VHSIC Hardware Description Language(VHSIC硬件描述语言)。VHSIC是Very High Speed Integrated Circuit的缩写,是20世纪80年代在美国国防部的资助下始创的,并最终导致了VHDL语言的出现。1987 年底,VHDL被 IEEE 和美国国防部确认为标准硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

最新回答
醉熏的板凳
想人陪的小松鼠
2025-08-30 07:49:33

LIBRARY ieee

USE ieee.std_logic_1164.ALL

ENTITY half_adder IS

PORT(a : IN std_logic

b : IN std_logic

s : OUT std_logic --sum

co : OUT std_logic) --carry out

END half_adder

ARCHITECTURE half_adder OF half_adder IS

SIGNAL c,d:std_logic

BEGIN

co<=a AND b s<=a XOR b

--logic relation due to truth table

END half_adder

LIBRARY ieee

USE ieee.std_logic_1164.ALL

ENTITY full_adder IS

PORT(a,b,cin : IN std_logic

--cin represents carry in from low bit

co,s : OUT std_logic)

END full_adder

ARCHITECTURE full_adder OF full_adder IS

COMPONENT half_adder

--component declaration of half adder

PORT(a,b : IN std_logic

s,co : OUT std_logic)

END COMPONENT

SIGNAL u0_co,u0_s,u1_co:std_logic

--define two signals,represent component inner connection

BEGIN

--connection of half adder component

u0:half_adder PORT MAP(a,b,u0_s,u0_co)

u1:half_adder PORT MAP(u0_s,cin,s,u1_co)

co<=u0_co OR u1_co

END full_adder

甜甜的戒指
机灵的月饼
2025-08-30 07:49:33
LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.ALL

USE IEEE.STD_LOGIC_UNSIGNED.ALL

USE IEEE.STD_LOGIC_ARITH.ALL

ENTITY B2G IS

GENERIC(n:INTEGER :=4)

PORT(

norm : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0)

grey : OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0)

)

END B2G

ARCHITECTURE behave OF B2G IS

SIGNAL temp_normal : STD_LOGIC_VECTOR(n-1 DOWNTO 0)

SIGNAL temp_grey : STD_LOGIC_VECTOR(n-1 DOWNTO 0)

BEGIN

PROCESS(norm)

BEGIN

temp_normal <= norm

temp_grey(n-1) <= temp_normal(n-1)

FOR i IN n-2 DOWNTO 0 LOOP

temp_grey(i) <= temp_normal(i+1) xor temp_normal(i)

END LOOP

grey <= temp_grey

END PROCESS

END behave

无语的小兔子
欣喜的画板
2025-08-30 07:49:33
VHDL语言设计四位全加器:

library IEEE

use IEEE.Std_logic_1164.ALL

entity pro1 is

port(A1,B1,G1BAR,A0,B0,G0BAR:in std_logic

Y20,Y21,Y22,Y23,Y10,Y11,Y12,Y13:out std_logic)

end pro1

architecture pro1_arch of pro1 is

begin

Y10<='0' when(B0='0') and ((A0='0') and (G0BAR='0')) else '1'

Y11<='0' when(B0='0') and ((A0='1') and (G0BAR='0')) else '1'

Y12<='0' when(B0='1') and ((A0='0') and (G0BAR='0')) else '1'

Y13<='0' when(B0='1') and ((A0='1') and (G0BAR='0')) else '1'

Y20<='0' when(B1='0') and ((A1='0') and (G1BAR='0')) else '1'

Y21<='0' when(B1='0') and ((A1='1') and (G1BAR='0')) else '1'

Y22<='0' when(B1='1') and ((A1='0') and (G1BAR='0')) else '1'

Y23<='0' when(B1='1') and ((A1='1') and (G1BAR='0')) else '1'

end pro1_arch

能实现四位二进制数全加的数字电路模块,称之为四位全加器。

http://baike.baidu.com/link?url=GaCnz6D-_GQfu1rs_YfE_cZKiwRMcRtEpeLDS2Nn-0UlA39xIq_E2Vw8ttNptjB-kaKIblYblcLCXucw3cbaIK

坦率的樱桃
仁爱的小天鹅
2025-08-30 07:49:33
3 逻辑设计对电路结构的影响

还有一个使电路复杂化的原因是逻辑电路的输入项太多以致需占用过多的面积。我们从图3和图4两个相同功能的逻辑电路和他们对应的VHDL描述来分析。

比较两图可知,图3是二级逻辑门,每个输入信号与不只一个逻辑门相连,图4是三级的逻辑门,每个输入信号只与一逻辑门相连。由于级数少,延时也较少,因此图3的速度要比图4快。然而,由于图3的输入项要比图4大的多(10:5),因此,占用的面积必然也比图3大。图4是图3通过提取公因数(例中是B和C)得来的,这是把附加的中间项加到结构描述中去的一种过程,它使输入到输出中的逻辑级数增加,牺牲速度换来电路占用面积的减少。对于对延时要求不高的情况下采用这种方法分解逻辑电路以达到减少电路复杂度的目的。

通过以上简单、初步的探讨,我们可以知道,用VHDL进行集成电路的设计,牵涉到对VHDL语言的使用方法和对设计的理解程度。本文讨论了以下几个简化和优化电路设计的3个值得注意的方面:

(1)在用VHDL进行设计中要注意避免不必要的寄存器描述。

(2)在编写程序前要先对整个设计进行较深入的了解�科学的划分设计,多设想几种方案�再进行比较�用多个较少位数的单元取代较多位数的单元。

(3)在延时要求不高的情况下,可提取逻辑电路公因子�把它分解成含有中间变量的多级电路。

独特的小蘑菇
动听的鼠标
2025-08-30 07:49:33
VHDL提供了SIGNAL和VARIABLE这两种对象来处理非静态数据,同时提供了CONSTANT、GENERIC来处理静态数据。

信号可以在PACKAGE、ENTITY和ARCHITECTURE中声明,而变量只能在一段顺序描述代码的内部声明。因此,信号是全局的,而变量通常是局部的。

变量的值通常是无法直接传递到PROCESS外部的。如果需要进行变量值的传递,则必须把这个值赋给一个信号,然后由信号将变量值传递到PROCESS外

部。另一方面,赋予变量的值使即刻生效的,在此后的代码中,此变量将使用新的变量值。这个一点和PROCESS中使用的信号不同,新的信号值通常只有在整

个PROCESS运行完毕后才开始生效。

VHDL中的信号代表的是逻辑电路中的“硬”连线,既可以用于电路单元的输入/输出端口,也可以用于电路内部各单元之间的连接。实体的所有端口都默认为信号。信号定义的格式如下:

SIGNAL

name:type [range] [:= initial_value];

有关信号的最重要一点是,当信号用在顺序描述语句(如PROCESS内部)中时,它并不是立即更新的,信号值是在相应的进程、函数或过程完成后才进行更新的。当对信号进行赋初始值的操作是不可综合的,只能用来进行仿真。

变量仅用于局部的电路描述。它只能在PROCESS,FUNCTION和PROCEDURE内部使用,而且对它的赋值是立刻生效的,所以新的值可以再下一行中立即使用。仅用于顺序描述代码中。

友好的小虾米
彩色的太阳
2025-08-30 07:49:33
你那个效果不好,还有错误,直接给你个十进制计数器算了

如下

LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.ALL

USE IEEE.STD_LOGIC_UNSIGNED.ALL

ENTITY counter IS

PORT( RST,EN,CLK:IN STD_LOGIC

OC:OUT STD_LOGIC

Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))

END counter

ARCHITECTURE bhv OF counter IS

BEGIN

PROCESS(RST,EN,CLK)

VARIABLE TMP:STD_LOGIC_VECTOR(3 DOWNTO 0)

BEGIN

IF RST='1' THEN TMP:="0000"OC<='0'

ELSIF EN='0' THEN NULL

ELSIF CLK'EVENT AND CLK='1' THEN

IF TMP=9 THEN OC<='1'TMP:="0000"

ELSE TMP:=TMP+1OC<='0'

END IF

END IF

Q<=TMP

END PROCESS

END bhv

这个是顶层例化语句,可以使用生成语句,但这里使用了简单的例化语句

另外再给你一个仿真波形图

LIBRARY IEEE

USE IEEE.STD_LOGIC_1164.all

USE IEEE.STD_LOGIC_UNSIGNED.all

ENTITY jsq10 IS

PORT(RST,EN,CLK:IN STD_LOGIC

Q1,Q2,Q3,Q4,Q5,Q6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))

end jsq10

ARCHITECTURE BHV of jsq10 is

SIGNAL OC2,OC3,OC4,OC5,OC6,OC7:STD_LOGIC

component counter

PORT( RST,EN,CLK:IN STD_LOGIC

OC:OUT STD_LOGIC

Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))

END component

begin

u1:counter PORT MAP(RST=>RST,EN=>EN,CLK=>CLK,Q=>Q1,OC=>OC2)

u2:counter PORT MAP(RST=>RST,EN=>EN,CLK=>OC2,Q=>Q2,OC=>OC3)

u3:counter PORT MAP(RST=>RST,EN=>EN,CLK=>OC3,Q=>Q3,OC=>OC4)

u4:counter PORT MAP(RST=>RST,EN=>EN,CLK=>OC4,Q=>Q4,OC=>OC5)

u5:counter PORT MAP(RST=>RST,EN=>EN,CLK=>OC5,Q=>Q5,OC=>OC6)

u6:counter PORT MAP(RST=>RST,EN=>EN,CLK=>OC6,Q=>Q6,OC=>OC7)

END BHV