【问题标题】:How does the shift register work in binary to bcd conversion移位寄存器如何在二进制到 bcd 转换中工作
【发布时间】:2019-04-16 10:03:58
【问题描述】:

我发现此代码用于 12 位二进制到 bcd 的转换,但我似乎无法理解移位寄存器部分(仅显示状态机部分)。我需要帮助来了解“&”在移位寄存器中的工作原理,以及是否有人也可以为移位寄存器部分生成不同的方式,使其看起来像下面的代码,因为它更容易理解数据流:


    ishiftRegister(7) <= Rxd;

    ishiftRegister(6 downto 0) <= iShiftRegister(7 downto 1);


     -- State Machine
    process(present_state, binary, binary_in, bcd_temp, bcds_reg, shift_counter)
    begin
        next_state <= present_state;
        bcds_next <= bcd_temp;
        binary_next <= binary;
        shift_counter_next <= shift_counter;

        case present_state is

            when st_start =>
               next_state <= st_shift;
               binary_next <= binary_in;
               bcds_next <= (others => '0');
               shift_counter_next <= 0;

            when st_shift =>
                if shift_counter = 12 then
                    next_state <= st_stop;
                else
                    binary_next <= binary(10 downto 0) & 'L';
                    bcds_next <= bcds_reg(18 downto 0) & binary(11);
                    shift_counter_next <= shift_counter + 1;
                end if;

            when st_stop=>
                next_state <= st_start;

        end case;
    end process;

【问题讨论】:

    标签: binary vhdl data-conversion bcd


    【解决方案1】:

    &amp; 是一个连接运算符。检查例如这个问题以获得更多讨论:Concatenating bits in VHDL

    bcds_next <= bcds_reg(18 downto 0) & binary(11);
    

    使用bcds_reg(18 downto 0),您可以取出bcds_reg 向量的19 个最低有效位(并删除最高有效位)。 IE。寄存器向左移动。 binary(11) 是 12 位向量 binary 的最高有效位。将 19 位向量和单个位与 &amp; 连接会创建一个 20 位向量,然后您可以将其分配给 20 位向量 bcds_next

    对于您的其他问题,我认为以下也是可能的,并且没有&amp; 运算符的相等操作。

    bcds_next(19 downto 1) <= bcds_reg(18 downto 0);
    bcds_next(0) <= binary(11);
    

    【讨论】:

    • 感谢您的回复,还有一个疑问 & 'L' 究竟是做什么的?@am9417
    • binary 寄存器也被移位。最左边的项目被移动到bcds_reg,其他位也被移动到左边。为了将binary 的长度保持在 12 以内,在向量的右端附加了一个值(在本例中为 L)。 L 代表“低”:'它既不是 1 也不是 0,而是一个“可能应该为 0 的弱信号”。在您的设计中,它可能只是用来填充向量以获得所需的 12 长度,因为逻辑似乎确保永远不会使用这个“L”值。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多