VHDL学习笔记-(3)LAB1.3 基本的存储单元及寄存器

        基本的寄存器register是D-type Flipflop。而D触发器有两种,一种是同步复位(synchronize),另一种是异步复位(asynchronize),两者的不同表现在reset这个信号上。

同步复位D触发器的原理:因为同步的意思是复位信号与时钟同步,即遇到时钟上升沿后,根据复位(reset)信号判断最终的结果,所以首先检测时钟的上升沿信号。若出现时钟上升沿时检测到复位(reset)信号,则 输出Q置0,若出现时钟上升沿时没有检测到复位(reset)信号,则正常进行D触发器的功能:输出Q置输入D。

异步复位触发器原理:因为异步的意思是复位信号与时钟异步,即复位(reset)信号出现时,输出立即置0,与时钟信号无关,所以首先检测复位(reset)信号。若有复位(reset)信号,则输出Q立即置0。若无复位(reset)信号,则在时钟上升沿正常进行D触发器功能。

根据上面的描述,可以写出两种寄存器的VHDL,因为存在条件判断,所以用到process:

同步复位D触发器:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity DFF_syn is
PORT(D,CK,RESET:IN STD_LOGIC;
		Q			:OUT STD_LOGIC);
end DFF_syn;

architecture Behavioral of DFF_syn is

begin
	SYN:PROCESS(CK,RESET)
	BEGIN
		IF ck='1' AND ck'event THEN
			IF RESET='1' THEN Q<='0';
			ELSE Q<=D;
			END IF;
		END IF;
	END PROCESS;

end Behavioral;

RTL图:

异步复位D触发器:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity DFF_asyn is
PORT(D,CK,RESET: IN STD_LOGIC;
		Q			: OUT STD_LOGIC);
end DFF_asyn;

architecture Behavioral of DFF_asyn is

begin
	ASYN:PROCESS(CK,RESET)
	BEGIN
		IF RESET='1' THEN
			Q<='0';
		ELSIF CK'EVENT AND CK='1' THEN
			Q<=D;
		END IF;
	END PROCESS;


end Behavioral;

RTL图:

testbench测试:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
 
ENTITY tb_DFF_asyn IS
END tb_DFF_asyn;
 
ARCHITECTURE TEST OF tb_DFF_asyn IS 
 
    -- Component Declaration for the Unit Under Test (UUT)
 
    COMPONENT DFF_asyn
    PORT(
         D : IN  std_logic;
         CK : IN  std_logic;
         RESET : IN  std_logic;
         Q : OUT  std_logic
        );
    END COMPONENT;
    

   --Inputs
   signal D : std_logic:='0';
   signal CK : std_logic:='0';
   signal RESET : std_logic:='0';

 	--Outputs
   signal Q : std_logic:='0';
   -- No clocks detected in port list. Replace <clock> below with 
   -- appropriate port name 
 
   --constant CLK_period : time := 10 ns;
 
BEGIN
 
	-- Instantiate the Unit Under Test (UUT)
   uut: DFF_asyn PORT MAP (
          D => D,
          CK => CK,
          RESET => RESET,
          Q => Q
        );
	
	
   -- Clock process definitions
   CLK_process :process
   begin
	--wait for 100 ns;
	CK <= '0';
	wait for 5 ns;
	CK <= '1';
	wait for 5 ns;
   end process;
 

   -- Stimulus process
   process
   begin		
		wait for 100 ns;
--		
--		D<='0';
--		--CK<='0';
--		reset<='0';
--		wait for 10 ns;
--		
--		D<='1';
--		--CK<='1';
--		reset<='0';
--		wait for 10 ns; 
--		
--		D<='1';
--		--CK<='1';
--		reset<='1';
--		wait for 10 ns;
		
      --CK <= NOT CK AFTER 10 ns;
		
		D <= NOT D AFTER 50 NS;
		RESET <= NOT RESET AFTER 200 NS;
		
      wait;
   end process;
END TEST;

测试结果:

同步复位D触发器:

 异步复位D触发器:

则一般来说的寄存器REG的

behavioral结构为:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY REG_MULTI IS
	GENERIC(NBIT:INTEGER:=16);
	PORT(	D:IN STD_LOGIC_VECTOR(NBIT-1 DOWNTO 0);
			CLK:IN STD_LOGIC;
			RST_n:IN STD_LOGIC;
			Q:OUT STD_LOGIC_VECTOR(NBIT-1 DOWNTO 0)
	);
END REG_MULTI;

ARCHITECTURE BEHAVIORAL OF REG_MULTI IS

SIGNAL TEMP:STD_LOGIC_VECTOR(NBIT-1 DOWNTO 0);

	BEGIN
	PROCESS(RST_n,CLK)
		BEGIN
		IF RST_n='0' THEN
			Q<=(OTHERS=>'0');
		ELSIF (RISING_EDGE(CLK)) THEN
			Q<=D;
		END IF;
	END PROCESS;
	
	--Q<=TEMP;
	
END BEHAVIORAL;
		
			

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值