集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 4526|回复: 5

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

[复制链接]
BBBBuffon 发表于 2010-12-15 16:21:53 | 显示全部楼层 |阅读模式
我刚接触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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-26 02:45 , Processed in 0.062618 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表