BBBBuffon 发表于 2010-12-15 16:21:53

初学VHDL 一个比较器的程序请教各位

我刚接触VHDL,联系编了一个比较器的程序,下面这个是我编的,后面那个是标准答案,请问各位答案里的i1,i2,i3还有后面那一段有什么作用,我觉得我编的已经表达出意思了啊,不过我没有在软件上编译,请各位帮我解答一下,谢谢~另外我还想问一下为什么看到的很多例子结构体的后面的名称都是rtl,有什么特殊含义么~

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY comparator IS
    PORT(a0,a1,a2,a3:IN STD_LOGIC;
            b0,b1,b2,b3:IN STD_LOGIC;
                      gt,eq,lt:OUT STD_LOGIC);
END comparator;
ARCHITECTURE rtl OF comparator IS
    SINGAL a_tmp,b_tmp:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
   a_tmp<=a3&a2&a1&a0;
   b_tmp<=b3&b2&b1&b0;
   PROCESS(a_tmp,b_tmp)
   BEGIN
          IF(a_tmp>b_tmp)THEN
            gt<='1',eq<='0',lt<='0';
          ELSIF(a_tmp<b_tmp)THEN
            gt<='0',eq<='0',lt<='1';
          ELSIF(a_tmp=b_tmp)THEN
            gt<='0',eq<='1',lt<='0';
          END IF;
   END PROCESS;
END rtl;






LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY comparator IS
    PORT(a0,a1,a2,a3:IN STD_LOGIC;
            b0,b1,b2,b3:IN STD_LOGIC;
                      i1,i2,i3:IN STD_LOGIC;
                     gt,eq,lt:OUT STD_LOGIC);
END comparator;
ARCHITECTURE rtl OF comparator IS
    SINGAL a_tmp,b_tmp:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
   a_tmp<=a3&a2&a1&a0;
   b_tmp<=b3&b2&b1&b0;
   PROCESS(a_tmp,b_tmp,i1,i2,i3)
   BEGIN
          IF(a_tmp>b_tmp)THEN
            gt<='1',eq<='0',lt<='0';
          ELSIF(a_tmp<b_tmp)THEN
            gt<='0',eq<='0',lt<='1';
          ELSIF(a_tmp=b_tmp)THEN
                IF(i2='1')THEN
                  gt<='0',eq<='1',lt<='0';
                ELSIF(i1='1')THEN
                  gt<='1',eq<='0',lt<='0';
                ELSIF(i3='1')THEN
                  gt<='0',eq<='0',lt<='1';
                END IF;
         END IF;
       END PROCESS;
END rtl;

870027359 发表于 2010-12-18 01:36:46

比较器对于多位的比较是从高位到低位的比较的,如果第N位两个数相等,则比较N-1位,也就是说如果高位相等的话,低位的大小比较就决定了这两个数的大小,本例中i1,i2,i3是作为输入的,这个端口应该是为了扩展而考虑的,这是最全面的考虑,你的设计按说也没有错误,只是不太全面.
i1,i2,i3引入的思想,其实是跟全加器当中cin 的引入是一样的。

BBBBuffon 发表于 2010-12-20 16:25:21

回复 2# 870027359


    这样啊 看来任重还道远啊 那这样全面的考虑不会对这个程序产生影响么 万一以后的例子不能通过编译怎么办

lcawen 发表于 2010-12-30 22:36:16

rtl只是习惯而已,我见过很多就是将结构体定义为behav或者behavior的

lcawen 发表于 2010-12-30 22:38:49

我想,还需要加上一个库use std_logic.unsigned.all

hng1123 发表于 2011-4-5 10:00:40

我也联系一下啊
页: [1]
查看完整版本: 初学VHDL 一个比较器的程序请教各位