目錄
一、概述
二、形式
三、程序示例
四、仿真說明
一、概述
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語句。
四、仿真驗證