Vhdl 带负载和启用信号的左移位寄存器

Vhdl 带负载和启用信号的左移位寄存器,vhdl,Vhdl,我正在制作一个程序,将4位二进制寄存器的内容向左移位。如果输入0101,它将给出1010 预期工作时间: 如果启用为“1”且加载为“1”,则应读取数据_in并将值计入aux。但不是转移 如果ENABLE为“1”,LOAD为“0”,则aux变量的值应向左移动 如果ENABLE为“0”,则它不会执行任何操作 实际结果: 一切正常,除非启用为“1”且加载为“0”,否则不会移动值 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.all; USE IEEE.NUMERIC

我正在制作一个程序,将4位二进制寄存器的内容向左移位。如果输入0101,它将给出1010

预期工作时间:

  • 如果启用为“1”且加载为“1”,则应读取数据_in并将值计入aux。但不是转移
  • 如果ENABLE为“1”,LOAD为“0”,则aux变量的值应向左移动
  • 如果ENABLE为“0”,则它不会执行任何操作
实际结果:
一切正常,除非启用为“1”且加载为“0”,否则不会移动值

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all; 
USE IEEE.NUMERIC_STD.all;
ENTITY shift_left IS
    GENERIC (num_bits:POSITIVE:= 4);
      PORT (
       clk:                 IN STD_LOGIC;
       enable:              IN STD_LOGIC;
       load:                IN STD_LOGIC;
      data_in:              IN UNSIGNED  (num_bits -1  DOWNTO 0); 
      data_out:         OUT UNSIGNED (num_bits -1  DOWNTO 0)); 
END shift_left;


ARCHITECTURE behaviour OF shift_left IS 
BEGIN
    PROCESS 

    variable aux: UNSIGNED(num_bits-1 downto 0);
    BEGIN
        WAIT UNTIL RISING_EDGE (clk);
            IF enable = '1' THEN
                IF load = '1' THEN
                    aux := data_in; 
                ELSE
                    FOR i IN num_bits-2 TO 0 LOOP 
                        aux(i+1) := aux(i);
                    END LOOP;
                    aux(0) := '0';
                END IF;
            END IF;--  enable
            data_out <= aux;
    END PROCESS;
END behaviour;
IEEE库;
使用IEEE.STD_LOGIC_1164.all;
使用IEEE.NUMERIC_STD.all;
实体左移为
通用(位数:正:=4);
港口(
clk:标准逻辑中;
启用:在STD_逻辑中;
负载:在标准逻辑中;
数据输入:无符号(num_位-1到0);
数据输出:输出无符号(数字位-1到0);
左移结束;
左移位的架构行为是
开始
过程
变量aux:无符号(num_bits-1到0);
开始
等待上升沿(clk);
如果enable='1',则
如果加载='1',则
aux:=数据输入;
其他的
对于num_位-2到0循环中的i
辅助(i+1):=辅助(i);
端环;
辅助(0):=“0”;
如果结束;
如果结束;——使可能

数据显示你是如何测试代码的,因为在我看来它是正常的。设计,而不是程序。您的实体/体系结构本身不会复制问题。这不是一个好主意。IEEE Std 1076-2008 5.2标量类型,5.2.1概述第4段(部分):“L到R的范围称为升序范围;如果L>R,则范围为空范围。”空范围指定的值子集为空。(for循环迭代方案中的一个印刷错误,保留字
to
应该是
downto
,即
for i in num_bits-2 downto 0循环
。另一种实现移位的方法是
aux:=aux(num_bits-2 downto)和'0';
@我正在使用Quartus II和模型sim加上一个测试程序。