FPGA学习笔记06-VHDL语法基础-生成语句(generate)

目录

一、概述

二、形式

三、程序示例

四、仿真说明


一、概述

  GENERATE 语句用来产生多个相同的结构和描述规则结构,如阵列、元件例化和进程。

二、形式

  1. FOR-GENERATE 形式的生成语句

  (1)说明:该生成语句用于描述多重模式,结构中所列举的是并发处理语句。这些语句并发执行而不是顺序执行,因此结构中不能用EXIT和NEXT语句;

  (2)书写格式:

1 标号:FOR 变量 IN 不连续区间 GENERATE
2 <并发处理的生成语句>
3 END GENERATE [标号名];

  2. IF-GENERATE 形式的生成语句

  (1)说明:该语句用于描述结构的例外情况,如边界处发生的特殊情况。

  (2)书写格式:

1 标号:IF 条件 GENERATE
2 <并发处理的生成语句>
3 END GENERATE[标号名];

三、程序示例

  • 4位移位寄存器的设计
library ieee;
use ieee.std_logic_1164.all;
entity shift_register is
port(a,clk:in std_logic;b:out std_logic);
end shift_register;

architecture four_bit_shift_register of shift_register is
component dff
port(a,clk:in std_logic;b:out std_logic);
end component;

signal x : std_logic_vector(0 to 4);
begin

x(0) <= a;
dff1: dff port map(x(0),clk,x(1));
dff2: dff port map(x(1),clk,x(2));
dff3: dff port map(x(2),clk,x(3));
dff4: dff port map(x(3),clk,x(4));
B <= x(4);
end architecture four_bit_shift_register;
  • 用generate语句设计4位移位寄存器
library ieee;
use ieee.std_logic_1164.all;
entity shift_register is
port(a,clk:in std_logic;b:out std_logic);
end shift_register;

architecture four_bit_shift_register of shift_register is
component dff
port(a,clk:in std_logic;b:out std_logic);
end component;

signal X: std_logic_vector(0 to 4);
begin

x(0)<=a;
register1:for i in 0 to 3 GENERATE
    dff:dff port map(x(i),clk,x(i+1));
end GENERATE;

    B <= X(4);
END architecture four_shift_register;
  • n 位寄存器的设计
library ieee;
use ieee.std_logic_1164.all;
entity shift_register is
port(a,clk:in std_logic;b:out std_logic);
end shift_register;

architecture four_bit_shift_register of shift_register is
component dff
port(a,clk:in std_logic;b:out std_logic);
end component;

signal X: std_logic_vector(0 to 4);
begin

register1:FOR i IN 0 TO (n-1) GENERATE
    IF i=0 GENERATE
    dffx:dff PORT MAP (a,clk,X(i+1));
    END GENERATE;

    IF (i>=0) and i/=(n-1) GENERATE
    dffx:dff PORT MAP(X(i),clk,b);
    END GENERATE;

    IF i=(n-1) GENERATER
    dffx:dff PORT MAP( X(i+1),clk,b);
    END GENERATE;
END architecture IF_Gererate_Shifter;

说明:

FOR-GENERATE语句中,FOR的作用和在FOR-LOOP语句中的作用相当。

FOR-LOOP内部顺序语句,FOR-GENERATE内部并行语句;

变量i无需预定义,在模块中不可见,也不能赋值。

FOR-GENERATE语句设计规则体,不规则体可用IF-GENERATE语句。

四、仿真验证

 

posted @ 2021-06-01 00:24  伊可的博客  阅读(4449)  评论(0编辑  收藏  举报