甚高密度脂蛋白中的N位环形计数器

这个 甚高密度脂蛋白项目 实现参数化的N位开关尾 环形计数器 使用VHDL。 此项目中提供了用于参数化环形计数器的VHDL代码。

这意味着用户可以轻松更改环形计数器的位数,而无需修改 甚高密度脂蛋白 环计数器内的代码。 有一个参数N定义环形计数器的位数,当我们要更改位数时,只需更改参数N并重新合成或仿真即可。 

环形计数器的VHDL代码

参数化的N位 环形计数器 使用行为和结构代码实现,非常容易让学生理解和发展。参数化的结构VHDL代码 N位环形计数器的实现使用 生成语句。 环形计数器的主要组件是D型触发器。

D触发器的VHDL代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- fpga4student.com FPGA projects, 甚高密度脂蛋白项目, Verilog projects
-- 甚高密度脂蛋白项目: 环形计数器的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 环形计数器 ------
------------------------------------------
-- Behavior
-- fpga4student.com FPGA projects, 甚高密度脂蛋白项目, Verilog projects
-- 甚高密度脂蛋白项目: 环形计数器的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, 甚高密度脂蛋白项目, 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 环形计数器
 end if;
end process;
Q_OUT <= Q;
end Behavioral;

的另一个版本 参数化 N位环形计数器是以下结构性VHDL代码,使用 生成语句。

使用结构建模的环形计数器的VHDL代码:

-- fpga4student.com FPGA projects, 甚高密度脂蛋白项目, Verilog projects
-- 甚高密度脂蛋白项目: 环形计数器的VHDL代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
------------------------------------------
---- N bit switch tail 环形计数器 ------
------------------------------------------
-- 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, 甚高密度脂蛋白项目, Verilog projects
signal not_QN: std_logic;
signal D,Q : std_logic_vector(N-1 downto 0):=(others => '0');
begin
-- fpga4student.com FPGA 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测试平台代码:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- fpga4student.com FPGA projects, 甚高密度脂蛋白项目, Verilog projects
-- 甚高密度脂蛋白项目: 环形计数器的VHDL代码
-- 甚高密度脂蛋白 Testbench code for 环形计数器
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, 甚高密度脂蛋白项目, 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合成。 
推荐的 甚高密度脂蛋白项目:
1. 什么是FPGA? 甚高密度脂蛋白如何在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。 甚高密度脂蛋白中的移位器设计
17。 甚高密度脂蛋白中的非线性查找表实现
18岁 甚高密度脂蛋白中的密码协处理器设计

FPGA Verilog 甚高密度脂蛋白课程

2条评论:

  1. 其实这是一个'parametrisable'环计数器而不是'programmable'一。脚踏实地的:)
    可编程指示运行时功能,而无需先重新编译。
    出于完整性考虑:提供的环形计数器是一个'Johnson' type ring-counter.

    回复删除
  2. 谢谢乔西布。我认为您的术语更准确地描述了此项目的含义。但是,最好使用术语"Parameterized". Let me change to 参数化 N-bit Ring counter.

    回复删除

热门FPGA项目