За да се създаде по-ефективни Двуизмерна VHDL таблица масиви

T

tanwm

Guest
Здрасти,
Има ли някой посъветва как да се създаде ефективна VHDL 2 тримерно маса масив?За пример за по-долу VHDL код: --

За всеки случай изявление, имам ключ в cntdata константи.Ако имам стотици или хиляди cntdata константи, Някой знае ли как да се създаде по-effciently (напр. без действително писмена форма (или keyin) в константи, за cntdata?

IEEE библиотека;
употреба ieee.std_logic_1164.all;
DDC е субект
порт (
CLK: в std_logic;
промените: в std_logic;

EnClk: Няма std_logic;
DQ_A: Няма std_logic;
CSn_A: Няма std_logic;

Msbfirst: Няма std_logic;
Smode: Няма std_logic;
Режим: Няма std_logic;
на проекта: Няма std_logic);
края лице;
RTL архитектура на DDC е

тип state_type е (S0, S1, S2, S3, S4, S5, S6, S7, S10, нула);
сигнал гласят: state_type;
ndelay сигнал, ndelay1: цяло число от 0 до 150;
сигнал индекс: цяло число от 0 до 150;
сигнал bitindex: цяло число от 0 до 23;
сигнал dcnt: цяло число от 0 до 8000;
сигнал DQ, CSN: std_logic;
CNT сигнал, cinttot: Integer;
сигнал cntdata: Integer;
sig1 сигнал, clkout1: std_logic;
сигнал D3, D4: std_logic_vector (7 downto 0);
започвам
- Логика, за да преминете към следващото състояние
процес (CLK, нулиране)
започвам
ако възстановите = '0 'после
държавни <= s0;
Индекс <= 0;
bitindex <= 9;

EnClk <= '0 ';
CSN <= '1 ';
DQ <= '0 ';
ndelay <= 0;
ndelay1 <= 0;
d3 <= (другите => '0 ');

cntdata <= 1;
sig1 <= '0 ';

Msbfirst <= '1 ';
Smode <= '0 ';
Режим <= '1 ';
Първа <= '0 ';

dcnt <= 0;

ELSIF (rising_edge (CLK)) след това
Първа <= '0 ';
случай е cntdata

когато 1 => d3 <= X "01";
когато 2 => d3 <= X "13";
, когато 3 => d3 <= X "80";
когато 4 => d3 <= X "01";
когато 5 => d3 <= X "3F";
когато 6 => d3 <= X "CF";
когато 7 => d3 <= X "03";
когато .........................
...
...
при 296 => d3 <= X "00";
, когато другите =>

края случай;случай държавата е
когато s0 =>
ако sig1 = '0 'после
CSN <= '1 ';
EnClk <= '0 ';

Smode <= '1 ';
Msbfirst <= '0 ';
sig1 <= '0 ';

Индекс <= 0;
bitindex <= 9;
Режим <= '0 ';държавни <= S1;

dcnt <= 0;

крайна сметка, ако;

когато s5 =>
EnClk <= '1 ';
clkout1 <= '1 ';
ndelay <= ndelay 1;
ако ndelay = 2 след това
ndelay <= 0;
държавни <= S7;
крайна сметка, ако;
когато S7 =>
EnClk <= '0 ';
clkout1 <= '0 ';
ndelay <= ndelay 1;
ако ndelay = 2 след това
ndelay <= 0;
държавни <= S1;
крайна сметка, ако;
CSN <= '0 ';
Режим <= '0 ';

когато S1 =>

EnClk <= '0 ';

DQ_A <= D3 (9-bitindex);
bitindex <= bitindex-1;

Индекс <= индекс 1;
ако bitindex = 1 и след това
EnClk <= '0 ';
държавни <= S2;
DQ_A <= '0 ";
в противен случай
ndelay <= 0;
държавни <= s5;
крайна сметка, ако;
когато S2 =>

CSN <= '1 ';
Режим <= '1 ';
държавни <= S3;

когато s3 =>
DQ_A <= '0 ';
държавни <= s10; - s4

когато s10 =>
dcnt <= dcnt 1;
ако dcnt = 4999 след това
държавни <= s4;
в противен случай
държавни <= S3;
крайна сметка, ако;

когато s4 =>
DQ_A <= '0 ';
Индекс <= индекс 1;
ако индекс = 1 и след това
държавни <= s6;
- Състояние <= s0;
крайна сметка, ако;

когато s6 =>

ако cntdata <296 и sig1 = '0 'после
cntdata <= cntdata 1;
държавни <= s0;
в противен случай
държавни <= s0;
sig1 <= '1 ';

крайна сметка, ако;
Smode <= '1 ';
Msbfirst <= '0 ';
Първа <= '1 ';

когато нула =>

края случай;

крайна сметка, ако;
край процес;

CSn_A <= CSN;
RTL края;

 

Welcome to EDABoard.com

Sponsor

Back
Top