vhdl中的n位环计数器

VHDL.项目 是实现参数化的n位切换尾部 戒指柜台 using VHDL. 此项目中提供了参数化振铃计数器的VHDL代码。

这意味着用户可以在不修改的情况下容易地改变振铃计数器的位数 VHDL. 戒指柜台内的代码。 有一个参数n来定义环形计数器的位数,并且当我们想要更改位数时,只需更改参数n并重新合成或模拟。 

振铃计数器的VHDL代码

参数化的n位 戒指柜台 使用行为和结构代码来实现,非常容易理解和发展。参数化的结构VHDL代码 使用n位环计数器使用 生成陈述。 环计数器的主要成分是D-FLIP-FLOP。

D触发器的VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- fpga4student.com FPGA projects, VHDL.项目, Verilog projects
-- VHDL project: 振铃计数器的VHDL代码
-- VHDL code for DFF
entity DFF is
   port(
      Q : out std_logic;      -- Data output
      CLK :in std_logic;      -- Clock input
      RESET :in std_logic;  -- Synchronous reset input
      D :in  std_logic      -- Data input
   ); 
end DFF;
architecture Behavioral of DFF is  --architecture of the circuit.
begin  --"begin" statement for architecture.
process(CLK,RESET) --process with sensitivity list.
begin  --"begin" statment for the process.
 if (RESET = '1') then-- asynchronous reset
         Q <= '0';
 elsif( rising_edge(CLK) ) then
          Q <= D;       
      end if;       
end process;  --end of process statement.
end Behavioral;

上述DFF具有一个异步复位引脚,用于随时重置DFF的状态。这意味着它不需要等待时钟的上升沿。 

使用行为建模的振铃计数器的VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
------------------------------------------
---- N bit switch tail ring counter ------
------------------------------------------
-- Behavior
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
-- VHDL project: 振铃计数器的VHDL代码
entity Behavior_Ring_Counter is
generic ( N : integer:=4 );
port ( 
 CLK: in std_logic; -- clock
 RESET: in std_logic; -- reset
 Q_OUT: out std_logic_vector(N-1 downto 0) -- output
 
 );
end Behavior_Ring_Counter;
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
architecture Behavioral of Behavior_Ring_Counter is
signal not_QN: std_logic;
signal Q : std_logic_vector(N-1 downto 0):=(others => '0');
begin
not_QN <= not Q(N-1);
process(CLK,RESET)
begin
 if(RESET='1') then -- asynchronous reset
 Q <= (others => '0');
 elsif(rising_edge(CLK)) then
 Q <= Q(N-2 downto 0) & not_QN; -- Switch TAil ring counter
 end if;
end process;
Q_OUT <= Q;
end Behavioral;

另一个版本的 参数化 n位环计数器是以下结构VHDL码使用 GENERATE statement.

使用结构建模的戒指计数器的VHDL码:

-- fpga4student.com FPGA projects, VHDL.项目, Verilog projects
-- VHDL project: 振铃计数器的VHDL代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
------------------------------------------
---- N bit switch tail ring counter ------
------------------------------------------
-- STructurally
entity Structural_Ring_Counter is
generic ( N : integer:=4 );
port ( 
 CLK: in std_logic; -- clock
 RESET: in std_logic; -- reset
 Q_OUT: out std_logic_vector(N-1 downto 0) -- output
 
 );
end Structural_Ring_Counter;

architecture structural of Structural_Ring_Counter is
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
signal not_QN: std_logic;
signal D,Q : std_logic_vector(N-1 downto 0):=(others => '0');
begin
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
 N_BIT_Ring_counter : for i in 0 to N-1 generate
    begin
        F0 : if ( i = 0 ) generate   -- First DFF
            begin U1 : entity work.DFF port map       
            ( 
 Q => Q(0),
 CLK => CLK,
 RESET => RESET,
 D => not_QN
 );
 end generate F0;
        F1 : if ( i /= 0 ) generate  -- The rest of DFFs
            begin U2 : entity work.DFF port map   
 (
 Q => Q(i),
 CLK => CLK,
 RESET => RESET,
 D => Q(i-1)
 );
 end generate F1;
    end generate N_BIT_Ring_counter;     
  not_QN <= not Q(N-1);
  Q_OUT <= Q;
end structural;

还提供VHDL测试窗以验证上述代码的操作。

振铃计数器的VHDL Testbench码:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
-- VHDL project: 振铃计数器的VHDL代码
-- VHDL Testbench code for ring counter
ENTITY tb_counter IS
END tb_counter;

ARCHITECTURE behavior OF tb_counter IS 

    -- Component Declaration for the Unit Under Test (UUT)

    COMPONENT Structural_Ring_Counter
  GENERIC
 ( N : integer:=5);
    PORT(
         CLK : IN  std_logic;
         RESET : IN  std_logic;
         Q_OUT : OUT  std_logic_vector(4 downto 0)
        );
    END COMPONENT;
    

   --Inputs
   signal CLK : std_logic := '0';
   signal RESET : std_logic := '0';

  --Outputs
   signal Q_OUT : std_logic_vector(4 downto 0);

   -- Clock period definitions
   constant CLK_period : time := 10 ns;

BEGIN
-- fpga4student.com FPGA projects, VHDL projects, Verilog projects
 -- Instantiate the Unit Under Test (UUT)
   uut: Structural_Ring_Counter 
 generic map 
 (
 N => 5-- change number of bits here
 )
 PORT MAP (
          CLK => CLK,
          RESET => RESET,
          Q_OUT => Q_OUT
        );

   -- Clock process definitions
   CLK_process :process
   begin
 CLK <= '0';
 wait for CLK_period/2;
 CLK <= '1';
 wait for CLK_period/2;
   end process;


   -- Stimulus process
   stim_proc: process
   begin 
      -- hold reset state for 100 ns.
 RESET <= '1';
      wait for 100 ns; 
 RESET <= '0';
      wait for CLK_period*10;

      -- insert stimulus here 

      wait;
   end process;

END;

正如我们从测试台所看到的那样,要更改环形计数器的位数,只需修改输入参数n并重新模拟。

振铃计数器的仿真结果:

振铃计数器的VHDL代码

行为和结构VHDL代码都是合成的。以下是行为建模环计数器的RTL原理图.

振铃计数器的VHDL代码

RTL示意图由Xilinx ISE合成。 
推荐的 VHDL.项目:
1. 什么是FPGA? VHDL如何在FPGA上使用
2. FIFO内存的VHDL代码
3. FIR筛选器的VHDL代码
4. 8位微控制器的VHDL代码
5. 矩阵乘法的VHDL代码
6. 用于开关尾圈计数器的VHDL代码
7. FPGA上数字闹钟的VHDL代码
8. 8位比较器的VHDL代码
9. 如何使用VHDL将文本文件加载到FPGA中
10。 D触发器的VHDL代码
11.  完整加法器的VHDL代码
12. VHDL.中的PWM发生器,具有可变占空比
13。 ALU的VHDL代码
14。 VHDL.代码用于测试台的计数器
15。 16位ALU的VHDL代码
16。 vhdl的变速器设计
17。 VHDL.中的非线性查找表实现
18。 VHDL.中的加密协处理器设计

FPGA Verilog VHDL课程

2评论:

  1. 实际上,这是一个'parametrisable'环形计数器而不是一个'programmable'一。迂腐:)
    可编程表示运行时功能,而无需重新编译。
    为了完整性:呈现的环形计数器是一个'Johnson' type ring-counter.

    回复删除
  2. 谢谢Josyb。我认为你的术语更准确地描述在这个项目中的意思。但是,最好使用这个术语"Parameterized"。让我更改为参数化的n位环形计数器。

    回复删除

趋势FPGA项目