首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >downto to与VHDL中的to

downto to与VHDL中的to
EN

Stack Overflow用户
提问于 2011-10-04 08:03:19
回答 4查看 63.3K关注 0票数 20

我不确定我是否理解vhdl中“downto to”和“to”之间的区别。

我已经在网上看到了一些解释,但我仍然不认为我明白。有没有人能给我讲讲?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-04 08:07:36

一个上升,一个下降:

代码语言:javascript
复制
-- gives 0, 1, 2, 3:
for i in 0 to 3 loop

-- gives 3, 2, 1, 0:
for i in 3 downto 0 loop
票数 17
EN

Stack Overflow用户

发布于 2011-10-07 22:57:11

在向量类型中,最左边的位是最重要的。因此,对于0 to n范围,位0是最高有效位,对于n downto 0范围位,n是最高有效位。

当你组合使用大端和小端两种位序的IP时,这就派上用场了!

例如,Microblaze是大端的,并使用0作为其最大有效位。我将一个接口连接到一个小端的外部设备,所以我在外部引脚上使用了15 downto 0,并将它们重新映射到接口内核中microblaze端的16 to 31上。

VHDL强迫你对此进行显式描述,所以你不能直接使用le_vec <= be_vec;

票数 4
EN

Stack Overflow用户

发布于 2011-10-04 08:10:23

大多数情况下,它只是防止你在实例化组件时混淆了位的顺序。您可能不希望将该LSB存储在X(0)中,然后将其传递给一个期望X(0)包含该MSB的组件。

实际上,我倾向于将DOWNTO用于位向量(STD_LOGIC_VECTOR(7 DOWNTO 0)UNSIGNED(31 DOWNTO 0)),将TO用于RAM (TYPE data_ram IS ARRAY(RANGE NATURAL<>) OF UNSIGNED(15 DOWNTO 0); SIGNAL r : data_ram(0 TO 1023);)和整数计数器(SIGNAL counter : NATURAL RANGE 0 TO max_delay;)。

要扩展@KerrekSB's answer,请考虑优先级编码器:

代码语言:javascript
复制
ENTITY prio
    PORT (
        a : IN STD_LOGIC_VECTOR(7 DOWNTO 1);
        y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0)
    );
END ENTITY;

ARCHITECTURE seq OF prio IS
BEGIN
    PROCESS (a)
    BEGIN
        y <= "000";
        FOR i IN a'LOW TO a'HIGH LOOP
            IF a(i) = '1' THEN
                y <= STD_LOGIC_VECTOR(TO_UNSIGNED(i, y'LENGTH));
            END IF;
        END LOOP;
    END PROCESS;
END ENTITY;

循环的方向(TODOWNTO)控制断言多个输入时发生的事情(示例:a := "0010100")。使用TO时,编号最高的输入(y <= "100")获胜。使用DOWNTO时,编号最低的输入(y <= "010")获胜。这是因为进程中的最后一个赋值优先。但您也可以使用EXIT FOR来确定优先级。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7642000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档