⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unicntr.vhd

📁 通用寄存器
💻 VHD
字号:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;

ENTITY unicntr IS
  GENERIC(n: positive :=8);
  PORT( clock: IN std_logic;
        mode: IN std_logic_vector(2 DOWNTO 0);
        serinl: IN std_logic;
        serinr: IN std_logic;
        datain: IN std_logic_vector((n-1) DOWNTO 0);
        
        termcnt: OUT std_logic;
        dataout: OUT std_logic_vector((n-1) DOWNTO 0));
END unicntr;

ARCHITECTURE v1 OF unicntr IS
  SIGNAL int_reg: std_logic_vector((n-1) DOWNTO 0);

BEGIN  
  PROCESS(clock)
  BEGIN
  
    IF (RISING_EDGE(clock)) THEN
      CASE mode IS
        WHEN "000" => int_reg <= (OTHERS => '0'); --rst
        WHEN "001" => int_reg <= datain; --parallel load
        WHEN "010" => int_reg <= int_reg+1; --count up
        WHEN "011" => int_reg <= int_reg-1; --count down
        WHEN "100" => int_reg <= int_reg((n-2) DOWNTO 0) & serinl; --shift left
        WHEN "101" => int_reg <= serinr & int_reg((n-1) DOWNTO 1); --shift right
        WHEN OTHERS => NULL; --do nothing
      END CASE;
    END IF;
    
  END PROCESS;
  
  PROCESS(int_reg)
  BEGIN
    termcnt<='1';
    FOR i IN int_reg'RANGE LOOP
      IF int_reg(i)='1' THEN
        termcnt<='0';
        EXIT;
      END IF;
    END LOOP;
  END PROCESS;
    
  dataout<=int_reg;

END v1;
    
      
      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -